MyBatis整理(註解方式)

註解方式和xml配置方式不同處

不需要配置映射文件
在dao接口中完成註解

核心配置文件

<mappers>
        <mapper class="home.sise.cn.dao.IUserDao"></mapper>
    </mappers>

小注意,如果同時存在規範路徑下的映射文件和註解,解析的會混亂

常用增刪改操作

select註解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Select {
  String[] value();
}

在jvm運行時執行,限定作用於方法。

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} ")
    @Select("select * from user where username like '%${value}%' ")
    List<User> findUserByName(String username);

    /**
     * 查詢總用戶數量
     * @return
     */
    @Select("select count(*) from user ")
    int findTotalUser();
}

mybatis註解建立實體類屬性和數據庫表中列的對應關係

Results註解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Results {
  /**
   * The name of the result map.
   */
  String id() default "";
  Result[] value() default {};
}

result註解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface Result {
  boolean id() default false;

  String column() default "";

  String property() default "";

  Class<?> javaType() default void.class;

  JdbcType jdbcType() default JdbcType.UNDEFINED;

  Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;

  One one() default @One;

  Many many() default @Many;
}

One註解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface One {
  String select() default "";

  FetchType fetchType() default FetchType.DEFAULT;

}

Many註解

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({})
public @interface Many {
  String select() default "";

  FetchType fetchType() default FetchType.DEFAULT;

}

FetchType註解(表示加載策略)

public enum FetchType {
  LAZY, EAGER, DEFAULT
}

一個賬戶所屬一個用戶: 一對一

public interface IAccountDao {

    /**
     * 查詢所有賬戶,並且獲取每個賬戶所屬的用戶信息
     * @return
     */
    @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="home.sise.cn.dao.IUserDao.findById",fetchType= FetchType.EAGER))
    })
    List<Account> findAll();

    /**
     * 根據用戶id查詢賬戶信息
     * @param userId
     * @return
     */
    @Select("select * from account where uid = #{userId}")
    List<Account> findAccountByUid(Integer userId);
}

一個用戶有多個賬戶 : 一對多

@CacheNamespace(blocking = true)
public interface IUserDao {

    /**
     * 查詢所有用戶
     * @return
     */
    @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 = "home.sise.cn.dao.IAccountDao.findAccountByUid",
                                fetchType = FetchType.LAZY))
    })
    List<User> findAll();

    /**
     * 根據id查詢用戶
     * @param userId
     * @return
     */
    @Select("select * from user  where id=#{id} ")
    @ResultMap("userMap")
    User findById(Integer userId);}

開啓二級緩存
1.在主配置文件中配置:

<settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

2.在dao接口上配置註解 :

@CacheNamespace(blocking = true)
public interface IUserDao {...}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章