zoukankan      html  css  js  c++  java
  • 通用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
    
  • 相关阅读:
    mvc 4 ActionFilterAttribute 特性,进行权限验证
    asp.net 将word文档进行编辑并导出一个新的word
    怎样才能最快速的找到破解软件?
    C#动态执行字符串(动态创建代码)
    使用Memcached提高.NET应用程序的性能
    ASP.NET 创建网站地图
    TFS2010安装办法及序列号
    在将 varchar 值 '1,2,3,4,5,6,7,8' 转换成数据类型 int 时失败。
    Js获取当前日期时间及其它操作
    截取Excel字符串的部分字符
  • 原文地址:https://www.cnblogs.com/ranandrun/p/mapper.html
Copyright © 2011-2022 走看看