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自动处理
二级缓存配置两步:
- 在主配置文件中开启缓存
<!--配置开启二级缓存-->
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
- 在接口上增加CacheNamespace注解,将其blocking属性置为True
@CacheNamespace(blocking = true)
public interface IUserDao {
List<User> findUserByName(String username);
}