先看一下和MyBatis 不同点说明:

    @GetMapping("/select_sql")
public Object getUserBySql() {
User user=new User(1L);
User selectUser=user.selectById();
user.deleteById(user);
return userService.selectListBySQL(); //普通走法
}

最大的不同点在entity层直接可以调用superEntity,直接实现默认的一些增删改查

/**
* 用户表
*/
@SuppressWarnings("serial")
public class User extends SuperEntity<User> { /**
* 名称
*/
private String name;
/**
* 年龄
*/
private AgeEnum age;
/**
* 这里故意演示注解可无
*/
@TableField("test_type")
@TableLogic
private Integer testType; /**
* 测试插入填充
*/
@TableField(fill = FieldFill.INSERT)
private Date testDate; private Long role;
private PhoneEnum phone; public User() {
}
public User(Long id){
this.setId(id);
} public User(Long id, String name, AgeEnum age, Integer testType) {
this.setId(id);
this.name = name;
this.age = age;
this.testType = testType;
} public User(String name, AgeEnum age, Integer testType) {
this.name = name;
this.age = age;
this.testType = testType;
} public String getName() {
return this.name;
} public void setName(String name) {
this.name = name;
} public AgeEnum getAge() {
return this.age;
} public void setAge(AgeEnum age) {
this.age = age;
} public Integer getTestType() {
return this.testType;
} public void setTestType(Integer testType) {
this.testType = testType;
} public Long getRole() {
return this.role;
} public void setRole(Long role) {
this.role = role;
} public PhoneEnum getPhone() {
return this.phone;
} public void setPhone(PhoneEnum phone) {
this.phone = phone;
} public Date getTestDate() {
return testDate;
} public void setTestDate(Date testDate) {
this.testDate = testDate;
} @Override
public String toString() {
return "User [id=" + this.getId() + ", name=" + name + ", age=" + age
+ ", testType=" + testType + ", testDate="
+ testDate + ", role=" + role + ", phone=" + phone + "]";
}
SuperEntity 继承Model  ,Model默认实现了简单的增删改查,不需要再去实现mapper层。
/**
* 演示实体父类
*/
public class SuperEntity<T extends Model> extends Model<T> { /**
* 主键ID , 这里故意演示注解可以无
*/
@TableId("test_id")
private Long id;
private Long tenantId; public Long getId() {
return this.id;
} public void setId(Long id) {
this.id = id;
} public Long getTenantId() {
return tenantId;
} public SuperEntity setTenantId(Long tenantId) {
this.tenantId = tenantId;
return this;
} @Override
protected Serializable pkVal() {
return this.id;
}
}

2.对于原生service层改造实现,默认实现baseMapper, baseMapper 默认实现了mapper的常规使用写法方式。

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService { @Override
public boolean deleteAll() {
return retBool(baseMapper.deleteAll());
} @Override
public List<User> selectListBySQL() {
return baseMapper.selectListBySQL();
} @Override
public List<User> selectListByWrapper(Wrapper wrapper) {
return baseMapper.selectListByWrapper(wrapper);
//baseMapper.selectma
}
}

3.UserMapper 继承 superMapper,而superMapper继承baseMapper,你可以把一些公共的方法放在superMapper里,从而实现公用。

/**
* User 表数据库控制层接口
*/
public interface UserMapper extends SuperMapper<User> { /**
* 自定义注入方法
*/
int deleteAll(); @Select("select test_id as id, name, age, test_type from user")
List<User> selectListBySQL(); List<User> selectListByWrapper(@Param("ew") Wrapper wrapper); }

最后的XML是一些不常用的sql可以写在这里给予调用。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.baomidou.springboot.mapper.UserMapper"> <!-- 通用查询结果列 -->
<sql id="Base_Column_List">
test_id AS testId, name, age, test_type AS testType, role, phone
</sql> <delete id="deleteAll">
DELETE FROM USER
</delete> <select id="selectListByWrapper" resultType="com.baomidou.springboot.entity.User">
SELECT * FROM USER
<!-- 判断 wrapper 是否为空 emptyOfWhere -->
<where>
${ew.sqlSegment}
</where>
</select>
</mapper>

可以看到他们的关系是一层一层过滤设计的,用了公共代码方便了公用,也达到了解耦合。

MyBatis-Plus 使用说明介绍的更多相关文章

  1. MyBatis注解Annotation介绍及Demo

     MyBatis注解Annotation介绍及Demo 2014-04-21 17:09:55 标签:Mybatis Annotation 注解 ResultMap SqlBuilder 原创作品,允 ...

  2. 一、mybatis的插件介绍

    摘自:https://www.cnblogs.com/qm-article/p/11785350.html mybatis的插件机制   一.mybatis的插件介绍 关于mybatis的插件,我想大 ...

