MyBatis注解开发

简介:

在MyBatis中,可以通过在映射器接口上使用注解来定义SQL语句,从而避免使用XML映射文件。

一、基础 CRUD 注解

  1. @Insert:执行插入操作。

      • 示例场景:简单单表插入。

      • 补充说明:配合@Options(useGeneratedKeys=true, keyProperty="id")返回自增主键。

      • 示例:

 @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")

       @Options(useGeneratedKeys = true, keyProperty = "id")

       int insertUser(User user);

 

  2. @Delete:执行删除操作。

      • 示例场景:根据条件删除记录(如按 ID 删除)。

      • 示例:

 @Delete("DELETE FROM user WHERE id = #{id}")

     int deleteUserById(Long id);

 

  3. @Select:执行查询操作。

      • 示例场景:单表查询、条件查询。

      • 示例:

 @Select("SELECT * FROM user WHERE id = #{id}")

     User selectUserById(Long id);

 

  4. @Update:执行更新操作。

      • 示例场景:更新记录字段。

      • 示例:

 @Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")

     int updateUser(User user);

 

二、结果映射注解

  1. @Results和@Result

      • 用途:将查询结果映射到 Java 对象属性(解决数据库表的列名与Java对象的属性名不一致问题)。

      • 示例场景:数据库表列名与实体类属性名不同(如user_name→userName)。

      • 说明:

          • @Results:定义多个列与属性的映射关系。

          • @Result:定义单个映射关系,支持column(列名)、property(属性名)、id=true(标记主键)等。

      • 示例:

 @Results({

         @Result(column = "user_id", property = "id", id = true),

         @Result(column = "user_name", property = "userName"),

         @Result(column = "user_age", property = "age")

     })

     @Select("SELECT user_id, user_name, user_age FROM user WHERE id = #{id}")

     User selectUserWithCustomMapping(Integer id);

 

  2. @One(一对一关联)

      • 用途:实现一对一关联查询(如用户与部门)。

      • 示例场景:查询用户时关联部门信息。

      • 说明:通过select属性指定关联查询方法。

      • 示例:

 @Result(column = "dept_id", property = "department",

             one = @One(select = "com.example.mapper.DeptMapper.selectDeptById"))

 

  3. @Many(一对多关联)

      • 用途:实现一对多关联查询(如用户与订单)。

      • 示例场景:查询用户时关联其订单列表。

      • 示例:

 @Result(column = "user_id", property = "orders",

             many = @Many(select = "com.example.mapper.OrderMapper.selectOrdersByUserId"))

 

三、动态 SQL 提供者注解

通过 Java 方法动态生成 SQL(适合复杂场景)。

 @InsertProvider/@DeleteProvider/@SelectProvider/@UpdateProvider

      • 用途:通过 Provider 类动态生成 SQL。

      • 示例场景:复杂条件查询、批量操作。

      • 说明:type:指定 Provider 类。

                  method:指定 Provider 类中的方法名。

 

      • 示例:
   // Provider 类

     public class UserSqlProvider {

         public String insertUser(User user) {

             return new SQL() {{

                 INSERT_INTO("user");

                 if (user.getName() != null) VALUES("name", "#{name}");

                 if (user.getAge() != null) VALUES("age", "#{age}");

             }}.toString();

         }

     }


@InsertProvider(type = UserSqlProvider.class, method = "insertUser")

     int insertUser(User user);

 

四、其他常用注解

  1. @Options

      • 用途:配置操作属性(如主键回填、超时时间、事务隔离级别等)。

      • 示例:

 @Insert("INSERT INTO user(name) VALUES(#{name})")

     @Options(useGeneratedKeys = true, keyProperty = "id", timeout = 5000)

     int insertUser(User user);

 

  2. @Param

      • 用途:当方法有多个参数时,指定参数名(避免混淆)。

      • 示例:

     User selectUserByNameAndAge(@Param("name") String name, @Param("age") int age);


@Select("SELECT * FROM user WHERE name = #{name} AND age = #{age}")

 

  3. @ResultMap

      • 用途:注解与 XML 共存(可通过@ResultMap引用 XML 中的<resultMap>,实现混合使用。)

      • 示例:

 @ResultMap("com.example.mapper.UserMapper.userResultMap")

     User selectUserWithXmlMapping(Long id);

 

五、总结

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值