通用Mapper基于Mybatis的插件。開發人員不需要編寫SQL,隻要寫好實體類,就能支援相應的單表增删改查,根據ids批量查詢、新增、删除方法。
直接上代碼
Maven依賴:
<!-- 通用Mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.3.9</version>
</dependency>
SpringMVC配置:
<!-- mybatis 通用 mapper 整合-->
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
<property name="markerInterface" value="com.example.dao.BaseDao"/>
<!-- 通用Mapper通過屬性注入進行配置,預設不配置時會注冊Mapper<T>接口 -->
<property name="properties">
<value>
<!--配置參數-->
ORDER=BEFORE
</value>
</property>
</bean>
可配屬性參數介紹:
UUID:設定生成UUID的方法,需要用OGNL方式配置,不限制傳回值,但是必須和字段類型比對
IDENTITY:取回主鍵的方式
ORDER:seletKey中的order屬性,可選值為BEFORE和AFTER
catalog:資料庫的catalog,如果設定該值,查詢的時候表名會帶catalog設定的字首
schema:同catalog,catalog優先級高于schema
seqFormat:序列的擷取規則,使用{num}格式化參數,預設值為 {0}.nextval,針對Oracle,可選參數一共4個,對應0,1,2,3分别為 SequenceName,ColumnName, PropertyName,TableName
notEmpty:insert和update中,是否判斷字元串類型!=’’,少數方法會用到
style:實體和表轉換時的規則,預設駝峰轉下劃線,可選值為normal用實體名和字段名;camelhump是預設值,駝峰轉下劃線;uppercase轉換為大寫;lowercase轉換為小寫
建立DAO層:
package com.example.dao;
import com.example.entity.DemoUser;
public interface DemoUserMapper extends BaseDao<DemoUser> {
}
每個dao都必須繼承BaseDao
建立一個公共的接口繼承Mapper:
package com.example.dao;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.ids.DeleteByIdsMapper;
import tk.mybatis.mapper.common.ids.SelectByIdsMapper;
import tk.mybatis.mapper.common.special.InsertListMapper;
public interface BaseDao<T> extends Mapper<T>, InsertListMapper<T>, SelectByIdsMapper<T>, DeleteByIdsMapper<T> {
}
Mapper接口:通用mapper,繼承了BaseMapper, ExampleMapper, RowBoundsMapper三個組合接口。
InsertListMapper接口:批量插入,支援批量插入的資料庫可以使用,另外該接口限制實體包含id屬性并且必須為自增列。
SelectByIdsMapper接口:通過操作ids字元串進行查詢,ids 如 “1,2,3” 這種形式的字元串。
DeleteByIdsMapper接口:根據主鍵字段進行删除,方法參數必須包含完整的主鍵屬性,通過操作ids字元串進行操作,ids 如 “1,2,3” 這種形式的字元串
繼承的Mapper就擁有了Mapper所有的通用方法:
/**
* 根據主鍵查詢
*
*/
T selectByPrimaryKey(Object var1);
/**
* 根據實體中字段值進行查詢
*/
List<T> select(T var1);
/**
* 通過id批量查詢
* <p>
* 通過操作ids字元串進行操作,ids 如 "1,2,3" 這種形式的字元串,
* <p>
* 這個方法要求實體類中有且隻有一個帶有@Id注解的字段,否則會抛出異常。
*/
List<T> selectByIds(String var1);
/**
* 根據Example條件進行查詢
*
* @param example 任意類型參數
*/
List<T> selectByExample(Object var1);
/**
* 儲存一個實體,null的屬性也會儲存,不會使用資料庫預設值
*/
int insert(T var1);
/**
* 儲存一個實體,null的屬性不會儲存,會使用資料庫預設值
*/
int insertSelective(T var1);
/**
* 批量插入,支援批量插入的資料庫可以使用,
* 例如MySQL,H2等,
* 另外該接口限制實體包含id屬性并且必須為自增列
*
*/
int insertList(List<T> var1);
/**
* 根據主鍵字段進行删除,方法參數必須包含完整的主鍵屬性
*/
int deleteByPrimaryKey(Object var1);
/**
* 根據主鍵字段進行批量删除,方法參數必須包含完整的主鍵屬性
* 通過操作ids字元串進行操作,ids 如 "1,2,3" 這種形式的字元串
*/
@Override
int deleteByIds(String var1);
/**
* 根據實體屬性作為條件進行删除,查詢條件使用等号
*/
int delete(T var1);
/**
* 根據主鍵更新實體全部字段,null值會被更新
* (對象中必須有主鍵id)
*/
int updateByPrimaryKey(T var1);
/**
* 根據主鍵更新屬性不為null的值
* (對象中必須有主鍵id)
*/
int updateByPrimaryKeySelective(T var1);
這裡展示一部分方法,需要别的方法可以看api。
在service層中使用:
package com.example.service.impl;
import com.example.dao.DemoUserMapper;
import com.example.entity.DemoUser;
import com.example.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
public class DemoServiceImpl implements DemoService {
@Autowired
DemoUserMapper demoUserMapper;
public void save(DemoUser user){
demoUserMapper.insert(user);
}
}
最後這是項目結構:
