1. 程式人生 > >Mybatis使用註解的方式CRUD包括批量插入更新

Mybatis使用註解的方式CRUD包括批量插入更新

定義一個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();
    }

以上。。。