Mybatis框架(八)-- 注解开发

Mybatis框架(一)-- 快速入门
Mybatis框架(二)-- 原理解析
Mybatis框架(三)-- 详细配置参数
Mybatis框架(四)-- 其他配置
Mybatis框架(五)-- 多表查询
Mybatis框架(六)-- 延迟加载
Mybatis框架(七)-- 缓存
Mybatis框架(八)-- 注解开发

注解开发CRUD

CRUD对应四个注解 @Select @Insert @Update @Delete

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 findById(Integer userId);

    /**
     * 根据用户名称模糊查询
     * @param username
     * @return
     */
    @Select("select * from user where username like #{username} ")
    List<User> findUserByName(String username);

    /**
     * 查询总用户数量
     * @return
     */
    @Select("select count(*) from user ")
    int findTotalUser();

注解方式替代Xml中的ResultMap

 

Results、Result 注解对应xml中的 ResultMap 标签
ResultMap 注解用于引用 Results 注解
One 注解、 Many 注解分别用于配置一对一、一对多关系
fetchType 属性用来配置加载方式

 

配置属性映射

当POJO类和数据库表中列名不同时

配置属性映射:Results注解对应ResultMap,Result注解对应Result,用id属性标明主键。

    @Select("select * from user")
    @Results(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"),
    		}
    )
    List<User> findAll();

 

引用相同Results注解(ResultMap)

在其他方法中引用相同的ResultMap

通过,Results的id属性,和ResultMap注解

    @Select("select * from user")
    @Results( id="userMap",value={……}) 				在Results中指定id
    List<User> findAll();


	@Select("Select * from user where id=#{id}")
	@ResultMap("userMap")							使用ResultMap指定要使用的Results注解
	User findById(Integer userID);

 

注解配置一对一关系


	@Select("select * from account")
    @Results(id="accountMap",value = {
    
    //下三行可以去掉,因为属性名与列名一一对应
            @Result(id = true,property = "id",column = "id"),
            @Result(property = "money",column = "money"),
            @Result(property = "uid",column = "uid"),
            
            @Result
            (
            property = "user",   AccountUser类的私有成员 user
            column = "uid",		  关联使用的外键
            one = @One(select = "com.yy.dao.IUserDao.findByID", 关联使用的sql语句
            fetchType = FetchType.EAGER)  一对一关系使用立即加载
            )
    })
    List<AccountUser> getOne2One();

 

注解配置一对多关系

    @Select("select * from user")
    @Results(id="userAccountsMap",value = {
    
            @Result(property = "accounts",
            column = "id",
            many = @Many(select = "com.yy.dao.IAccountDao.getByUid",fetchType = FetchType.LAZY)) 配置一对多关系使用延迟加载
            
    })
    List<User> findAll();

注解方式配置缓存

一级缓存无需配置,Mybatis自动处理

二级缓存配置两步:

  1. 在主配置文件中开启缓存
  <!--配置开启二级缓存-->
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>
  1. 在接口上增加CacheNamespace注解,将其blocking属性置为True
@CacheNamespace(blocking = true)
public interface IUserDao {
    List<User> findUserByName(String username);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值