通用mapper認識和用法



0. 認識

(1)什么是通用mapper?
通用mapper 可以極大的方便開發人員進行ORM,提供極其方便的單表增刪改查。
什么是通用mapper,一句話簡單說,它就是個輔助mybatis極簡單表開發的組件。它不是為了替代mybatis,而是讓mybatis的開發更方便。
可以按照自己的需要選擇通用方法,還能很方便的開發自己的通用方法。

(2)為什么要用通用mapper?
原生Mybatis的痛點
1、mapper.xml文件里有大量的sql,當數據庫表字段變動,配置文件就要修改
2、需要自己實現sql分頁,select * from table where . . . limit 1,3
自己手寫分頁,除了傳參page、pageSize,還需要返回條目總數count。
3、數據庫可移植性差:如果項目更換數據庫,比如oracle-->mysql,mapper.xml中的sql要重新寫,因為Oracle的PLSQL 和mysql 支持的函數是不同的。
4、生成的代碼量過大。
5、批量操作,批量插入,批量更新,需要自寫。

1. 導包

<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper</artifactId>
    <version>3.1.2</version>
</dependency>

2. mybatis的config文件:mybatis-mapper-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>

		<!-- 分頁插件 -->
		<plugin interceptor="com.github.pagehelper.PageHelper">
			<property name="dialect" value="mysql"/>
			<property name="reasonable" value="true"/>
		</plugin>
		
		<plugin interceptor="tk.mybatis.mapper.mapperhelper.MapperInterceptor">
			<!--================================================-->
			<!--可配置參數說明(一般無需修改)-->
			<!--================================================-->

			<!--UUID生成策略-->
			<!--配置UUID生成策略需要使用OGNL表達式-->
			<!--默認值32位長度:@java.util.UUID@randomUUID().toString().replace("-", "")-->
			<!--<property name="UUID" value="@java.util.UUID@randomUUID().toString()"/>-->

			<!--主鍵自增回寫方法,默認值MYSQL,詳細說明請看文檔-->
			<property name="IDENTITY" value="MYSQL"/>

			<!--序列的獲取規則,使用{num}格式化參數,默認值為{0}.nextval,針對Oracle-->
			<!--可選參數一共3個,對應0,1,2,分別為SequenceName,ColumnName,PropertyName-->
			<property name="seqFormat" value="{0}.nextval"/>

			<!--主鍵自增回寫方法執行順序,默認AFTER,可選值為(BEFORE|AFTER)-->
			<!--<property name="ORDER" value="AFTER"/>-->

			<!--通用Mapper接口,多個通用接口用逗號隔開-->
			<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
		</plugin>

	</plugins>

</configuration>

3. spring與mybatis整合配置文件:mybatis.xml

<!-- spring與mybatis整合配置,掃描所有dao -->
<beans:bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <beans:property name="sqlSessionFactory" ref="mybatis.sqlSessionFactory"/>
        <beans:property name="basePackage" value="自己的dao包"/>
 </beans:bean>


  <!-- mybatis文件配置,掃描所有mapper文件 -->
    <beans:bean id="mybatis.sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <beans:property name="dataSource" ref="shardingDataSource"/>
        <beans:property name="configLocation" value="classpath:mybatis-mapper-config.xml"/>
        <beans:property name="mapperLocations">
            <beans:list>
                <beans:value>classpath:mapper/**/*.xml</beans:value>
            </beans:list>
        </beans:property>
        <beans:property name="failFast" value="true"/>
    </beans:bean>


    <!-- 對數據源進行事務管理 -->
    <beans:bean name="transactionManager"  class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <beans:property name="dataSource" ref="dataSource"/>
    </beans:bean>

    <tx:annotation-driven transaction-manager="transactionManager" order="5" proxy-target-class="true"/>

4. 使用通用Mapper


import tk.mybatis.mapper.common.Mapper;

/**
 * 訂單dao
 * <p>@Author hua</p>
 * <p>@Date 2018/11/21</p>
 * <p>@Version</p>
 */
public interface OrderDao extends Mapper<OrderModel> {

}

注意:這里不止可以繼承Mapper,還可以繼承其他接口,如下:

其實個人覺得用的最多的還是Mapper接口
BaseMapper:純增刪查改接口
ConditionMapper : 選擇性地按非空條件查詢或者刪除或者更新
ExampleMapper : 非選擇性按所有條件查詢或者刪除或者更新
RowBoundsMapper : 配合分頁插件PageHelper可以實現物理分頁
.....其他自己看....

5. 調用dao的方法

orderDao.
        selectOne(OrderModel record) OrderModel
        select(OrderModel. record) List<OrderModet>
        updateByPrimaryKeySetective(OrderModeL record) int
        updateByPrimaryKey(OrderModel. record) int
        delete(OrderModel record) int 
        deleteByExample(Object example) int
        deLeteByPrimaryKey(Object key) int 
        insert(OrderModel record) int 
        insertSelective(OrderModel record) int
        selectByExample(Object example) List<OrderModel>
        selectByExampleAndRowBounds(Object example, RowBounds rowB... List<OrderModel>
        selectByPrimaryKey(Object key) OrderModel
        selectByRowBounds(OrderModel record, RowBounds rowBounds) List<OrderModel>  
        selectCount(OrderModel record) int
        selectCountByExample(Object example) int
        updateByExample(OrderModel record, Object example) int
        updateByExampleSelective(OrderModel record, Object example) int


免責聲明!

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



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