🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] # 配置 **用了注解,xml就不要用了,用了就会报错** SqlMapConfig.xml ~~~ <!-- 带有注解包的路径 --> <mappers> <package name="com.jdxia.dao"/> </mappers> ~~~ # 增删改查 ## 增加 ~~~ /** * 保存用户 * @param user */ @Insert("insert into user(username, address, sex, birthday) values " + "(#{username}, #{address}, #{sex}, #{birthday})") void saveUser(User user); ~~~ ## 更改 ~~~ /** * 更改用户 * @param user */ @Update("update user set username=#{username}, sex=#{sex}, birthday=#{birthday} where id=#{id}") void updateUser(User user); ~~~ # 别名 ~~~ /** * 查询所有用户 * @return */ @Select("select * from user") @Results( id = "userMap", value = { @Result(id=true, column = "id", property = "id"), @Result(column = "username", property = "username"), @Result(column = "address", property = "address") } ) List<User> findAll(); ~~~ 设置的别名也可以使用 ~~~ /** * 保存用户 * @param user */ @Insert("insert into user(username, address, sex, birthday) values " + "(#{username}, #{address}, #{sex}, #{birthday})") @ResultMap(value = {"userMap"}) void saveUser(User user); ~~~ 也可以写成这样 ~~~ @ResultMap("userMap") ~~~ 只有value,{}只有一个元素,可以省略 # 关联关系 ## 一对一 one是一对一 fetchType是是否延迟加载 ~~~ /** * 查询所有账户,并且获取每个账户所属的用户信息 * @return */ @Select("select * from account") @Results(id="accountMap",value = { @Result(id=true,column = "id",property = "id"), @Result(column = "uid",property = "uid"), @Result(column = "money",property = "money"), @Result(property = "user",column = "uid",one=@One(select="com.jdxia.dao.IUserDao.findById",fetchType= FetchType.EAGER)) }) List<Account> findAll(); ~~~ ## 一对多 ~~~ /** * 查询所有用户 * @return */ @Select("select * from user") @Results(id="userMap",value={ @Result(id=true,column = "id",property = "userId"), @Result(column = "username",property = "userName"), @Result(column = "address",property = "userAddress"), @Result(column = "sex",property = "userSex"), @Result(column = "birthday",property = "userBirthday"), @Result(property = "accounts",column = "id", many = @Many(select = "com.jdxia.dao.IAccountDao.findAccountByUid", fetchType = FetchType.LAZY)) }) List<User> findAll(); ~~~ # 二级缓存 SqlMapConfig.xml还是需要配置一下的 ~~~ @CacheNamespace(blocking = true) public interface IUserDao { ~~~ # options注解 第一个使用场景: 有一个表 ~~~ CREATE TABLE instance ( instance_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键id', infos VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '', create_time TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间', update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (instance_id) )ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT '实例表'; ~~~ 其中的instance\_id是自增的主键。我希望通过dao层的接口插入的数据能够返回主键的id: 接口代码如下: ~~~ @Insert("insert into instance (infos)" + " (" + " @{infos}," + " NOW()" + ")") @Options(useGeneratedKeys = true, keyProperty = "instanceId", keyColumn = "instance_id") int addInstance(Instance instance); ~~~ `@Options`注解中默认设置的主键对应的字段名为id、在我们的表中,主键名为instance\_id,因此需要将keyProperty和keyColumn设置成我们想要的字段: 这个注解的意思就是,从instance\_id这个字段里面把数据放到传入对象的instanceId成员变量里面。 我们来看下@Option注解的源码: 注解中的useCache还可以设置缓存相关的选项: useCache = true表示本次查询结果被缓存以提高下次查询速度,flushCache = false表示下次查询时不刷新缓存,timeout = 10000表示查询结果缓存10000秒。 # selectKey注解 [https://www.cnblogs.com/weiyinfu/p/6835301.html](https://www.cnblogs.com/weiyinfu/p/6835301.html) 注解大全 [https://blog.csdn.net/weixin\_39805338/article/details/80759155](https://blog.csdn.net/weixin_39805338/article/details/80759155)