mybatis通用mapper的使用


       項目中持久層封裝了兩套,一個hibernate,一個是mybatis。hibernate中封裝了一些通用的方法,但是mybatis中沒有,基於這個需求開始使用mybatis的通用mapper。

       通用mapper有什么好處呢?以往我們使用mapper文件都是自己寫sql語句,針對的是單個實體,也就是每個實體都有其對應的mapper文件。使用通用mapper給我們帶來了極大的方便,它不需要mapper.xml文件,只需我們調用相應的接口,引入jar包再進行簡單的配置就好了。下面是使用中的一些總結。
首先我們要創建自己的接口來繼承Mapper<T>,其中的T必須實現,也就是必須指定類型:
import com.github.abel533.mapper.Mapper;
@Repository("courseDao")
public interface CourseDao extends Mapper<Course>{}
這樣我們就擁有了Mapper中的通用方法
如果是maven項目,在pom文件中添加如下依賴即可:
 
<!-- 通用Mapper -->
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<version>2.3.4</version>
</dependency>
接下來就是修改mybatis配置文件,我們的配置文件都是通過spring來管理的,在網上查到一些資料,如果使用spring管理,直接在配置文件中按照如下配置即可:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations">
<array>
<value>classpath:mapper/*.xml</value>
</array>
</property>
<property name="typeAliasesPackage" value="com.dmsd.itoo.video.entity"/>
<property name="plugins">
<array>
<-- 主要看這里 -->
<bean class="com.isea533.mybatis.mapperhelper.MapperInterceptor"/>
</array>
</property>
</bean>
注意typeAliasesPackage的value對應的是你自己的實體的類名。
按照上述配置mybatis配置文件總是報如下錯誤:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (com.github.abel533.mapper.MapperProvider.dynamicSQL). Cause: java.lang.InstantiationException: com.github.abel533.mapper.MapperProvider
查詢無果,換另一種方式,將mybatis的配置文件單獨抽出,在spring中進行引用,如下
spring-mybatis配置文件:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:mapper/*.xml" />
<property name="typeAliasesPackage" value="com.dmsd.itoo.video.entity" />
<!-- mybatis全局配置文件 -->
<property name="configLocation" value="classpath:spring/mybatis-config.xml" />
</bean>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<plugins>
<!-- 通用Maper -->
<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">
<!-- 主鍵自增回寫方法,默認值MYSQL,詳細說明請看文檔 -->
<property name="IDENTITY" value="MYSQL" />
<!-- 通用Mapper接口,多個通用接口用逗號隔開 -->
<property name="mappers" value="com.github.abel533.mapper.Mapper" />
</plugin>
</plugins>
 
</configuration>
運行,ok
 

注意

泛型(實體類)<T>的類型必須符合要求
實體類按照如下規則和數據庫表進行轉換,注解全部是JPA中的注解:
  1. 表名默認使用類名,駝峰轉下划線,如UserInfo默認對應的表名為user_info.
  2. 表名可以使用@Table(name = "tableName")進行指定,對不符合第一條默認規則的可以通過這種方式指定表名.
  3. 字段默認和@Column一樣,都會作為表字段,表字段默認為Java對象的Field名字駝峰轉下划線形式.
  4. 可以使用@Column(name = "fieldName")指定不符合第3條規則的字段名
  5. 使用@Transient注解可以忽略字段,添加該注解的字段不會作為表字段使用.
  6. 建議一定是有一個@Id注解作為主鍵的字段,可以有多個@Id注解的字段作為聯合主鍵.
  7. 默認情況下,實體類中如果不存在包含@Id注解的字段,所有的字段都會作為主鍵字段進行使用(這種效率極低).
  8. 實體類可以繼承使用,可以參考測試代碼中的com.github.abel533.model.UserLogin2類.
  9. 由於基本類型,如int作為實體類字段時會有默認值0,而且無法消除,所以實體類中建議不要使用基本類型.
除了上面提到的這些,Mapper還提供了序列(支持Oracle)、UUID(任意數據庫,字段長度32)、主鍵自增(類似Mysql,Hsqldb)三種方式,其中序列和UUID可以配置多個,主鍵自增只能配置一個。
 
 
補充:
后來找到了通過spring管理mybatis的方法,不需要單獨抽出mybatis的配置文件,修改spring-mybatis.xml如下:
[html]  view plain  copy
 
 在CODE上查看代碼片派生到我的代碼片
  1. <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
  2.         <property name="dataSource" ref="dataSource" />  
  3.         <property name="mapperLocations" value="classpath:mapper/*.xml" />  
  4.         <property name="typeAliasesPackage" value="com.dmsd.itoo.video.entity" />  
  5.         <property name="plugins">  
  6.             <array>  
  7.                 <bean class="com.github.abel533.mapperhelper.MapperInterceptor">  
  8.                     <property name="properties">  
  9.                         <value>  
  10.                             mappers=com.github.abel533.mapper.Mapper  
  11.                             IDENTITY=MYSQL  
  12.                             notEmpty=true  
  13.                         </value>  
  14.                     </property>  
  15.                 </bean>  
  16.             </array>  
  17.         </property>  
  18.         <!-- mybatis全局配置文件 -->  
  19.         <!-- <property name="configLocation" value="classpath:spring/mybatis-config.xml"></property> -->  
  20.     </bean>  

 

http://blog.csdn.net/xfz0330/article/details/52275192

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM