尚硅谷mybatis-plus代码集成
这些只是第一个项目的源码
创建数据表
CREATE TABLE USER(
id BIGINT(20) NOT NULL COMMENT '主键ID',
NAME VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
age INT(11) NULL DEFAULT NULL COMMENT '年龄',
email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (id)
);
INSERT INTO USER (id, NAME, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');
t_product表
CREATE TABLE t_product(
id BIGINT(20) NOT NULL COMMENT '主键ID',
NAME VARCHAR(30) NULL DEFAULT NULL COMMENT '商品名称', price INT(11) DEFAULT 0 COMMENT '价格',
VERSION INT(11) DEFAULT 0 COMMENT '乐观锁版本号', PRIMARY KEY (id)
);
INSERT INTO t_product (id, NAME, price) VALUES (1, '外星人笔记本', 100);
创建springboot项目环境搭建
下面的量不要复制
yml配置
spring:
# 配置数据源信息
datasource:
# 配置数据源类型
type: com.zaxxer.hikari.HikariDataSource
# 配置连接数据库的各个信息
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
username: root
password: 1234
# 配置mybatis-plus的日志信息
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 设置mybatis-plus的全局配置
global-config:
db-config:
# 设置实体类所对应的表的统一前缀
table-prefix: t_
# 设置统一的主键的生成策略
id-type: auto
type-aliases-package: com.atguigu.pojo
type-enums-package: com.atguigu.enums
user表
package com.atguigu.pojo;
import com.atguigu.enums.SexEnums;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
@Data
//设置实体类所对应的表名
//@TableName("t_name")
public class User {
//将属性所对应的字段指定为主键
//@TableId注解的value属性用于指定主键的字段
//@TableId注解的type属性设置主键的自增策略(数据库中必须设置主键自增),默认是雪花算法
@TableId(value = "uid")
private Long id;
@TableField("user_name")
private String name;
private Integer age;
private String email;
private SexEnums sex;
@TableLogic
private Integer isDeleted;
}
Product表
package com.atguigu.pojo;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;
@Data
public class Product {
private Long id;
private String name;
private Integer price;
@Version//乐观锁版本号字段
private Integer version;
}
MyBatisPlusConfig类
package com.atguigu.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//扫描mapper接口所在的包
@MapperScan("com.atguigu.mapper")
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//添加分页插件
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
//添加乐观锁
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}
MybatisplusApplication类
package com.atguigu;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.atguigu.mapper")
public class MybatisplusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisplusApplication.class, args);
}
}
UserMapper类
package com.atguigu.mapper;
import com.atguigu.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Map;
@Repository
public interface UserMapper extends BaseMapper<User> {
/**
* 根据id查询用户信息为map集合
* @return
* @param id
*/
Map<String,Object> selectById(Long id);
/**
* 通过年龄查询用户信息并分页
* @param page Mybatis-plus 所提供的分页对象,必须位于第一个参数的位置
* @param age
* @return
*/
Page<User> selectPageVo(@Param("page") Page<User> page,@Param("age") Integer age);
}
ProductMapper类
package com.atguigu.mapper;
import com.atguigu.pojo.Product;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;
@Repository
public interface ProductMapper extends BaseMapper<Product> {
}
UserService类
package com.atguigu.service;
import com.atguigu.pojo.User;
import com.baomidou.mybatisplus.extension.service.IService;
public interface UserService extends IService<User> {
}
UserServiceImpl类
package com.atguigu.service.Impl;
import com.atguigu.mapper.UserMapper;
import com.atguigu.pojo.User;
import com.atguigu.service.UserService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}
SexEnums类
package com.atguigu.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;
@Getter
public enum SexEnums {
MALE(1,"男"),
FEMALE(2,"女");
@EnumValue//将注解所标识的属性值存储到数据库中
private Integer sex;
private String sexName;
SexEnums(Integer sex, String sexName) {
this.sex = sex;
this.sexName = sexName;
}
}
测试
MyBatisPlusTest测试类
package com.atguigu;
import com.atguigu.mapper.UserMapper;
import com.atguigu.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@SpringBootTest
public class MyBatisPlusTest {
@Autowired(required = false)
private UserMapper userMapper;
@Test
public void testSelects(){
System.out.println(("----- 查询全部用户信息 ------"));
//通过条件构造器查询一个list集合,若没有条件,则可以设置null为参数
List<User> list = userMapper.selectList(null);
list.forEach(System.out::println);
}
@Test
public void testInsert(){
//实现新增用户信息
//INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
User user = new User();
//user.setId(100L);//手动设置id优先用
user.setName("张三");
user.setAge(66);
user.setEmail("zhangsan@atguigu.com");
int result = userMapper.insert(user);
System.out.println("result=>>"+result);
System.out.println("id=>>"+user.getId());
}
@Test
public void testDelete(){
//通过id删除用户信息
//DELETE FROM user WHERE id=?
/*int result = userMapper.deleteById(1523651190676201474L);
System.out.println("result=>>"+result);*/
//根据map集合中所设置的条件来进行删除
//DELETE FROM user WHERE name = ? AND age = ?
/*HashMap<String, Object> map = new HashMap<>();
map.put("name","张三");
map.put("age",66);
int result = userMapper.deleteByMap(map);
System.out.println("result=>>"+result);*/
//通过多个id实现批量删除
//DELETE FROM user WHERE id IN ( ? , ? , ? )
List<Long> list = Arrays.asList(1L, 2L, 3L);
int result = userMapper.deleteBatchIds(list);
System.out.println("result=>>"+result);
}
@Test
public void testUpdate(){
//修改用户信息
//UPDATE user SET name=?, email=? WHERE id=?
User user = new User();
user.setId(4L);
user.setName("李四");
user.setEmail("lisi@atguigu.com");
int result = userMapper.updateById(user);
System.out.println("result=>>"+result);
}
@Test
public void testSelect(){
//通过id查询用户信息
//SELECT id,name,age,email FROM user WHERE id=?
/*User user = userMapper.selectById(1L);
System.out.println(user);*/
//根据多个id查询多个用户信息
//SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )
/*List<Long> list = Arrays.asList(1L, 2L, 3L);
List<User> users = userMapper.selectBatchIds(list);
users.forEach(System.out::println);*/
//根据map集合中的条件查询用户信息(这里不是模糊查询)
//SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
/*HashMap<String, Object> map = new HashMap<>();
map.put("name","Jack");
map.put("age",20);
List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);*/
//查询全部用户
//SELECT id,name,age,email FROM user
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
@Test
public void myBatis(){
Map<String, Object> map = userMapper.selectById(1L);
System.out.println(map);
}
}
MyBatisPlusServiceTest测试类
package com.atguigu;
import com.atguigu.pojo.User;
import com.atguigu.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.ArrayList;
@SpringBootTest//(classes = MyBatisPlusServiceTest.class)
public class MyBatisPlusServiceTest {
@Autowired
private UserService userService;
@Test
public void testGetCount(){
//查询总记录数
//SELECT COUNT( * ) FROM user
long count = userService.count();
System.out.println("总记录数=>>>>"+count);
}
@Test
public void testInsertMore(){
//批量添加
//INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
ArrayList<User> list = new ArrayList<>();
for (int i = 1; i < 10; i++) {
User user = new User();
user.setName("你好"+i);
user.setAge(20+i);
user.setEmail("fdsfsdfsd");
list.add(user);
}
boolean b = userService.saveBatch(list);
System.out.println(b);
}
}
MyBatisPlusPluginsTest测试类
package com.atguigu;
import com.atguigu.mapper.ProductMapper;
import com.atguigu.mapper.UserMapper;
import com.atguigu.pojo.Product;
import com.atguigu.pojo.User;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MyBatisPlusPluginsTest {
@Autowired
private UserMapper userMapper;
@Autowired
private ProductMapper productMapper;
@Test
public void testPage(){
//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 LIMIT ?,?
Page<User> page = new Page<>(2, 3);
userMapper.selectPage(page,null);
System.out.println("<<<<当前页的数据>>>>");
System.out.println(page.getRecords());
System.out.println("总页数=" + page.getPages());
System.out.println("总记录数=" + page.getTotal());
System.out.println("是否有上一页=" + page.hasNext());
System.out.println("是否有下一页=" + page.hasPrevious());
}
@Test
public void testPageVo(){
Page<User> page = new Page<>(1, 3);
userMapper.selectPageVo(page,20);
System.out.println("<<<<当前页的数据>>>>");
System.out.println(page.getRecords());
System.out.println("总页数=" + page.getPages());
System.out.println("总记录数=" + page.getTotal());
System.out.println("是否有上一页=" + page.hasNext());
System.out.println("是否有下一页=" + page.hasPrevious());
}
@Test
public void testProduct01(){
//小李查询的价格
Product productLi = productMapper.selectById(1);
System.out.println("小李查询的商品价格>>>>"+productLi.getPrice());
//小王查询的价格
Product productWang = productMapper.selectById(1);
System.out.println("小王查询的商品价格>>>>"+productWang.getPrice());
//小李将商品 +50
productLi.setPrice(productLi.getPrice()+50);
productMapper.updateById(productLi);
//小王将商品 -30
productWang.setPrice(productWang.getPrice()-30);
int result = productMapper.updateById(productWang);
if (result == 0) {
//操作失败重试
Product productNew = productMapper.selectById(1);
productNew.setPrice(productNew.getPrice()-30);
productMapper.updateById(productNew);
}
//老板查询商品价格
Product productLaoban = productMapper.selectById(1);
System.out.println("老板查询的商品价格>>>>"+productLaoban.getPrice());
}
}
MyBatisPlusWrapperTest测试类
package com.atguigu;
import com.atguigu.mapper.UserMapper;
import com.atguigu.pojo.User;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.apache.ibatis.annotations.Update;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
import java.util.Map;
@SpringBootTest
public class MyBatisPlusWrapperTest {
@Autowired(required = false)
private UserMapper userMapper;
@Test
public void test01(){
//查询用户包含a,年龄在20~30之间,邮箱信息不为null的用户信息
//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (user_name LIKE ? AND age BETWEEN ? AND ? AND email IS NOT NULL)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("user_name","a")
.between("age",20,30)
.isNotNull("email");
List<User> list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
@Test
public void test02(){
//查询用户信息,按照年龄的降序排序,若年龄相同,则按照id排序
//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user ORDER BY age DESC,uid ASC
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("age")
.orderByAsc("uid");
List<User> list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
@Test
public void test03(){
//删除邮箱地址为null的用户信息
//DELETE FROM t_user WHERE (email IS NULL)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("email");
int result = userMapper.delete(queryWrapper);
System.out.println("result=>>>"+result);
}
@Test
public void test04(){
//将(年龄大于20并且用户名中包含a)或者邮箱为null的用户进行修改
//UPDATE t_user SET user_name=?, email=? WHERE is_deleted=0 AND (age > ? AND user_name LIKE ? OR email IS NULL)
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age",20)
.like("user_name","a")
.or()
.isNull("email");
User user = new User();
user.setName("流水水");
user.setEmail("nihao@qq.com");
int result = userMapper.update(user, queryWrapper);
System.out.println("result=>>>"+result);
}
@Test
public void test05(){
//将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
//lambda中的条件优先执行
//UPDATE t_user SET user_name=?, email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("user_name","a")
.and(i->i.gt("age",20).or().isNull("email"));
User user = new User();
user.setName("渣渣辉");
user.setEmail("nihao@qq.com");
int result = userMapper.update(user, queryWrapper);
System.out.println("result=>>>"+result);
}
@Test
public void test06(){
//查询用户的用户名、年龄、邮箱信息
//SELECT user_name,age,email FROM t_user WHERE is_deleted=0
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("user_name","age","email");
List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);
maps.forEach(System.out::println);
}
@Test
public void test07(){
//查询id小于等于5的用户信息
//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (uid IN (select uid from t_user where uid <=5))
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.inSql("uid","select uid from t_user where uid <=5");
List<User> list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
@Test
public void test08(){
//将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
//UPDATE t_user SET user_name=?,email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.like("user_name","a")
.and(i->i.gt("age",20).or().isNull("email"));
updateWrapper.set("user_name","小黑").set("email","abcd@qq.com");
int result = userMapper.update(null, updateWrapper);
System.out.println("result"+result);
}
@Test
public void test09(){
//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (age >= ? AND age <= ?)
String username = "a";
Integer ageBegin = null;
Integer ageEnd = 30;
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(username)) {
//isNotBlank判断某个字符串是否不为空,不为null,不为空白符
queryWrapper.like("user_name",username);
}
if (ageBegin != null){
queryWrapper.ge("age",ageBegin);
}
if (ageEnd != null) {
queryWrapper.le("age",ageEnd);
}
List<User> list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
@Test
public void test10(){
//简化test09
String username = "a";
Integer ageBegin = null;
Integer ageEnd = 30;
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(username),"user_name",username)
.ge(ageBegin != null,"age",ageBegin)
.le(ageEnd != null,"age",ageEnd);
List<User> list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
@Test
public void test11(){
//SELECT uid AS id,user_name AS name,age,email,is_deleted FROM t_user WHERE is_deleted=0 AND (user_name LIKE ? AND age <= ?)
String username = "a";
Integer ageBegin = null;
Integer ageEnd = 30;
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotBlank(username),User::getName,username)
.ge(ageBegin != null,User::getAge,ageBegin)
.le(ageEnd != null,User::getAge,ageEnd);
List<User> list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
@Test
public void test12(){
//将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息修改
//UPDATE t_user SET user_name=?,email=? WHERE is_deleted=0 AND (user_name LIKE ? AND (age > ? OR email IS NULL))
LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.like(User::getName,"a")
.and(i->i.gt(User::getAge,20).or().isNull(User::getEmail));
updateWrapper.set(User::getName,"小黑").set(User::getEmail,"abcd@qq.com");
int result = userMapper.update(null, updateWrapper);
System.out.println("result"+result);
}
}
MyBatisPlusEnumsTest测试类
package com.atguigu;
import com.atguigu.enums.SexEnums;
import com.atguigu.mapper.UserMapper;
import com.atguigu.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
public class MyBatisPlusEnumsTest {
@Autowired
private UserMapper userMapper;
@Test
public void test(){
User user = new User();
user.setName("admin");
user.setAge(33);
user.setSex(SexEnums.MALE);
int result = userMapper.insert(user);
System.out.println("result>>>"+result);
//INSERT INTO t_user ( user_name, age, sex ) VALUES ( ?, ?, ? )
}
}
FastAutoGeneratorTest测试版类
package com.atguigu;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
public class FastAutoGeneratorTest {
public static void main(String[] args) {
// 设置我们需要创建在哪的路径
String path = "E:\\java代码\\mybatisplus";
// 这里我是mysql8 5版本可以换成 jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false", "root", "1234")
.globalConfig(builder -> {
builder.author("atguigu") // 设置作者
// .enableSwagger() // 开启 swagger 模式
.fileOverride() // 覆盖已生成文件
.outputDir(path); // 指定输出目录
})
.packageConfig(builder -> {
builder.parent("com.atguigu") // 设置父包名
.moduleName("demo") // 设置父包模块名
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, path)); // 设置mapperXml生成路径
})
.strategyConfig(builder -> {
builder.addInclude("t_user") // 设置需要生成的表名
.addTablePrefix("t_", "c_"); // 设置过滤表前缀
}).templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker 引擎模板,默认的是Velocity引擎模板
.execute();
}
}