极其方便的使用Mybatis单表的增删改查

项目地址:http://git.oschina.net/free/Mapper

优点?

不客气的说,使用这个通用Mapper甚至能改变你对Mybatis单表基础操作不方便的想法,使用它你能简单的使用单表的增删改查,包含动态的增删改查.

程序使用拦截器实现具体的执行Sql,完全使用原生的Mybatis进行操作.

你还在因为数据库

表变动重新生成xml吗?还是要手动修改自动生成的insert|update|delete的xml呢?赶紧使用通用Mapper,表的变动只需要实体类保持一致,不用管基础的xml,你不止会拥有更多的时间陪老婆|孩子|女朋友|打DOTA,你也不用做哪些繁琐无聊的事情,感兴趣了吗?继续看如何使用吧!!相信这个通用的Mapper会让你更方便的使用Mybatis,这是一个强大的Mapper!!!

不管你信不信,这个项目的测试代码中没有一个Mapper的xml配置文件,但是却可以做到每个Mapper对应上百行xml才能完成的许多功能.没有了这些基础xml信息的干扰,你将会拥有清晰干净的Mapper.xml.

推荐使用Mybatis分页插件:PageHelper分页插件

如何使用?

下面是通用Mapper的配置方法,还会提到spring

中的配置方法.还有和PageHelper分页插件集成的配置方式.

1. 引入通用Mapper的代码

将本项目中的4个代码文件(EntityHelper,Mapper,MapperHelper,MapperInterceptor)复制到你自己的项目中.

项目依赖于JPA的注解,需要引入persistence-api-1.0.jar或者添加Maven依赖:

javax.persistence

persistence-api

1.0

2. 配置Mapper拦截器

在mybatis-config.xml中添加如下配置:

interceptor="com.github.abel533.mapper.MapperInterceptor">

可配置参数一般情况下不需要修改,直接像下面这样一行即可:

interceptor="com.github.abel533.mapper.MapperInterceptor">

附:Spring配置相关

如果你使用Spring的方式来配置该拦截器,你可以像下面这样:

id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

name="dataSource" ref="dataSource"/>

name="mapperLocations">

