使用注解进行Mybatis开发 谁借莪1个温暖的怀抱¢ 2023-10-07 13:53 1阅读 0赞 ### mybatis 的常用注解说明 ### * @Insert:实现新增 * @Update:实现更新 * @Delete:实现删除 * @Select:实现查询 * @Result:实现结果集封装 * @Results:可以与@Result 一起使用,封装多个结果集 * @ResultMap:实现引用@Results 定义的封装 * @One:实现一对一结果集封装 * @Many:实现一对多结果集封装 * @SelectProvider: 实现动态 SQL 映射 * @CacheNamespace:实现注解二级缓存的使 > Mybatis支持使用注解实现DAO层接口,但是Mybatis主配置文件SqlMapConfig.xml不能用注解替代. #### 使用注解配置CRUD #### 在DAO层接口方法的定义上添加==@Insert==,@Update,@Delete,@Select注解可以实现CRUD,其value属性的值为对应的sql语句注解只有一条SQL语句时value可以省略.示例如下: public interface IUserDao { /** * 查询所有用户 * @return */ @Select("select * from user") List<User> findAll(); /** * 添加用户 * @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},address=#{address} where id=#{id}") void updateUser(User user); /** * 删除用户 * @param userId */ @Delete("delete from user where id=#{id}") void deleteUser(Integer userId); /** * 根据id查询用户 * @param userId * @return */ @Select("select * from user where id=#{id}") User findBvId(Integer userId); /** * 根据用户名称模糊查询 * @param username * @return */ @Select("select * from user where username like #{username}") // @Select("select * from user where username like '%${value}%'") List<User> findUserByName(String username); /** * 查询总用户数量 * @return */ @Select("select count(*) from user") int findTotalUser(); } #### 使用注解配置多表查询和延迟加载 #### 配置输出参数映射的注解如下: @Results注解用于配置输出参数映射,其属性如下: * id: 映射规则的唯一id,可以通过接口方法的==@ResultMap==注解引用 * values: 存储==@Result==注解集合,配置每一个字段的映射规则 @Result注解用于配置单个字段的映射规则,其属性如下: id: 表示当前字段是否为主键字段,默认值false. column: 数据库列名. property: pojo类属性名. one: 使用==@One注解引用其它pojo对象. many: 使用@Many注解引用其它pojo对象集合. @One和@Many==注解用来引用其它pojo对象或pojo对象集合,其属性如下: select: 副查询方法的全类名.使用外层==@Result的column==属性作为参数 fetchType: 加载模式,可选值:FetchType.LAZY表示延迟加载,FetchType.EAGER表示立即加载. 示例如下: ###### 一对多延迟加载 ###### @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.itheima.dao.IAccountDao.findAccountByUid", fetchType = FetchType.LAZY)) }) List<User> findAll(); ###### 一对一立即加载 ###### @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.itheima.dao.IUserDao.findBvId", fetchType= FetchType.EAGER)) }) List<Account> findAll(); #### 使用注解配置缓存 #### * 一级缓存是默认开启的,当调用SqlSession的修改,添加,删除,commit(),==close()方法时会清空一级缓存,也可以显式调用SqlSession对象的clearCache()==方法清空缓存. * 二级缓存默认是关闭的,可以通过Mybatis主配置文件SqlMapConfig.xml的====标签下配置开启二级缓存. <!--配置开启二级缓存--> <settings> <setting name="cacheEnabled" value="true"/> </settings> 在Mapper对象(即DAO层接口)的定义上加上==@CacheNamespace(blocking=true)注解可以使访问此Mapper的所有SqlSession==对象共享二级缓存. package cn.maoritian.dao; @CacheNamespace(blocking=true) // 访问此Mapper对象的SqlSession共享二级缓存 public interface IUserDao { // DAO层方法... }
还没有评论,来说两句吧...