这些只是第一个项目的源码
创建数据表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 BaseMapperProductMapper类{ Map selectById(Long id); Page selectPageVo(@Param("page") Page page,@Param("age") Integer age); }
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 BaseMapperUserService类{ }
package com.atguigu.service; import com.atguigu.pojo.User; import com.baomidou.mybatisplus.extension.service.IService; public interface UserService extends IServiceUserServiceImpl类{ }
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 ServiceImplSexEnums类implements UserService { }
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 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=?
//根据map集合中所设置的条件来进行删除
//DELETe FROM user WHERe name = ? AND age = ?
//通过多个id实现批量删除
//DELETe FROM user WHERe id IN ( ? , ? , ? )
List 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=?
//根据多个id查询多个用户信息
//SELECt id,name,age,email FROM user WHERe id IN ( ? , ? , ? )
//根据map集合中的条件查询用户信息(这里不是模糊查询)
//SELECt id,name,age,email FROM user WHERe name = ? AND age = ?
//查询全部用户
//SELECt id,name,age,email FROM user
List users = userMapper.selectList(null);
users.forEach(System.out::println);
}
@Test
public void myBatis(){
Map 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 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 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 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 queryWrapper = new QueryWrapper<>();
queryWrapper.like("user_name","a")
.between("age",20,30)
.isNotNull("email");
List 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 queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("age")
.orderByAsc("uid");
List list = userMapper.selectList(queryWrapper);
list.forEach(System.out::println);
}
@Test
public void test03(){
//删除邮箱地址为null的用户信息
//DELETE FROM t_user WHERe (email IS NULL)
QueryWrapper 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 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 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 queryWrapper = new QueryWrapper<>();
queryWrapper.select("user_name","age","email");
List
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();
}
}



