註解方式和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 {...}