一.導依賴
<dependency>
<groupId>com.github.abel533</groupId>
<artifactId>mapper</artifactId>
<version>2.3.4</version>
</dependency>
二.配置攔截器
在mybatis-config.xml里面配置<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor"> <!--主鍵自增回寫方法,默認值MySQL,詳細說明請看文檔 --> <PRoperty name="IDENTITY" value="MYSQL" /> <!--通用Mapper接口,多個通用接口用逗號隔開(這個是通用Mapper給我們提供的被繼承的接口,包括基本的crud操作) --> <property name="mappers" value="com.github.abel533.mapper.Mapper" /> </plugin>或者在sqlsessionFactory里注入<property name="plugins"> <array> <bean class="com.isea533.mybatis.mapperhelper.MapperInterceptor"/> </array> </property>三.對實體類進行注解,如@Table,@Id等
在繼承用用Mapper的接口的時候,需要指定Mapper的泛型,這個泛型就是指實體類.而這個實體類必須要符合以下規范:
1.通用Mapper會默認為表名=實體類名,駝峰的話會轉下劃線,如UserInfo類對應的表為user_info
2.如果上一條不滿足的話,則可以在實體類上面加注解@Table(name="tablename")
3.通用Mapper會默認將實體類的屬性轉為表的字段
4.如果上一條不滿足的話,加注解@Column(name="fieldname")
5.實體類的有些屬性 沒有對應表的字段的話,則要在這個屬性上面加上注解@Transient,表示將這個屬性忽略
6.通用Mapper有幾個方法是需要主鍵的,如selectByPrimaryKey等,所以可以在主鍵對應的實體類屬性上加上注解@Id,聲明這個屬性是主鍵屬性,如果不加的話,所有的屬性都會作為主鍵進行使用,這樣會很大程度的影響效率
7.因為基本類型在對象初始化的時候會默認值,無法消除,所以實體類盡量使用包裝類
8.Mapper還提供了序列(支持Oracle)、UUID(任意數據庫,字段長度32)、主鍵自增(類似Mysql,Hsqldb)三種方式,其中序列和UUID可以配置多個,主鍵自增只能配置一個。
這三種方式不能同時使用,同時存在時按照 序列>UUID>主鍵自增的優先級進行選擇.
序列://可以用于數字類型,字符串類型(需數據庫支持自動轉型)的字段,@SequenceGenerator(name="Any",sequenceName="seq_userid"),該字段不會回寫id
UUID:@GeneratedValue(generator = "UUID")該字段不會回寫id
主鍵自增:不限于@Id注解的字段,但是一個實體類中只能有一個@GeneratedValue(strategy = GenerationType.IDENTITY),會回寫id
四.繼承Mapper接口
public interface UserMapper extends Mapper<User> {}
注:通用Mapper只支持對單表的操作,如果多表的話,可以自己在映射文件中另外寫sql.
題外話:學完通用Mapper后,想自己寫篇文章來鞏固的,就按著學習資料來寫,結果寫到一半,發現通用Mapper的締造者已經寫過一篇詳細的了,本想放棄的,但是想到大神的那篇博客太詳細了,初學者可能會看懵,我這篇更容易上手一些,就繼續寫下來了.
附上大神的博客:http://blog.csdn.net/isea533/article/details/41457529?locationNum=2&fps=1
新聞熱點
疑難解答