Mybatis使用註解的方式CRUD包括批量插入更新
阿新 • • 發佈:2019-02-20
定義一個Mapper介面:
@Mapper
@Repository
public interface ConfigMapper {
}
查詢註解@Select
:
@Select("select * from config where id=#{id}")
Config findById(Long id);
刪除註解@Delete
:
@Delete("delete from config where id=#{id}")
@Options(useGeneratedKeys = true)
Long deleteById(Long id);
其中@Options
註解常用屬性:
- flushCache:重新整理快取策略,有DEFAULT
TRUE
,FALSE
三種值,預設DEFAULT
表示重新整理查詢語句的快取 - useCache:預設true,表示使用快取
- fetchSize:查詢時的獲取數量
- useGeneratedKeys:預設false,是否返回插入的id
- keyProperty:實體類id屬性
- keyColumn:實體類屬性對應資料庫的欄位
插入註解@Insert
:
@Insert("insert into config(cron) values(#{cron})")
@Options(useGeneratedKeys = true)
Long save(Config config);
批量插入@InsertProvider
@InsertProvider(type = ConfigDaoProvider.class, method = "saveAll")
void saveAll(@Param("list") Collection<Config> configs);
ConfigDaoProvider.java:
public String saveAll(Map map) {
List<Config> configs = (List<Config>) map.get("list");
StringBuilder sb = new StringBuilder();
sb.append("insert into config");
sb.append("(cron)");
sb.append("values");
MessageFormat mf = new MessageFormat("#'{'list[{0}].cron'}'");
for (int i = 0; i < configs.size(); i++) {
sb.append("(");
sb.append(mf.format(new Object[]{i}));
sb.append(")");
if (i < configs.size() - 1) {
sb.append(",");
}
}
return sb.toString();
}
更新註解@Update
:
@Update("update config set cron=#{cron} where id=#{id}")
void update(Config config);
批量更新@UpdateProvider
:
@UpdateProvider(type = ConfigDaoProvider.class, method = "updateAll")
void updateAll(@Param("list") Collection<Config> configs);
updateAll方法:
public String updateAll(Map map) {
List<Config> configs = (List<Config>) map.get("list");
StringBuilder sb = new StringBuilder();
sb.append("update config ");
sb.append("set cron=case id ");
MessageFormat mfCron = new MessageFormat("#'{'list[{0}].cron'}'");
for (int i = 0; i < configs.size(); i++) {
sb.append("when ");
sb.append(configs.get(i).getId());
sb.append("then ");
sb.append(mfCron.format(new Object[]{i}));
}
sb.append("end ");
sb.append("where id in");
sb.append("(");
for (int i = 0; i < configs.size(); i++) {
sb.append(configs.get(i).getId());
if (i < configs.size() - 1) {
sb.append(",");
}
}
sb.append(")");
return sb.toString();
}
以上。。。