mybatis常用注解: @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与@Result 一起使用,封装多个结果集 @ResultMap:实现引用@Results 定义的封装 @One:实现一对一结果集封装 @Many:实现一对多结果集封装 @SelectProvider: 实现动态 SQL 映射 @CacheNamespace:实现注解二级缓存的使 |
一、简单crud操作
package cn.itcast.dao; import cn.itcast.domain.User; import org.apache.ibatis.annotations.*; import java.util.List; public interface UserDao { /** * 查询所有用户 * @return */ @Select("select * from user") //@Results相当于配置文件中的<resultMap> //id = true为主键,不可少 //property是pojo属性名,column查询出的列名称 @Results(id = "userMap", value = { @Result(id = true, property = "id", column = "id"), @Result(property = "username",column = "username"), @Result(property = "address",column = "address"), @Result(property = "sex",column = "sex"), @Result(property = "birthday",column = "birthday") }) public List<User> findAll(); /** * 根据id查询用户 * @param id * @return */ @Select("select * from user where id = #{id}") @ResultMap("userMap") public User findById(Integer id); /** * 保存用户 * @param user */ @Insert("INSERT INTO USER (username,birthday,sex,address) " + "VALUES(#{username},#{birthday},#{sex},#{address})") //如果需要新增成功之后返回主键id,则需要 @SelectKey, //如果不需要返回主键id则可以不写 @SelectKey /** * keyProperty---->pojo属性名 * keyColumn------>查询出的字段名(不一定是表中的字段名) * resultType----->返回值类型 * before--------->(false)新增之前插入id,(true)新增之后 * statement------>需要执行的查询id语句 */ @SelectKey(keyProperty = "id",keyColumn = "id",resultType = Integer.class,before = false, statement = {"select last_insert_id()"}) public void saveUser(User user); /** * 修改用户 * @param user */ @Update("UPDATE USER SET username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id} ") public void updateUser(User user); /** * 删除用户 * @param userId * @return */ @Delete("delete from user where id = #{uid} ") public void deleteUser(Integer userId); /** * 查询使用聚合函数 * @return */ @Select("select count(*) from user ") int findTotal(); /** * 模糊查询 * @param name * @return */ @Select("select * from user where username like #{username} ") List<User> findByName(String name); } |
二、使用注解实现复杂关系映射开发
实现复杂关系映射之前我们可以在映射文件中通过配置<resultMap>来实现,在使用注解开发时我们需要借
助@Results 注解,@Result 注解,@One 注解,@Many 注解。
package cn.itcast.dao; import cn.itcast.domain.Account; import cn.itcast.domain.User; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import java.util.List; public interface AccountDao { /** * 一对一 * 查询所有账户 */ @Select("select * from account") @Results(id = "accountMap", value = { @Result(id = true, property = "id", column = "id"), @Result(property = "uid", column = "uid"), @Result(property = "money", column = "money"), //property ---->pojo属性 //column ---->用户id //javaType ---->用户.class //one ---->根据用户id查询用户 @Result(property = "user", column = "uid", javaType = User.class, one = @One(select = "cn.itcast.dao.UserDao.findById")) }) public List<Account> findAll(); /** * 根据用户id查询账户 */ @Select("select * from account where uid = #{uid}") public List<Account> findByUserId(Integer userId); } |
package cn.itcast.dao; import cn.itcast.domain.User; import org.apache.ibatis.annotations.*; import java.util.List; public interface UserDao { /** * 一对多 * 查询用户信息时,也要查询他的账户列表 * * @return */ @Select("select * from user") @Results(id = "userMap", value = { @Result(id = true, column = "id", property = "userId"), @Result(column = "username", property = "userName"), @Result(column = "sex", property = "userSex"), @Result(column = "address", property = "userAddress"), @Result(column = "birthday", property = "userBirthday"), //property ----->pojo属性 //column ----->用户id //javaType ----->返回list //many ---------->根据用户id查询对应的账户 @Result(column = "id", property = "accounts",javaType = List.class,many = @Many(select = "cn.itcast.dao.AccountDao.findByUserId")) }) public List<User> findAll(); /** * 根据 id 查询一个用户 * * @param userId * @return */ @Select("select * from user where id = #{uid}") @ResultMap("userMap") User findById(Integer userId); } |