  3. Mybatis通用Mapper介绍和使用

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

  4. Mybatis拦截器介绍

    拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法.Mybatis拦截器设计的一个初 ...

  5. Mybatis(一)入门介绍

    一.MyBatis的发展 MyBatis 是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation迁移到google code, 并且改名M ...

  6. 详解Mybatis通用Mapper介绍与使用

    使用Mybatis的开发者,大多数都会遇到一个问题,就是要写大量的SQL在xml文件中,除了特殊的业务逻辑SQL之外,还有大量结构类似的增删改查SQL.而且,当数据库表结构改动时,对应的所有SQL以及 ...

  7. MyBatis(1)优点&介绍&工程

    本次全部学习内容:MyBatisLearning 一:jabc的相关说明: jdbc编程步骤: 加载数据库驱动 创建并获取数据库链接 创建jdbc statement对象 设置sql语句 设置sql语 ...

  8. Mybatis拦截器介绍及分页插件

    1.1    目录 1.1 目录 1.2 前言 1.3 Interceptor接口 1.4 注册拦截器 1.5 Mybatis可拦截的方法 1.6 利用拦截器进行分页 1.2     前言 拦截器的一 ...

  9. jdbc、Mybatis、Hibernate介绍(非原创)

    文章大纲 一.jdbc介绍二.Mybatis介绍三.Hibernate介绍四.jdbc.Mybatis.Hibernate比较五.参考文章   一.jdbc介绍 1. jdbc编程步骤 (1)加载数据 ...

  10. MyBatis注解Annotation介绍及Demo(转)

    MyBatis可以利用SQL映射文件来配置,也可以利用Annotation来设置.MyBatis提供的一些基本注解如下表所示. 注解 目标 相应的XML 描述 @CacheNamespace 类 &l ...

随机推荐

  1. Qt优雅地结束线程(两种方法都是用Mutex锁住bool变量进行修改,然后由bool变量控制耗时动作的退出,即正常退出)

    如果一个线程运行完成,就会结束.可很多情况并非这么简单,由于某种特殊原因,当线程还未执行完时,我们就想中止它.不恰当的中止往往会引起一些未知错误.比如:当关闭主界面的时候,很有可能次线程正在运行,这时 ...

  2. MFC中的模态对话框与非模态对话框,模态对话框测试

    http://blog.csdn.net/u010839382/article/details/52972427 http://blog.csdn.net/u010839382/article/det ...

  3. java多线程之wait和notify

    多线程中的通信是非常重要的概念,线程直接实现通信就可以并发完成很多复杂工作. java在Object类中就设计了wait()和notify()两个方法,以解决这个问题. 1.释义: wait()方法将 ...

  4. 【UVA - 11624】Fire!

    -->Fire! 直接上中文 Descriptions: 乔在迷宫中工作.不幸的是,迷宫的一部分着火了,迷宫的主人没有制定火灾的逃跑计划.请帮助乔逃离迷宫.根据乔在迷宫中的位置以及迷宫的哪个方块 ...

  5. 【设计模式】行为型06命令模式(Command Pattern)

    命令模式 个人理解:命令模式,本质上是一种多层次的封装. 好处:降低耦合,扩展极其方便. 以下一段文案摘抄自:http://www.runoob.com/design-pattern/command- ...

  6. java里字节与字符的区别

    当时学Java的时候没搞懂字节和字符的区别,今天看文件输入输出流的时候觉得是时候彻底把这两个概念弄懂. 首先得知道byte的概念和作用: byte即字节的意思,是java中的基本数据类型,用来申明字节 ...

  7. Ruby语言的一些杂项

    Ruby是纯正血统的面向对象语言,所有的一切,一切的一切都是对象 Ruby里块(语句块)的特性非常重要,这个优美的特性贯穿整个Ruby Ruby里模块和类的概念一样重要,模块也是Ruby里的一个非常优 ...

  8. code forces 1176 D. Recover it!

    原题链接:https://codeforces.com/contest/1176/problem/D 题目大意是 两个个数列 a , b 相同 ,如果 ai 是素数,那么b数列里添加上第ai个素数(2 ...

  9. jquery.cookie.js 获取不到cookie的值

    最近使用$.cookie获取cookie 的值.发现完全取不到.看了浏览器里也存了对应的值.可以添加,但是就是取不到., 折腾了半天,后来突然想起来加了个有可能带汉字的cookie键值.删掉就可以取出 ...

  10. 每天学点node系列-http

    任何可以使用JavaScript来编写的应用,最终会由JavaScript编写.--Atwood's Law http模块概览 http模块主要用于创建http server服务,并且 支持更多特性 ...