SpringBoot中引入MyBatisPlus的常规操作

网友投稿 434 2022-11-15


SpringBoot中引入MyBatisPlus的常规操作

一、前言

近来参与一个电力大数据项目,开发小组决定在 DAO 层使用 MyBatisPlus

——国产、新颖、强大、轻量。

官方API地址:http://mp.baomidou.com/#/?id=%E7%AE%80%E4%BB%8B

二、通用 CRUD

通过本项目(表少,数据量大,非常适合)

发现 MyBatisPlus 在 单表CRUD 方面

比原来的的 MyBatis 的有着绝对优势:

VS

PS

MyBatis

MyBatisPlus

代码生成器

数据库有些表的字段发声改变

① 再次运行逆向工程的代码 ②生成一堆代码,还最好不要动它

①只需要修改 Bean 即可(反射实现的)② 生成少量的代码,可以人为新增内容

CRUD

无规律特殊时

手动写 Mapper 层 sql

通过条件构造器,实现零 sql !

下面列出本文相关代码,其他代码如 Druid数据源配置、MyBatisPlus分页配置、sql输出配置,可以到 github 上查看:

https://github.com/larger5/SpringBoot_MybatisPlus.git

package com.cun.plus;

import com.baomidou.mybatisplus.mapper.Wrapper;

import com.baomidou.mybatisplus.plugins.Page;

import com.cun.plus.entity.User;

import com.cun.plus.mapper.UserMapper;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.test.context.junit4.SpringRunner;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

@RunWith(SpringRunner.class)

@SpringBootTest

public class PlusApplicationTests {

@Autowired

private UserMapper userMapper;

/**

* 1、增加 insert

*/

@Test

public void insertTest() {

User user = new User();

user.setUsername("绿茶");

user.setPassword("lvcha");

// 返回对数据库影响操作数:1

Integer insert1 = userMapper.insert(user); // 非空属性才会出现在 sql 中

// 可以立刻获取插入新记录的 id

System.out.println(user.getId());

// 同上

Integer insert2 = userMapper.insertAllColumn(user); // 所有属性都会出现在 sql 中

// 同上

SystemdBdolzy.out.println(user.getId());

}

/**

* 2、修改 update

*/

@Test

public void updateTest() {

User user = new User();

user.setId(45);

user.setUsername("cun");

//user.setPassword("666");

// 返回对数据库影响操作数:1

Integer integer1 = userMapper.updateById(user); // 属性空则不修改

System.out.println(integer1);

// 同上

Integer integer2 = userMapper.updateAllColumnById(user); // 属性空则字段空

System.out.println(integer2);

}

/**

* 3、查询 select

*/

@Test

public void selectTest() {

// 根据id 查询一条记录

User user = userMapper.selectById(46);

System.out.println(user.getUsername());

ArrayList idList = new ArrayList<>();

idList.add(61);

dBdolzy idList.add(63);

// 根据多个id 批量查询

List users = userMapper.selectBatchIds(idList);

System.out.println(users.get(0).getUsername() + users.get(1).getUsername());

User user1 = new User();

user1.setId(61);

user1.setUsername("cun");

// 根据多个条件返回一个对象,若有多个符合条件的记录则将报错

User user2 = userMapper.selectOne(user1);

System.out.println(user2.getPassword());

// 根据多个条件返回对象组,注意Map 中的key 必须和数据库表字段一直

HashMap columnMap = new HashMap<>();

columnMap.put("username", "cun");

List users1 = userMapper.selectByMap(columnMap);

System.out.println(users1.size());

}

/**

* 4、删除 delete

*/

@Test

public void deleteTest() {

// 根据一个id 删除,返回对数据库影响操作数:1

Integer integer1 = userMapper.delethttp://eById(65);// 根据id删除一条记录

System.out.println(integer1);

ArrayList idList = new ArrayList<>(); // 根据id集合批量删除

idList.add(64);

idList.add(66);

// 根据多个id 批量删除,返回对数据库影响操作数:2

Integer integer2 = userMapper.deleteBatchIds(idList);

System.out.println(integer2);

HashMap columnMap = new HashMap<>();

columnMap.put("username", "cun");

// 根据多个条件删除,返回对数据库影响操作数

Integer integer3 = userMapper.deleteByMap(columnMap);

System.out.println(integer3);

}

/**

* 5、伪分页(获取全部数据再分页)

*/

@Test

public void pageTest() {

// 分页查询,注意如果设置了 PaginationInterceptor 分页插件则会报错,

List users2 = userMapper.selectPage(new Page(1, 2), null); //当前页、每页大小

System.out.println(users2.get(0).getUsername() + users2.get(1).getUsername());

System.out.println(users2.size());

}

/**

* 6、条件构造器

*/

@Test

public void wrapperTest(){

List users = userMapper.selectList(new EntityWrapper()

.eq("username", "linhongcun")

);

System.out.println(users.size());

}

}

