之前的文章简单介绍了一下mybatis plus:《使用Mybatis-plus代替原生Mybatis》。截止目前在项目中使用了一段时间的mybatis plus,再也没有写过sql,都用mp的Wrapper封装查询条件了。这里先简单介绍一下mp的用法(抱歉,上一篇里面讲得实在太水了,因为当时自己也不会用),然后再说和mycat的整合。

代码生成

先在数据库建好表,假设表名是t_mp_test。然后使用主类:

import com.baomidou.mybatisplus.annotation.DbType;

import com.baomidou.mybatisplus.generator.AutoGenerator;

import com.baomidou.mybatisplus.generator.InjectionConfig;

import com.baomidou.mybatisplus.generator.config.DataSourceConfig;

import com.baomidou.mybatisplus.generator.config.GlobalConfig;

import com.baomidou.mybatisplus.generator.config.PackageConfig;

import com.baomidou.mybatisplus.generator.config.StrategyConfig;

import com.baomidou.mybatisplus.generator.config.rules.DateType;

import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import java.util.HashMap;

import java.util.Map;

public class MpGenerator {

public static void main(String[] args) {

AutoGenerator mpg = new AutoGenerator();

// 全局配置

GlobalConfig gc = new GlobalConfig();

String projectPath = System.getProperty("user.dir");

System.out.println(projectPath);

gc.setOutputDir(projectPath + "/myplus");

gc.setAuthor("sheldon");

gc.setFileOverride(true); //是否覆盖

gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为false

gc.setEnableCache(false);// XML 二级缓存

gc.setBaseResultMap(true);// XML ResultMap

gc.setBaseColumnList(true);// XML columList

gc.setOpen(false);

gc.setEntityName("%sPO");

gc.setDateType(DateType.ONLY_DATE);

mpg.setGlobalConfig(gc);

// 数据源配置

DataSourceConfig dsc = new DataSourceConfig();

dsc.setDbType(DbType.MYSQL);

dsc.setDriverName("com.mysql.jdbc.Driver");

dsc.setUsername("root");

dsc.setPassword("123456");

dsc.setUrl("jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8");

mpg.setDataSource(dsc);

// 策略配置

StrategyConfig strategy = new StrategyConfig();

strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略

strategy.setInclude(new String[] { "t_mp_test" }); // 需要生成的表

// 自定义 service 父类

strategy.setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService");

// 自定义 service 实现类父类

strategy.setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl");

mpg.setStrategy(strategy);

// 包配置

PackageConfig pc = new PackageConfig();

pc.setParent("a.b");

pc.setModuleName("c");

pc.setController("controller");

pc.setEntity("model");

pc.setMapper("mapper");

pc.setService("service");

pc.setServiceImpl("service.impl");

pc.setXml("mapper.xml");

mpg.setPackageInfo(pc);

mpg.setCfg(cfg);

// 执行生成

mpg.execute();

}

}

建议把这个文件放到test目录下,执行后会在跟目录下生成代码,分别拷贝到对应的包中即可。

CRUD

下面分别简单介绍下常用的dml功能。

根据ID或其他条件查询

如果是根据ID查询比较简单,使用替你生成的IService的子接口调用

com.baomidou.mybatisplus.extension.service.IService#getById

如果是根据其他条件,返回是单个对象的话使用

com.baomidou.mybatisplus.extension.service.IService#getOne(com.baomidou.mybatisplus.core.conditions.Wrapper)

返回集合的话使用

com.baomidou.mybatisplus.extension.service.IService#list(com.baomidou.mybatisplus.core.conditions.Wrapper)

Wrapper可以传入一个对象用来封装查询条件,也可以直接调用com.baomidou.mybatisplus.core.conditions.query.QueryWrapper的方法封装条件。

QueryWrapper提供了很多方法匹配标准sql的语法,比如eq是相等,ne是不等于,ge是大于等于,lt是小于,等等。还可以分组、排序、模糊查询等等(其实是其抽象父类com.baomidou.mybatisplus.core.conditions.AbstractWrapper提供的)。

注意:QueryWrapper的同一个条件多次使用不会被覆盖,所以就相当于无效查询了。比如

QueryWrapper> qw = new QueryWrapper<>();

qw.eq("id", "1209570800020050");

qw.eq("id", "1209570800020051");

qw.in("name", list);

List> list = service.list(qw);

这段代码期望查询name在集合list中、并且id是第二次传入的结果。但实际上生成的sql条件是where id = “1209570800020050” and id = “1209570800020051” and name in (@list),所以一定命不中记录。

增改

增加可以使用

com.baomidou.mybatisplus.extension.service.IService#save

或者批量增加接口

com.baomidou.mybatisplus.extension.service.IService#saveBatch(java.util.Collection)

更新可以使用

com.baomidou.mybatisplus.extension.service.IService#update(T, com.baomidou.mybatisplus.core.conditions.Wrapper)

第一个参数是要更新的字段,第二个参数封装的匹配条件。如果是根据ID更新,则不用传入第二个参数,将ID赋到第一个参数即可。

更新也提供批量接口

com.baomidou.mybatisplus.extension.service.IService#updateBatchById(java.util.Collection)

另外,插入和更新可以使用同样的方法

com.baomidou.mybatisplus.extension.service.IService#saveOrUpdate(T)

com.baomidou.mybatisplus.extension.service.IService#saveOrUpdateBatch(java.util.Collection)

执行区别是判断是否传入ID,有则更新,无则插入。

删除

删除就不说了,现在很少有物理删除功能。如果需要可以查找remove开头的方法,一定能满足你。

其他

