文章目錄
mapper簡介
通用mapper是一個可以實現任意Mybatis通用方法的框架,項目提供了常規的增刪改查操作以及Example相關的表單操作。
官網
Mybatis的痛點
mapper.xml
文件裏有大量的sql,當數據庫表字段變動,配置文件就要修改- 需要自己實現sql分頁,如:select * from table where … limit 1, 10,自己寫分頁,除了傳參
page
、pageSize
,還需要返回條目總數count
- 數據庫可移植性差,如果項目更好數據庫,如Oracle->MySQL,
mapper.xml
中的sql要重寫,因爲Oracle的PLSql和MySQL支持的函數不同 - 生成的代碼量大,會生成非常多的mapper.xml文件
- 批量操作,如插入、更新,需要手寫
而這些可以通過通用mapper解決
使用通用Mapper
和Spring集成
- 引入依賴
Spring和Mybatis的依賴如下:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>Version</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>Version</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>Version</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>Version</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>Version</version>
</dependency>
在此基礎上,添加通用Mapper
的依賴
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>Version</version>
</dependency>
- 與Spring集成
只需要把原來配置文件中的org.mybatis.spring.mapper.MapperScannerConfigurer
換成tk.mybatis.spring.mapper.MapperScannerConfigurer
即可
即原來的配置是
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="掃描包名"/>
</bean>
現在的是
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="掃描包名"/>
</bean>
實體類映射
@Table(name="tb_user")
public class User implments Serializable{
@Id
private Integer id;
private String name;
//getter setter...
}
@Table
映射表,@Id
映射表的主鍵
創建mapper接口
public interface UserMapper extends Mapper<User>{}
Mapper
是tk.mybatis.mapper.common.Mapper
類,繼承了該類的接口指定了泛型類型後,自動擁有針對泛型類型的大量方法:
接口方法說明
基礎接口select
- List select(T record):根據T對象中的屬性名稱查詢,類似於
select * from table as t where t.name=#{name} and t.password=#{password}
- T selectOne(T record):根據實體中的屬性進行查詢,只能有一個返回值,有多個結果時拋出異常,查詢條件使用等號
- T selectByPrimaryKey(Object key):根據主鍵查詢,方法參數必須包含完整的主鍵屬性,查詢條件使用等號
- int selectCount(T record):根據實體中的屬性查詢總數,查詢條件使用等號
基礎接口insert
- int insert(T record):保持一個實體,null的屬性也會保存,不會使用數據庫默認值
- int insertSelective(T record):保持一個實體,null的屬性也會保存,使用數據庫默認值
基礎接口update
- int updateByPrimaryKey(T record):根據主鍵更新實體全部字段,null值會被更新,不使用數據庫默認值
- int updateByPrimaryKeySelective(T record):根據主鍵更新實體全部字段,null值會被更新,使用數據庫默認值
基礎接口delete
- int delete(T record):根據實體屬性爲條件進行刪除,查詢條件使用等號
- int deleteByPrimaryKey(Object key):根據主鍵進行刪除,方法參數必須包含完整的主鍵屬性