使用注解开发不需要创建配置SQL语句的xml文件,使用起来比较方便,而且功能齐全,全部语句和映射写在接口文件中
修改配置文件,指定带有注解的接口的包名
<mappers>
<package name="com.my.dao"/>
mappers>
调用方法与前文提到的使用了动态代理的方法相同
如果需要向SQL语句传入参数,依旧使用#{}
或${}
顾名思义,就是书写选择语句的注解,相当于标签,如果使用模糊查询,传入的参数应该形如
getUserByUsername("%小%")
@Select("SELECT * FROM users")
//配置映射关系,id是唯一标识符,id=true说明是id字段
@Results(id="userMap", value = {
@Result(id = true, column = "id", property = "id", jdbcType = JdbcType.INTEGER),
@Result(column = "username", property = "username", jdbcType = JdbcType.VARCHAR),
})
List<User> getUsers();
@Select("SELECT * FROM users WHERE username LIKE #{username}")
//ResultMap用于引用前面已经定义的映射关系
@ResultMap("userMap")
List<User> getUserByUsername(String username);
配置映射关系的注解,相当于
标签,id
属性是唯一标识符,用于在后面的注解中引用,value
属性是@Result
注解的集合
与@Results
注解配合使用,相当于
标签,用于配置列名和对象属性名的对应关系,id
用于标识是否是主键与
标签类似,jdbcType
用于指定储存在数据库内的类型
使用方法与@Select
类似,不再赘述
可以使用xml文件中的拼接标签,但是要加上父标签
//如需在注解内拼接SQL语句,则要加上")
@ResultMap("userMap")
List<User> getUsers3(User user);
添加一个根据uid查询的方法
@Select("SELECT * FROM account WHERE uid = #{uid}")
@Results(id = "accountMap", value = {
@Result(id = true, column = "id",property = "id"),
@Result(column = "uid", property = "uid", jdbcType = JdbcType.INTEGER),
@Result(column = "money", property = "money", jdbcType = JdbcType.DOUBLE),
})
List<Account> getAccountByUid(Integer uid);
修改User类的成员,添加一个Account的集合
@Select("SELECT * FROM users")
@Results(value = {
@Result(id = true, column = "id", property = "id", jdbcType = JdbcType.INTEGER),
@Result(column = "username", property = "username", jdbcType = JdbcType.VARCHAR),
//配置为懒加载
@Result(property = "accounts", column = "id",
many = @Many(select = "com.my.dao.IAccount.getAccountByUid", fetchType = FetchType.LAZY))
})
List<User> getUsers2();
在映射Account集合成员的注解内的column
属性填入需要传入的查询方法的列名,在many
属性中填入@Many
标签,其中的select
属性用于指定查询方法的位置,fectchType
可以选择填入FetchType.LAZY
和FetchType.EAGER
,分别对应延迟加载和立即加载
将@Result
中的many
属性和@Many
注解改为one
和@One
即可,不再赘述
配置Configration.xml文件,默认是开启的,所以可以不配置
<settings>
<setting name="cacheEnabled" value="true"/>
settings>
在接口前添加一条注解
//开启二级缓存
@CacheNamespace(blocking = true)