通用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
通用mapper认识和用法的更多相关文章
- 详解Mybatis通用Mapper介绍与使用
		使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL.而且,当数据库表结构改动时,对应的所有SQL以及 ... 
- 通用mapper的增删改查方法   留存  备忘
		Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQ ... 
- Mybatis通用Mapper介绍和使用
		Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL. ... 
- Mybatis通用Mapper介绍与使用
		前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL.而且,当数据库表结构改动时,对应的所有SQ ... 
- 在Spring4中使用通用Mapper
		在Spring4中使用通用Mapper http://my.oschina.net/flags/blog/355281#OSC_h2_2 目录[-] 在Spring4中使用通用Mapper 一.在Sp ... 
- Spring4中使用通用Mapper
		1. 在Spring4中使用通用Mapper Spring4增加了对泛型注入的支持,这个特性对通用Mapper来说,非常的有用,可以说有了这个特性,可以直接在Service中写Mapper<U ... 
- 初识 tk.mybatis.mapper 通用mapper
		在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ... 
- MyBatis 为什么需要通用 Mapper ?
		一.通用 Mapper 的用途 ? 我个人最早用 MyBatis 时,先是完全手写,然后用上了 MyBatis 代码生成器(简称为 MBG),在使用 MBG 过程中,发现一个很麻烦的问题,如果数据库字 ... 
- SpringBoot第六篇:整合通用Mapper
		作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/10876339.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言 在以往的项 ... 
随机推荐
- 用 opencv和numpy进行图片和字符串互转,并保存至 json
			用 opencv和numpy进行图片和字符串互转,并保存至 json 转至 https://zhuanlan.zhihu.com/p/27349847 受 用 base64 进行图片和字符串互转,并保 ... 
- 补习系列(20)-大话 WebSocket 与 "尬聊"的实现
			目录 一.聊聊 WebSocket 二.Stomp 是个什么鬼 三.SpringBoot 整合 WebSocket A. 引入依赖 B. WebSocket 配置 C. 控制器 D. 前端实现 四.参 ... 
- 【工具篇】Selenium 学习实践(一)环境搭建
			一.环境搭建 (1)初学者最佳环境: Python 2.7 + Selenium 2+ Firefox 46 (2)喜欢尝新的环境: Python 3.6 + Selenium 3+ Firefox ... 
- Eclipse Debug调试遇到的问题
			在使用Debug模式前,一定要先打好断点.快捷调试方法: 在使用过程中,可以只保留Console,Variables,Debug窗口,把其他无用的窗口最小化掉,或者删掉即可.如果要恢复删掉的试图, ... 
- 从壹开始前后端分离【 .NETCore2.1 +Vue 2 +AOP+DI】框架之一 || 前言
			缘起 作为一个.Net攻城狮已经4年有余了,一直不温不火,正好近来项目不是很忙,闲得无聊,搞一搞新技术,一方面是打发无聊的时间,一方面也是督促自己该学习辣!身边的大神都转行的转行,加薪的加薪,本人比较 ... 
- 【JVM虚拟机】(7)---深入理解Class中-属性集合
			#[JVM虚拟机](7)---深入理解Class中-属性集合 之前有关class文件已经写了两篇博客: 1.[JVM虚拟机](5)---深入理解JVM-Class中常量池 2.[JVM虚拟机](6)- ... 
- .net core 在网络高并发下提高JSON的处理效率
			现有的webapi一般都基于JSON的格式来处理数据,由于JSON是一个文本类的序列化协议所以在性能上自然就相对低效一些.在.net中常用Newtonsoft.Json是最常用的组件,由于提供简便基于 ... 
- DateTime Tips
			DateTime Tips(System.Runtime Version=4.2.1.0) 抛砖引玉,如有错误或是更好的方式还望不吝赐教 1. 根据某个DateTime对象取其当天的起始时间例如:输入 ... 
- Spring Boot入门(二):使用Profile实现多环境配置管理&如何获取配置文件值
			在上一篇博客Spring Boot入门(一):使用IDEA创建Spring Boot项目并使用yaml配置文件中,我们新建了一个最原始的Spring Boot项目,并使用了更为流行的yaml配置文件. ... 
- 一起学Android之Menu
			概述 菜单(Menu)在Android开发中,是一种常见的用户界面组件,通过使用菜单Api可以给用户提供常见的一致的体验.本文主要讲解三种菜单的相关内容. 菜单的分类 选项菜单(OptionsMenu ... 
