MyBatis-通用Mapper-tk.mybatis的使用
MyBatis-通用Mapper[更新中]
tk.mybatis的使用
前言
使用MyBatis开发,如果是普通是同MyBatis进行开发,那么就需要在xml文件中编写大量的SQL。当数据库表结构发生改动时,对应的所有的SQL及其实体类都需要更改,这样开发的效率就有点低。
什么是Mapper
为了解决这个问题,使用通用Mapper;通用Mapper基于MyBatis的插件,开发人员不需要编写SQL,不需要在DAO中增加对应的方法,只要写好实体类就能支持自动添加响应的增删查改方法。
如何使用Mapper
在Spring Boot 中使用tk.mapper:
Maven依赖:在Maven工程的commom子工程中设置。
<!-- 通用Mapper插件 -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.5</version>
</dependency>
逆向工程
使用逆向工程创建数据库对应的实体类pojo、mapper下的xml文件。
--见另外的文章--
mapper继承了tk.mapper后,便拥有了Mapper的所有通用方法
Mapper通用SQL
Select
方法:List<T> select(T record);
说明:根据实体中的属性值进行查询,查询条件使用等号
方法:T selectByPrimaryKey(Object key);
说明:根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
方法:List<T> selectAll();
说明:查询全部结果,select(null)方法能达到同样的效果
方法:T selectOne(T record);
说明:根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号
方法:int selectCount(T record);
说明:根据实体中的属性查询总数,查询条件使用等号
Insert
方法:int insert(T record);
说明:保存一个实体,null的属性也会保存,不会使用数据库默认值
方法:int insertSelective(T record);
说明:保存一个实体,null的属性不会保存,会使用数据库默认值
Update
方法:int updateByPrimaryKey(T record);
说明:根据主键更新实体全部字段,null值会被更新
方法:int updateByPrimaryKeySelective(T record);
说明:根据主键更新属性不为null的值
Delete
方法:int delete(T record);
说明:根据实体属性作为条件进行删除,查询条件使用等号
方法:int deleteByPrimaryKey(Object key);
说明:根据主键字段进行删除,方法参数必须包含完整的主键属性
Example方法
方法:List<T> selectByExample(Object example);
说明:根据Example条件进行查询
重点:这个查询支持通过Example类指定查询列,通过selectProperties方法指定查询列
方法:int selectCountByExample(Object example);
说明:根据Example条件进行查询总数
方法:int updateByExample(@Param("record") T record, @Param("example") Object example);
说明:根据Example条件更新实体record包含的全部属性,null值会被更新
方法:int updateByExampleSelective(@Param("record") T record, @Param("example") Object example);
说明:根据Example条件更新实体record包含的不是null的属性值
方法:int deleteByExample(Object example);
说明:根据Example条件删除数据
如何使用
vo类:实体类,负责传输数据。这里以工程中的 renderSixNewItems()
方法为例,方法的功能是,查询类别下的6个items。由于Mapper提供的SQL方法是不足的,所以需要使用Example来配合使用,搭建复杂的SQL。
@Override
public SixNewItemVo renderSixNewItems(Integer rootCatId){
// category 获取实体类
// categoryMapper.selectByPrimaryKey(rootCatId); 通过主键从数据库中查询该实体类
Category category = categoryMapper.selectByPrimaryKey(rootCatId);
//SixNewItemVo -- vo -- value object 值对象 用于业务层之间的数据传输。仅仅是包含数据,就是提取实体类的部分数据进行传输。
SixNewItemVo sixNewItemVo = new SixNewItemVo();
sixNewItemVo.setRootCatName(category.getName());
sixNewItemVo.setSlogan(category.getSlogan());
sixNewItemVo.setBgColor(category.getBgColor());
sixNewItemVo.setCatImage(category.getCatImage());
//获取到 getName、getSlogan、getBgColor、getCatImage
/**
* 实体类
* 使用Example来实现其他SQL
* 当前的需求是:根据category的rootCatId来查询同一类别下的items,即一个大类下的商品
* */
//example 使用Items的类名,即表示我这个example是为Items服务的,接收的数据也就是Items类
Example example = new Example(Items.class);
//createCriteria 创建查询条件、 andEqualTo 某个列等于***
example.createCriteria().andEqualTo("rootCatId",rootCatId);
System.out.println("id : " + rootCatId);
//排序
example.orderBy("sellCounts").desc();
PageHelper.startPage(1,6);
//把example作为查询条件放入Mapper提供的selectByExample查询
//items 为查询结果
List<Items> items = itemsMapper.selectByExample(example);
List<ItemsVo> itemsVos = new ArrayList<>();
for (Items item : items) {
ItemsVo itemsVo = new ItemsVo();
itemsVo.setItemId(item.getId());
itemsVo.setItemName(item.getItemName());
ItemsImg itemsImg = new ItemsImg();
itemsImg.setItemId(item.getId());
itemsImg.setIsMain(1);
List<ItemsImg> itemsImgs = itemsImgMapper.select(itemsImg);
itemsVo.setItemUrl(itemsImgs.get(0).getUrl());
itemsVos.add(itemsVo);
System.out.println("itemsVo_id : " + itemsVo.getItemId());
}
sixNewItemVo.setItemsVoList(itemsVos);
return sixNewItemVo;
}
引用链接:
Mybatis通用Mapper(tk.mybatis)的使用:https://blog.csdn.net/lijingjingchn/article/details/84819536
Java 的 VO类: https://blog.csdn.net/jikefzz1095377498/article/details/79237618
MyBatis-通用Mapper-tk.mybatis的使用的更多相关文章
- 值得收藏的Mybatis通用Mapper使用大全。
引言 由于小编的记性不太好,每次在写代码的时候总是把通用mapper的方法记错,所以今天把通用mapper的常用方法做一下总结,方便以后直接查看.好了,不废话啦. 引包 <!-- 通用Mappe ...
- Mybatis 通用 Mapper 和 Spring 集成
依赖 正常情况下,在原有依赖基础上增加的 mapper-spring. <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spr ...
- SpringBoot 3.SpringBoot 整合 MyBatis 逆向工程以及 MyBatis 通用 Mapper
一.添加所需依赖,当前完整的pom文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu ...
- Spring boot集成 MyBatis 通用Mapper
配置 POM文件 <parent> <groupId>org.springframework.boot</groupId> <artifactId>sp ...
- Spring Boot MyBatis 通用Mapper插件集成 good
看本文之前,请确保你已经在SpringBoot中集成MyBatis,并能正常使用.如果没有,那么请先移步 http://blog.csdn.net/catoop/article/details/505 ...
- spring boot集成MyBatis 通用Mapper 使用总结
spring boot集成MyBatis 通用Mapper 使用总结 2019年 参考资料: Spring boot集成 MyBatis 通用Mapper SpringBoot框架之通用mapper插 ...
- springboot学习笔记:8. springboot+druid+mysql+mybatis+通用mapper+pagehelper+mybatis-generator+freemarker+layui
前言: 开发环境:IDEA+jdk1.8+windows10 目标:使用springboot整合druid数据源+mysql+mybatis+通用mapper插件+pagehelper插件+mybat ...
- springboot学习笔记:9.springboot+mybatis+通用mapper+多数据源
本文承接上一篇文章:springboot学习笔记:8. springboot+druid+mysql+mybatis+通用mapper+pagehelper+mybatis-generator+fre ...
- springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)
一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...
- Mybatis通用Mapper介绍和使用
Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL. ...
随机推荐
- Java synchronized那点事
前言 请看上篇:Java 对象头那点事 文章中的源码都有不同程度缩减,来源于openjdk8的开源代码(tag:jdk8-b120). 锁粗化过程 偏向锁 ①:markword中保存的线程ID是自己且 ...
- 基于.NetCore开发博客项目 StarBlog - (7) 页面开发之文章详情页面
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- WPF 分组
分组和树形结构是不一样的. 树形结构是以递归形式存在.分组是以键值对存在的形式,类似于GroupBy这样的形式. 举个例子 ID NAME SEX Class 1 张三 男 1 2 李四 女 2 3 ...
- 从头创建一个新的vue项目------用npm|yarn下载vue-cli|vue-ui创建vue
1.下载node或者是nvm node可以直接去node官网下载,http://nodejs.cn/,默认是长期维护的版本 如果想管理node的版本,可以下载nvm.这个是可选的.但是作为一个前端工程 ...
- Grafana+Prometheus 搭建 JuiceFS 可视化监控系统
作为承载海量数据存储的分布式文件系统,用户通常需要直观地了解整个系统的容量.文件数量.CPU 负载.磁盘 IO.缓存等指标的变化. JuiceFS 没有重复造轮子,而是通过 Prometheus 兼容 ...
- 前端CSS3布局display:flex用法
前端CSS3布局display:flex用法 先附上代码 点击查看代码 <!DOCTYPE html> <html> <head> <meta charset ...
- 用C语言实现井字棋(人人/AI人机)--完结版
目录 用C语言实现井字棋(人人/AI人机)--完结版 BUG与优化3: 1. 修改了step的计算方法,每个玩家玩完就加一次step 2. 改变了电脑下棋的逻辑,每个玩家玩完之后都跳过这次循环 源码: ...
- Java随谈(六)## 我们真的理解 Java 里的整型吗?
我们真的理解 Java 里的整型吗 整型是我们日常生活中最常用到的基础数据类型,看这篇文章之前,我想问: 我们真的像自己认为的那么理解 Java 内的整型吗? 也许看完本篇文章你就有自己的答案. C ...
- 定制.NET 6.0的依赖注入
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 在本章中,我们将学习ASP.NET Core的依赖项注入(DI)以及如何自定义它. ...
- 这个Spring Security登录插件牛啊,验证码、小程序、OAuth2都能快速接入
上次我们把验证码登录.小程序登录优雅地集成到了Spring Security,很多同学大呼过瘾,相比较一些传统玩法高级了很多.胖哥就赶紧抓住机会举一反三,把几个非标准的OAuth2也接入了进来,主要是 ...