首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >神器:通用mapper的使用

神器:通用mapper的使用

作者头像
刘小爱
发布2020-08-28 09:24:06
2.7K0
发布2020-08-28 09:24:06
举报

补充说明一个知识点:通用mapper

一、通用mapper概述

它是mybatis的一个插件,单表查询的时候,使用通用mapper会非常的方便。

极大地方便开发人员,可以按照需要选择通用方法,还可以自定义通用方法。

不过它也有一个非常大的局限性:只支持单表操作,不支持多表查询。

1导入依赖

SpringBoot项目,我们优先找启动器即可,也就是包含starter的依赖,这个是由通用mapper作者自己写的启动器。

导入通用mapper启动器后,我们能发现其本身就包含了jdbc和mybatis的库。

所以这两个的依赖就不用导入了。

2user实体类与数据表

在通用mapper中,表名默认使用类名,驼峰转下划线。比如说tab_user表,我们在Java中可以使用TabUser这个类表示。

但这样显然不太合适,我们一般都是用User实体类,那怎么办呢?

①@Table注解

@Table(name="tab_user"),也可以通过name属性指定该实体类对应的表名。

②@Id、@KeySql注解

@Id用来指定Id,这不用多说,其中@KeySql用来获取自增主键。

这是一个什么意思呢?大致理解就是:

令MyBatis使用JDBC的getGeneratedKeys方法来取出由数据库内部生成的主键。

③@Column注解

Java中的属性与表字段默认是驼峰匹配,比如说userName就对应着user_name。

如果不符合这个原则,就用@Column注解说明表字段名,当然一般给Java实体类属性取名时都会按照驼峰匹配来。

④@Transient注解

Transient,瞬态的意思,该注解可以忽视Java实体类中的属性,不作为表字段使用。

比如说该实体类中比数据表字段多一个属性,就可以使用该注解做一个说明。

二、代码编写及测试

1Mapper层和启动类

mapper层也就是我们以前的dao层。

通用mapper厉害的地方在于,我们不用在mapper中写对应的方法,只需要继承mapper这个接口即可。

在启动类中使用@MapperScan开启mapper包扫描,因为我的mapper都是在com.liuxiaoai.mapper包中的,所以在该注解中说明即可。

注意:和通用mapper相关的包都是以tk开头的,不要弄混了。

2Controller层和Service层

①Controller层

再次对这些注解做一个回顾:

@RestController就相当于@Controller加上@ResponseBody,前者表明是一个处理器,后者能将响应数据转为json格式。

@Autowired表示引入UserService。

@RequestMapping("user")表示该处理器能接受访问路径为user的请求。

@GetMapping("{id}")表示子路径为id。

@PathVariable("id")表示获取访问路径中输入的子路径参数。

②Service层

引入userMapper,使用通用mapper直接完成查询,它的方法都是见名知义的:

selectByPrimaryKey()即根据主键查询。

3浏览器测试

访问路径user/1,输入1即查询id为1的数据,若是输入2即查询id为2的数据。

响应的数据为json数据格式,我这里是使用的一个json插件,所以格式看起来很好看。

三、通用mapper之增删改

数据库无外乎就是增删改查,上述讲了查询,再说增删改,当然通用mapper中提供的方法也不少,我这边只说下常用的方法。

1增加方法

这边的话我用一个user对象作为伪数据来测试,实际项目中应该是前端传来的数据。

通用mapper中有两个增加方法:

  • insert():即增加的意思。
  • insertSelective():即为选择性的增加。

这两者有什么区别呢?在于sql语句的不同:

直接增加数据sql语句中增加的字段为所有字段,user对象中没有值则为null。

有选择性增加数据,sql语句红增加的字段为user对象中不为空的字段。

2修改方法

看方法名的意思,也就是根据主键修改数据。

①非选择性修改

修改id为1的所有数据,如果user对象中的值为null,数据表中对应的值也被修改成null。

②选择性修改

如果user对象中的值为null,数据表中对应的值不做修改,保持不变。

3删除方法

①根据主键删除

例子中即为删除id为12的数据。

②根据非主键删除

其中属性之间是and连接,比如上述例子中是查询usernname为liuxiaoai,并且name为“刘小爱”的数据,两者都得满足条件才行。

四、高阶查询example

上述编写过根据id查询数据的方法,直接使用的是selectByPrimaryKey()方法。

如果是多条件查询该怎么办?就需要使用到通用mapper提供的example对象。

①example对象

通用mapper中提供的高阶查询就是通过example对象来完成的。

②条件查询

example的createCriteria()方法,可以创建Criteria对象,Criteria也就是条件的意思。

通过criteria对象可以设定各种条件,方法都是见名知意的:

  • 比如andEqualTo("sex","1")意思就是sex等于1的条件。
  • 比如andGreateThan("age","25")意思就是age大于25的条件。

当然criteria对象也可以一直添加条件的,满足链式编程,条件是各种各样的,有很多种。

这边就不详细讲了,基本上我们弄懂了英文单词对应的意思,也就知道其作用了。

example的or方法可以将多个条件以or的形式连接起来,同理也有一个and方法。

③添加排序规则

example的setOrderByClause()方法可以添加排序规则,比如“id desc”就表示按照id降序排序。

其中example在修改和删除方法中也可以使用,用法是类似的,就不再赘述了。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘小爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、通用mapper概述
  • 二、代码编写及测试
  • 三、通用mapper之增删改
  • 四、高阶查询example
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档