06 mybatis註解開發
mybatis常用註解: @Insert:實現新增 @Update:實現更新 @Delete:實現刪除 @Select:實現查詢 @Result:實現結果集封裝 @Results:可以與@Result 一起使用,封裝多個結果集 @ResultMap:實現引用@Results 定義的封裝 @One:實現一對一結果集封裝 @Many:實現一對多結果集封裝 @SelectProvider: 實現動態 SQL 對映 @CacheNamespace:實現註解二級快取的使 |
一、簡單crud操作
package 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 = @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); } |