Mybatis注解使用
Mybatis常用注解可以分为三大类:SQL语句映射、结果集映射、关系映射。
1. SQL语句映射
1.1 @Select注解:实现查询功能
1.1.1 用法
- 在Mapper接口文件中导入
@Select注解
import org.apache.ibatis.annotations.Select;
- 在
@Select()
注解的括号中书写SQL语句
@Select("SELECT id, name FROM users WHERE id = #{id}")
User selectById(int id);
该注解通常结合@Results
注解使用。
当数据库字段名与对应实体类的属性名不一致时,会导致实体类中该属性的属性值为null。
当SQL中需要用到其它标签,如<where>
标签时,需要将SQL语句包含在<script></script>
标签中。
1.2 @Insert注解:实现新增功能
1.2.1 用法
- 在Mapper接口文件中导入
@Insert注解
import org.apache.ibatis.annotations.Insert;
- 在
@Insert()注解
的括号中书写SQL语句
/**
* 将信息插入数据表
* @param user User实体类示例
* @return int 当前SQL语句影响的条数
*/
@Insert("INSERT INTO users (id, name) VALUES(#{id}, #{name})")
int insert(User user);
1.3 @Update注解:实现更新功能
1.3.1 用法
@Update("UPDATE users SET name = #{name} WHERE id = #{id}")
int update(User user);
1.4 @Delete注解:实现删除功能
1.4.1 用法
@Delete("DELETE FROM users WHERE id = #{id}")
int deleteById(int id);
2. 结果集映射
@Result,@Results,@ResultMap是结果集映射的三大注解。
2.1 @Results注解:结果集映射关系数组
@Results()
用来表示结果集映射关系数组,其中id
为当前结果集的唯一标志,value
值为结果集映射关系数组,在其中使用@Result
注解来指定数据库字段名称与实体类属性名称之间的映射关系。
2.2 @Result注解
@Result()
注解用来指定数据库字段名称与实体类属性名称之间的映射关系,其中column指定数据库字段的名称,property指定实体类属性的名称,jdbcType指定数据库字段类型,id
值为true表示该字段为主键,默认为false。
2.3 @ResultMap
@ResultMap
注解用来引用@Results
注解声明的映射结果集数组,提高代码复用性。
声明结果集映射关系代码:
@Select({"select id, name, class_id from student"})
@Results(id="studentMap", value={
@Result(column="id", property="id", jdbcType=JdbcType.INTEGER, id=true),
@Result(column="name", property="name", jdbcType=JdbcType.VARCHAR),
@Result(column="class_id ", property="classId", jdbcType=JdbcType.INTEGER)
})
List<Student> selectAll();
引用结果集映射关系代码:
@Select({"select id, name, class_id from student where id = #{id}"})
@ResultMap(value="studentMap")
Student selectById(integer id);
3. 关系映射
3.1 @One注解:一对一的关系映射
@One
注解用于表示一对一的关系映射。
3.1 @Many注解:一对多的关系映射
@Many
注解用于表示一对多的关系映射。
示例代码如下:
@Select("select USER_NO, USER_NAME, USER_SEX from SYS_USER where USER_NO = #{userNo}")
@Results({
@Result(column = "USER_NO", property = "userNo", jdbcType = JdbcType.VARCHAR),
@Result(column = "USER_NAME", property = "userName", jdbcType = JdbcType.VARCHAR),
@Result(column = "USER_SEX", property = "userSex", jdbcType = JdbcType.VARCHAR),
@Result(column = "USER_NO", property = "roleList", many = @Many(select = "com.usercenter.mapper.SysUserRoleMapper.qryUserRoleByUserNo")),
})
SysUserPO qrySysUserDetail(String userNo);
参考文档
—— END ——