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的使用的更多相关文章

  1. 值得收藏的Mybatis通用Mapper使用大全。

    引言 由于小编的记性不太好,每次在写代码的时候总是把通用mapper的方法记错,所以今天把通用mapper的常用方法做一下总结,方便以后直接查看.好了,不废话啦. 引包 <!-- 通用Mappe ...

  2. Mybatis 通用 Mapper 和 Spring 集成

    依赖 正常情况下,在原有依赖基础上增加的 mapper-spring. <!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spr ...

  3. SpringBoot 3.SpringBoot 整合 MyBatis 逆向工程以及 MyBatis 通用 Mapper

    一.添加所需依赖,当前完整的pom文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&qu ...

  4. Spring boot集成 MyBatis 通用Mapper

    配置 POM文件 <parent> <groupId>org.springframework.boot</groupId> <artifactId>sp ...

  5. Spring Boot MyBatis 通用Mapper插件集成 good

    看本文之前,请确保你已经在SpringBoot中集成MyBatis,并能正常使用.如果没有,那么请先移步 http://blog.csdn.net/catoop/article/details/505 ...

  6. spring boot集成MyBatis 通用Mapper 使用总结

    spring boot集成MyBatis 通用Mapper 使用总结 2019年 参考资料: Spring boot集成 MyBatis 通用Mapper SpringBoot框架之通用mapper插 ...

  7. springboot学习笔记:8. springboot+druid+mysql+mybatis+通用mapper+pagehelper+mybatis-generator+freemarker+layui

    前言: 开发环境:IDEA+jdk1.8+windows10 目标:使用springboot整合druid数据源+mysql+mybatis+通用mapper插件+pagehelper插件+mybat ...

  8. springboot学习笔记:9.springboot+mybatis+通用mapper+多数据源

    本文承接上一篇文章:springboot学习笔记:8. springboot+druid+mysql+mybatis+通用mapper+pagehelper+mybatis-generator+fre ...

  9. springboot学习笔记:11.springboot+shiro+mysql+mybatis(通用mapper)+freemarker+ztree+layui实现通用的java后台管理系统(权限管理+用户管理+菜单管理)

    一.前言 经过前10篇文章,我们已经可以快速搭建一个springboot的web项目: 今天,我们在上一节基础上继续集成shiro框架,实现一个可以通用的后台管理系统:包括用户管理,角色管理,菜单管理 ...

  10. Mybatis通用Mapper介绍和使用

    Mybatis通用Mapper介绍与使用 前言 使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL. ...

随机推荐

  1. 讨论两种Redis中Token的存储方式

    摘要:本文讨论一个问题:存储token时,token与对应用户id谁来作为key? 问题起源问题起源于要给公司的后台管理系统添加权限管理,选用的是开源框架shiro,而原本系统上是采用token做了登 ...

  2. ESP32+阿里云+vscode_Pio

    用ESP32在vscode使用PlatformPIO写的代码.(代码是折叠代码,不能一眼瞧见,我也不太会使用编辑器哈,刚写博不久,望谅解.) 功能:esp32联网,能够通过联网打开在阿里云平台控制设备 ...

  3. linux篇-linux LAMP yum版安装

    LAMP(linux.apache.mysql.php),是四个套件的合成,简单讲就是要把php运行在linux上,需要依赖apache和mysql数据库. 1 准备好一个linux系统(centos ...

  4. vue ui 创建vue项目 没反应的解决办法 2021

    1.升级vue 脚手架 即可   2.再  vue ui  创建项目 cnpm i -g @vue/cli

  5. Fail2ban 简介

    Fail2ban是一个基于日志的IP自动屏蔽工具.可以通过它来防止暴力破解攻击. Fail2ban通过扫描日志文件(例如/var/log/apache/error_log),并禁止恶意IP(太多的密码 ...

  6. 2021.05.05【NOIP提高B组】模拟 总结

    T1 给你一棵树,要求增加最少的边权是的从根到每一个叶子的长度相等 不能改变原有的最大长度 这是一个贪心:尽可能往深度小的边增加 先预处理出 \(mx_i\) 表示从 \(i\) 到叶子的最大长度 然 ...

  7. 2020.10.17【普及组】模拟赛C组 总结

    总结 这次比赛 120 分,老师说上 200 是不容易的,但我觉得这不是我真的水平 改题情况 T1 题目大意:有 N 个小朋友,每个小朋友有 \(B_i\) 个朋友,问从中随机选 3 人使得 3 人关 ...

  8. mysql复制表的两种方式

    mysql复制表的两种方式. 第一.只复制表结构到新表 create table 新表 select * from 旧表 where 1=2 或者 create table 新表 like 旧表 第二 ...

  9. 想学嵌入式?要不一起玩 Arduino 吧

    作者:HelloGitHub-Anthony 这里是 HelloGitHub 推出的<讲解开源项目>系列,本期介绍的是如何用开源硬件开发平台 Arduino,自己动手做一个温湿度显示器. ...

  10. JavaScript写倒计时

    在网页中,特别是电商网站中,倒计时的出现频率很高,接下来给大家介绍一下怎么用JavaScript写一个倒计时.代码如下: 首先我们通过Date构造函数的方法创建一个倒计时的结束的时间.并将其转换为毫秒 ...