mp还提供了很多十分方便的api,比如 QueryWrapper 提供了last方法,可以在生成的sql末尾加自定义语句,如limit 1。再比如分页查询接口page,你可以探索一下用法。

注意mp的分页方法必须搭配拦截器,否则无效:

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;

import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.transaction.annotation.EnableTransactionManagement;

@EnableTransactionManagement

@Configuration

@MapperScan("com.baomidou.cloud.service.*.mapper*")

public class MybatisPlusConfig {

@Bean

public PaginationInterceptor paginationInterceptor() {

PaginationInterceptor paginationInterceptor = new PaginationInterceptor();

// 开启 count 的 join 优化,只针对部分 left join

paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));

return paginationInterceptor;

}

}

分库组件mycat

分库分表在国内已经很火爆了,我项目里用的是mycat。

其实是基础架构层用的,项目里几乎看不出在使用分库或者使用了mycat。

有一点这里要说一下,就是使用mybatis plus整合mycat 查询的话,sessionFactory必须使用Mp提供的

com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean

类,否则可能会找不到mapper语句,因为mp的语句都是自己的代理生成的。

在mybatis用mysql的代码块_mybatis plus与mysql分库组件mycat的结合相关推荐

  1. 在mybatis用mysql的代码块_关于Mybatis 中使用Mysql存储过程的方法

    1.存储过程的简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用 ...

  2. mysql 存储过程代码_mysql存储过程语法与实例

    大纲: 创建.删除.调用. 声明变量.变量赋值.存储过程的入参 声明游标 声明异常处理器 判断 循环 使用心得 mybatis调用存储过程 一.创建.删除.调用 创建 DELIMITER $$ #修改 ...

  3. Javascript 好玩的10个代码块

    Javascript 好玩的10个代码块 1.单行写一个评级组件 "★★★★★☆☆☆☆☆".slice(5 – rate, 10 – rate) 2.Javascirpt错误处理的 ...

  4. mysql分页取数每一页生成xml_让MyBatis Generator产生的代码支持分页

    本文提供一种方法,让MyBatis Generator产生的代码支持分页,  适用于MySQL. 分析 如果要获取分页信息,使用MySQL语句,我们需要怎么做呢? select * from t_us ...

  5. MySQL存储过程之代码块、条件控制、迭代

    1,代码块 代码顺序 1,变量和条件声明    2,Cursor声明    3,Handler声明    4,程序代码   可以给代码块加lebel,这样END匹配比较直观,还可以用LEAVE语句来终 ...

  6. SpringBoot如何自动生成实体类和Dao层以及映射文件(mybatis generator 自动生成代码)

    一.首先添加自动生成代码插件 <!-- mybatis generator 自动生成代码插件 生成时解除注释 --><plugin><groupId>org.myb ...

  7. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    我们这一一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我 ...

  8. jsp中java代码无效_来杯咖啡,教你如何优雅的在java中统计代码块耗时

    推荐阅读: Sping源码+Redis+Nginx+MySQL等七篇实战技术文档,阿里大佬推荐 阿里内部:2020年全技术栈文档+PPT分享,(万粉总结,回馈粉丝) 在我们的实际开发中,多多少少会遇到 ...

  9. java中this_夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 #java中的构造方法 #构造方法简介 #构造方法实例 #例-1 #例-2 #java中的几种构造方法详解 #普通构造方法 #默认构造方法 #重载构造方法 #java子类构造方法调用父类构造方法 ...

最新文章

  1. 90 后女科学家,四年完成清华大学硕博连读,解决多个世界级难题
  2. 线上讲座丨罗杰:前沿——NISQ时代下的工程超导量子计算机
  3. 图解一次手动杀马过程
  4. Android控制手机振动相关
  5. rnn中文语音识别java_语音识别算法阅读之RNN-T-2018
  6. 电脑端二维码识别工具_电脑端自签工具更新,多功能软件一键签名
  7. Leaflet文档阅读笔记-Extending Leaflet: Handlers and Controls笔记
  8. 王国权辞任中国电信股份有限公司执行副总裁
  9. 最牛逼android上的图表库MpChart(二) 折线图
  10. 大学生学计算机笔记本配置,上大学该买什么笔记本?推荐给准大学生的几款本...
  11. ir2104作用,ir2104引脚功能和IR2103 请问有没有人可以通俗地讲解IR2104芯片引脚的功能?...
  12. FPGA丨RGB转Ycbcr算法实现
  13. 隧道炉检测,工业烤箱第三方检测
  14. 春运大幕开启 福建铁路预计发送旅客1575万人次
  15. Real-Time-Voice-Cloning(github声音克隆项目演示)
  16. T-SQL - 习题02_将数据表year|month|amount查询成year|m1|m2|m3|m4的样式
  17. 好消息!想入深户的伙伴们赶紧看过来!
  18. 黑盒测试之导入CVS文件之什么是CVS文件
  19. JavaScript 网页禁用屏蔽常用操作
  20. 信息无障碍产品研究举例

热门文章

  1. Java 8 –按值对HashMap进行升序和降序排序
  2. openshift_为Openshift + MongoDb应用程序编写验收测试
  3. java11+osgi_错误学习:Java + OSGi
  4. 系统测试集成测试单元测试_单元和集成测试的代码覆盖率
  5. 在Java 8 Lambda中创建自己的循环结构
  6. Java 8 Friday Goodies:Lambda和排序
  7. JOOQ事实:从JPA批注到JOOQ表映射
  8. Java并发执行器的懒惰开发人员简介
  9. JMX和Spring –第1部分
  10. 比较OpenDDR和WURFL