對單表進(jìn)行增刪改查是項(xiàng)目中不可避免的需求钥平,Mybatis的通用Mapper插件使這些操作變得簡單
添加maven依賴
在對應(yīng)工程的pom.xml文件中添加
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.1.2</version>
</dependency>
配置攔截器
在mybatis-config.xml文件中添加通用Mapper
<plugin interceptor="tk.mybatis.mapper.mapperhelper.MapperInterceptor">
<!--================================================-->
<!--可配置參數(shù)說明(一般無需修改)-->
<!--================================================-->
<!--UUID生成策略-->
<!--配置UUID生成策略需要使用OGNL表達(dá)式-->
<!--默認(rèn)值32位長度:@java.util.UUID@randomUUID().toString().replace("-", "")-->
<!--<property name="UUID" value="@java.util.UUID@randomUUID().toString()"/>-->
<!--主鍵自增回寫方法,默認(rèn)值MYSQL,詳細(xì)說明請看文檔-->
<property name="IDENTITY" value="HSQLDB"/>
<!--序列的獲取規(guī)則,使用{num}格式化參數(shù)点待,默認(rèn)值為{0}.nextval侍瑟,針對Oracle-->
<!--可選參數(shù)一共3個(gè),對應(yīng)0,1,2,分別為SequenceName绞旅,ColumnName,PropertyName-->
<property name="seqFormat" value="{0}.nextval"/>
<!--主鍵自增回寫方法執(zhí)行順序,默認(rèn)AFTER,可選值為(BEFORE|AFTER)-->
<!--<property name="ORDER" value="AFTER"/>-->
<!--通用Mapper接口疼燥,多個(gè)通用接口用逗號(hào)隔開-->
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
</plugin>
繼承通用Mapper<T>良姆,必須指定泛型<T>
public interface ClubMapper extends Mapper<TClub>
{
}
繼承了Mapper<T>之后,就擁有了Mapper中的各種通用方法遭居,具體可以查看源碼
泛型(表對象實(shí)體類)<T>要求
實(shí)體類需要按照如下規(guī)則和數(shù)據(jù)庫表進(jìn)行轉(zhuǎn)換蛾扇,注解全部是JPA中的注解,所以我們在maven中添加了它的jar包依賴
- 表名默認(rèn)使用類名魏滚,駝峰轉(zhuǎn)下劃線镀首,如UserInfo默認(rèn)對應(yīng)的表名為user_info
- 表名可以使用@Table(name = "tableName")進(jìn)行指定,對不符合第一條默認(rèn)規(guī)則的可以通過這種方式指定表名
- 字段默認(rèn)和@Column一樣鼠次,都會(huì)作為表字段更哄,表字段默認(rèn)為Java對象的Field名字駝峰轉(zhuǎn)下劃線形式
- 可以使用@Column(name = "fieldName")指定不符合第3條規(guī)則的字段名
- 使用@Transient注解可以忽略字段,添加該注解的字段不會(huì)作為表字段使用
- 建議一定是有一個(gè)@Id注解作為主鍵的字段腥寇,可以有多個(gè)@Id注解的字段作為聯(lián)合主鍵
- 默認(rèn)情況下成翩,實(shí)體類中如果不存在包含@Id注解的字段,所有的字段都會(huì)作為主鍵字段進(jìn)行使用(這種效率極低)
- 實(shí)體類可以繼承使用
- 由于基本類型赦役,如int作為實(shí)體類字段時(shí)會(huì)有默認(rèn)值0麻敌,而且無法消除,所以實(shí)體類中建議不要使用基本類型
Mapper還提供了主鍵自增的方式
@Id
@GeneratedValue(generator = "JDBC")
@Column(name = "id")
private Integer id;
添加Mapper配置
將繼承的Mapper接口添加到mybatis-config.xml文件中
<mappers>
<mapper class="com.ind4.iss.icp.dao.logic.map.mapper.club.clubMapper" />
</mappers>
具體使用
public List<TClub> queryList() throws CcpException
{
SqlSession sqlSession = CcpDB.getInstance().getSession();
try
{
ClubMapper mapper = getMapper(sqlSession);
TClub tClub = new TClub();
return mapper.select(tClub);
}
catch (Exception e)
{
CcpLogger.getInstance().error(e, "TClubDAO.queryList, status=" + status);
throw new CcpException(CcpErrorCode.ERROR_CLUB_DAO_DB_ERROR, e);
}
finally
{
CcpDB.getInstance().closeSession();
}
}
private ClubMapper getMapper(SqlSession sqlSession)
{
return sqlSession.getMapper(ClubMapper.class);
}