springboot_data_access_demo基於rapid,根據自定義模版生成的基於mybatis+mysql的數據庫訪問示例項目。簡單配置數據庫信息,配置不同的生成策略生成可以直接運行訪問數據庫的項目,吸取了mybatis generator的動態條件優勢,同時又稍有擴展。可以生成簡單易懂的sql,支持大部分單表操作,一般情況下不需要自己動手寫sql。模板可以根據自己需求做相應的修改(github地址)。
1、自動生成支持的方法有:
public interface BaseDaoMapper<T, E> { /** * 根據 key 查詢 * @param key 查詢的id * @return */ T getByPrimaryKey(E key); /** * 根據 keyList 查詢 * @param keyList 查詢id的集合 * @return */ List<T> getByPrimaryKeyList(@Param("keyList") List<E> keyList); /** * 根據條件查詢 * @param example 查詢條件 * @return */ T getSingleByPredicate(BaseExample example); /** * 根據條件查詢所有 * @param example 查詢條件 * @return */ List<T> getAllByPredicate(BaseExample example); /** * 根據條件查詢 * @param example 查詢條件 * @return */ int queryCount(BaseExample example); /** * 分頁查詢(配合pageHelper) * @param example 查詢條件 * @return */ List<T> getListByPage(BaseExample example); /** * 根據key更新除了key以外的其他字段 * @param record * @return */ int updateByPrimaryKey(@Param("record") T record); /** * 按條件更新 * @param record 需要更新的字段 * @param example 需要滿足的條件 * @return */ int updateByPredicate(@Param("record") T record, @Param("example")BaseExample example); /** * 新增記錄 * @param entity 需要新增的entity * @return */ int insert(T entity); /** * 批量新增 * @param list 批量新增的entity * @return */ int batchInsert(@Param("list") List<T> list); }
生成的mapper.xml示例
2、自己擴展
public interface UserinfoMapper extends BaseDaoMapper<UserinfoEntity, java.lang.Integer> { }
在對應的Mapper里可以自己擴展,然后只需要在對應的 UserinfoExtendMapper.xml 里寫自定義的sql 即可。
3、生成結構
生成的項目結構:(com-xxx-demo 可以通過生成器自己配置)
- mr-xxx-demo-common
- mr-xxx-demo-dao
- mr-xxx-demo-model
- mr-xxx-demo-server
- mr-xxx-demo-service
目前僅支持單個數據庫的配置,后續考慮同時支持多個。此項目是以名為Test的數據庫生成的示例
xxxExample支持指定查詢列、查詢條件、排序字段生成動態sql
示例:
public void test() { UserinfoEntity entity1 = new UserinfoEntity(); entity1.setSex(1); entity1.setUsername("zhangsan"); UserinfoEntity entity2 = new UserinfoEntity(); entity2.setSex(2); entity2.setUsername("lisi"); BaseExample example = UserinfoExample.builder() //指定查詢列為 id,username .includeSelectFieldClause(UserinfoExample.builderSelectFieldCriteria().id().username()) //指定查詢條件為 id in (5,6) .addCriteria(UserinfoExample.builderCriteria().andIdIn(Lists.newArrayList(5, 6))) //指定 order by id asc .orderByClause(UserinfoExample.buildOrderByCriteria().orderByIdAsc()) .build(); BaseExample updateExample = UserinfoExample.builder() .addCriteria(UserinfoExample.builderCriteria().andIdIn(Lists.newArrayList(5, 6))) .build(); userinfoMapper.updateByPredicate(entity1, updateExample); userinfoMapper.getSingleByPredicate(example); userinfoMapper.getByPrimaryKey(1); userinfoMapper.getByPrimaryKeyList(Lists.newArrayList(1, 2, 3)); userinfoMapper.batchInsert(Lists.newArrayList(entity1, entity2)); userinfoMapper.getAllByPredicate(example); userinfoMapper.getListByPage(example); userinfoMapper.queryCount(example); entity1.setId(5); entity1.setUsername("lisi - 22222"); userinfoMapper.updateByPrimaryKey(entity1); userinfoMapper.insert(entity2); }