classpath:mapper/*.xml

name="typeAliasesPackage" value="com.isea533.mybatis.model"/>

name="plugins">

class="com.isea533.mybatis.mapperhelper.MapperInterceptor"/>

只需要像上面这样配置一个bean即可.

如果你同时使用了PageHelper分页插件

,可以像下面这样配置:

id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

name="dataSource" ref="dataSource"/>

name="mapperLocations">

classpath:mapper/*.xml

name="typeAliasesPackage" value="com.isea533.mybatis.model"/>

name="plugins">

class="com.isea533.mybatis.pagehelper.PageHelper">

name="properties">

dialect=hsqldb

reasonable=true

class="com.isea533.mybatis.mapperhelper.MapperInterceptor"/>

一定要注意PageHelper和MapperInterceptor这两者的顺序不能颠倒.

如果你想配置MapperInterceptor的参数,可以像PageHelper中的properties参数这样配置

3. 继承通用的Mapper,必须指定泛型

例如下面的例子:

public interface UserInfoMapper extends Mapper<UserInfo> {

//其他必须手写的接口...}

一旦继承了Mapper,继承的Mapper就拥有了以下通用的方法:

//根据实体类不为null的字段进行查询,条件全部使用=号and条件List<T> select(T record);//根据实体类不为null的字段查询总数,条件全部使用=号and条件int selectCount(T record);//根据主键进行查询,必须保证结果唯一//单个字段做主键时,可以直接写主键的值//联合主键时,key可以是实体类,也可以是MapT selectByPrimaryKey(Object key);//插入一条数据//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)//优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长int insert(T record);//插入一条数据,只插入不为null的字段,不会影响有默认值的字段//支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)//优先使用传入的参数值,参数值空时,才会使用序列、UUID,自动增长int insertSelective(T record);//根据实体类中字段不为null的条件进行删除,条件全部使用=号and条件int delete(T key);//通过主键进行删除,这里最多只会删除一条数据//单个字段做主键时,可以直接写主键的值//联合主键时,key可以是实体类,也可以是Mapint deleteByPrimaryKey(Object key);//根据主键进行更新,这里最多只会更新一条数据//参数为实体类int updateByPrimaryKey(T record);//根据主键进行更新//只会更新不是null的数据int updateByPrimaryKeySelective(T record);

4. 泛型(实体类)的类型必须符合要求

实体类按照如下规则和数据库表进行转换,注解全部是JPA中的注解:

表名默认使用类名,驼峰转下划线,如UserInfo默认对应的表名为user_info.

表名可以使用@Table(name = "tableName")

进行指定,对不符合第一条默认规则的可以通过这种方式指定表名.

字段默认和@Column

一样,都会作为表字段,表字段默认为Java对象的Field名字驼峰转下划线形式.

可以使用@Column(name = "fieldName")

指定不符合第3条规则的字段名

使用@Transient

注解可以忽略字段,添加该注解的字段不会作为表字段使用.

建议一定是有一个@Id

注解作为主键的字段,可以有多个@Id注解的字段作为联合主键.

默认情况下,实体类中如果不存在包含@Id

注解的字段,所有的字段都会作为主键字段进行使用(这种效率极低).

实体类可以继承使用,可以参考测试代码中的com.github.abel533.model.UserLogin2

类.

由于基本类型,如int作为实体类字段时会有默认值0,而且无法消除,所以实体类中建议不要使用基本类型.

除了上面提到的这些,Mapper还提供了序列(支持Oracle

)、UUID(任意数据库,字段长度32)、主键自增(类似MySQL,Hsqldb)三种方式,其中序列和UUID可以配置多个,主键自增只能配置一个。

这三种方式不能同时使用,同时存在时按照 序列>UUID>主键自增

的优先级进行选择.下面是具体配置方法:

使用序列可以添加如下的注解:

//可以用于数字类型,字符串类型(需数据库支持自动转型)的字段

@SequenceGenerator

(

name

=

"Any"

,

sequenceName

=

"seq_userid"

)

@Id

private

Integer id;

使用UUID时:

//可以用于任意字符串类型长度超过32位的字段

@GeneratedValue

(

generator

=

"UUID")private

String countryname;

使用主键自增:

//不限于@Id注解的字段,但是一个实体类中只能存在一个(继承关系中也只能存在一个)

@Id

@GeneratedValue

(

strategy

=

GenerationType.IDENTITY)private

Integer id;

5. 将继承的Mapper接口添加到Mybatis配置中

例如本项目测试中的配置:

class="com.github.abel533.mapper.CountryMapper"

/>

class="com.github.abel533.mapper.Country2Mapper"

/>

class="com.github.abel533.mapper.CountryTMapper"

/>

class="com.github.abel533.mapper.CountryUMapper"

/>

class="com.github.abel533.mapper.CountryIMapper"

/>

class="com.github.abel533.mapper.UserInfoMapper"

/>

class="com.github.abel533.mapper.UserLoginMapper"

/>

class="com.github.abel533.mapper.UserLogin2Mapper"

/>

附:Spring配置相关

如果你在Spring中配置Mapper接口,不需要像上面这样一个个配置,只需要有下面的这个扫描Mapper接口的这个配置即可:

class="org.mybatis.spring.mapper.MapperScannerConfigurer">

name="basePackage"

value="com.isea533.mybatis.mapper"/>

6. 代码中使用

例如下面这个简单的例子:

SqlSession

sqlSession =

MybatisHelper.getSqlSession();try

{ //获取Mapper UserInfoMapper

mapper =

sqlSession.getMapper(UserInfoMapper.class);

UserInfo userInfo =

new UserInfo();

userInfo.setUsername("abel533");

userInfo.setPassword("123456");

userInfo.setUsertype("2");

userInfo.setEmail("abel533@gmail.com");

//新增一条数据

Assert.assertEquals(1,

mapper.insert(userInfo));

//ID回写,不为空

Assert.assertNotNull(userInfo.getId());

//6是当前的ID

Assert.assertEquals(6,

(int)userInfo.getId());

//通过主键删除新增的数据

Assert.assertEquals(1,mapper.deleteByPrimaryKey(userInfo));}

finally {

sqlSession.close();}

另一个例子:

SqlSession

sqlSession =

MybatisHelper.getSqlSession();try

{ //获取Mapper CountryMapper

mapper =

sqlSession.getMapper(CountryMapper.class);

//查询总数

Assert.assertEquals(183,

mapper.selectCount(new

Country())); //查询100

Country country =

mapper.selectByPrimaryKey(100);

//根据主键删除

Assert.assertEquals(1,

mapper.deleteByPrimaryKey(100));

//查询总数

Assert.assertEquals(182,

mapper.selectCount(new

Country())); //插入

Assert.assertEquals(1,

mapper.insert(country));}

finally {

sqlSession.close();}

mysql mapper分页_Mybatis通用Mapper和分页pagehelper相关推荐

  1. java mapper层_Java 通用Mapper的设计

    springBoot推荐使用JPA 它对sql 进行了高度映射 如果你还是喜欢 自由的mybatis 那我们今天来试试tk.mybatis.mapper 通用Mapper 1. 引入依赖 引入必要依赖 ...

  2. SSM综合项目实战(TTSC) -- day02 Dubbo注册中心,通用Mapper,分页插件

    一.Dubbo的连接方式 1.连接方式介绍 使用Dubbo进行远程调用实现服务交互,它支持多种协议,如Hessian.HTTP.RMI.Memcached.Redis等等.由于Dubbo将这些协议的实 ...

  3. mysql通用mapper_通用Mapper(Mybatis)

    1.Mapper的简单介绍 2.Mapper的作用 通用Mapper可以通过Mybatis的拦截器原理,动态的帮我们实现单表的增删改查功能,大大降低了我们的开发成本,减少了我们的工作量. 3.Mapp ...

  4. 通用返回_Springboot项目整合通用mapper

    1.简介 什么是通用mapper 什么是通用mapper,用一句话概括就是,它就是一个辅助mybatis开发的组件,它不是替代mybatis,而是使mybatis更方便的开发.通用mapper提供极其 ...

  5. ORM框架之Mybatis(六)mybatis通用mapper

    一.简介通用mapper 1.1 官方介绍:(官网:https://mapperhelper.github.io/docs/) 通用Mapper都可以极大的方便开发人员.可以随意的按照自己的需要选择通 ...

  6. SSM-Mybatis通用Mapper

    Mybatis通用Mapper 介绍(重要) 如果使用过Mybaitis 的人都知道Mapper 他是一个接口 而这个接口内定义的方法 关联mapper.xml文件里的sql语句 使用Mybatis的 ...

  7. 一看就会一学就废之SpringBoot整合通用Mapper以及常用方法

    本文适合初次学习通用Mapper新鸟阅览,老生常谈,从三个大方向入手----是什么?能干什么?怎么用? 目录 一.通用Mapper是什么? 二.通用Mapper能干什么? 三.怎么使用通用Mapper ...

  8. 超简单的通用Mapper快速入门

    文章目录 1.前言 2.什么是通用mapper 3.使用流程示例 3.1 导入依赖 3.2 编写实体类 3.3 创建Mapper 3.4 配置通用Mapper 3.5 测试 4.常用注解 4.1 @T ...

  9. 手把手教你如何玩转插件:通用Mapper和Mybatis generator

    情景引入: 小白:起床起床了,,,,太阳都晒屁股了. 我:好不容易有个睡懒觉的机会,你又把我吵起来干嘛呢?不能给我放一个假吗? 小白:不可以不可以,我又遇到了一个问题,我需要你的帮忙,你赶紧帮我想想办 ...

最新文章

  1. ASP.NET MVC:4 Ways To Prevent Duplicate Form Submission(转载)
  2. (三)SpringBoot之配置文件详解:Properties和YAML
  3. 管理实践-教练技术的应用
  4. 更换 PVE7 软件仓库源和 CT 模板(LXC)源为国内源
  5. 电气自动化c语言用什么软件,电气自动化需要哪些高级语言?
  6. oracle入门很简单豆瓣,Oracle入门经典
  7. EXCHANGE指定要使用的域控制器、GC
  8. python定义数据框大小_python – 如何设置框架的最小和最大高度或宽度?
  9. 【图像加密】基于matlab GUI混沌系统图像加密解密【含Matlab源码 147期】
  10. mysql数据库季度函数_数据库之MySQL函数(二)
  11. Node.js菜鸟教程 思维导图
  12. 什么是支付账户、备付金、网络支付、银行卡清算、贷记卡、代扣、代付....
  13. python数字金额转换为中文大写金额
  14. ONF开源白皮书:SDN解决方案案例——校园SDN
  15. 显示thread 1:signal SIGABRT 错误
  16. ubuntu下网易云音乐无法打开
  17. 重新安装的nvidia显卡驱动
  18. 哪些操作导致了上下文切换
  19. RS232(DB9)接口信号线定义
  20. C/C++程序员求职面试指导

热门文章

  1. 5G是爱情,基于现实基础才更甜蜜
  2. 好看易用的随身硬盘,读写速度也超快,大华T70移动固态硬盘体验
  3. 如何把自己包装成程序员大佬?这里有一份「装 X 指南」
  4. 苹果手机旋转屏幕之后的问题
  5. 码农翻身——Java帝国之动态代理
  6. 手机备忘录怎么改红色字体
  7. QCY蓝牙耳机恢复双耳模式
  8. 解决因Docker网桥网段冲突导致访问不到容器问题
  9. E3D三维模型AE插件:Element 3D Mac版(支持ae2022)
  10. android开发读书笔记