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 ——

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值