三、代码生成器

上述的代码通过 MyBatisPlsus 自动写好的通用 Mapper 层,在 Service 层里边写相关的业务逻辑

其实,使用了 MyBatisPlus 代码生成器,自动生成 Entity、Dao、Service、Controller 层!

我们通常是在 Controller 层里边写相关的业务逻辑,使用的方法和 Mapper 的类似。

package com.cun.plus;

import com.baomidou.mybatisplus.enums.IdType;

import com.baomidou.mybatisplus.generator.AutoGenerator;

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.DbType;

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

public class MpG {

public static void main(String[] args) {

//1. 全局配置

GlobalConfig config = new GlobalConfig();

config.setActiveRecord(false) // 是否支持AR模式

.setOutputDir("C:\\data\\mp") // 生成路径

.setFileOverride(true) // 文件覆盖

.setIdType(IdType.AUTO) // 主键策略

.setServiceName("%sService") // 设置生成的service接口的名字的首字母是否为I

// IUserService

.setBaseResultMap(true)

.setBaseColumnList(true);

//2. 数据源配置

DataSourceConfig dsConfig = new DataSourceConfig();

dsConfig.setDbType(DbType.mysql) // 设置数据库类型

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

.setUrl("jdbc:mysql://120.79.197.130:3307/testspring?useSSL=true&verifyServerCertificate=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8")

.setUsername("root")

.setPassword("123");

//3. 策略配置

StrategyConfig stConfig = new StrategyConfig();

stConfig.setCapitalMode(true) //全局大写命名

.setDbColumnUnderline(true) // 指定表名 字段名是否使用下划线

.setNaming(NamingStrategy.underline_to_camel) // 数据库表映射到实体的命名策略

.setTablePrefix("tb_")

.setInclude("tb_user"); // 生成的表

//4. 包名策略配置

PackageConfig pkConfig = new PackageConfig();

pkConfig.setParent("com.cun.plus")

.setMapper("mapper")

.setService("service")

.setController("controller")

.setEntity("entity")

.setXml("mapper");

//5. 整合配置

AutoGenerator ag = new AutoGenerator();

ag.setGlobalConfig(config)

.setDataSource(dsConfig)

.setStrategy(stConfig)

.setPackageInfo(pkConfig);

//6. 执行

ag.execute();

}

}

四、相关依赖

// 选择 freemarker 引擎,默认 Veloctiy

// mpg.setTemplateEngine(new FreemarkerTemplateEngine());

com.baomidou

mybatis-plus-boot-starter

2.3

org.apache.velocity

velocity-engine-core

2.0

五、其他

使用 MyBatis 的一个弊端,就是得依靠使用代码生成器,使得逻辑基本写在 controller 层,而不是 service 层,不合时宜。

多表+分页,详见:

最简单的 MyBatis Plus 的多表联接、分页查询实现方法


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Mybatis如何使用注解优化代码
下一篇:IDEA java出现无效的源发行版14解决方案
相关文章

 发表评论

暂时没有评论,来抢沙发吧~