数据库com.github.pagehelper pagehelper 5.2.0 mysql mysql-connector-java org.projectlombok lombok com.baomidou mybatis-plus-boot-starter 3.4.2 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test org.junit.jupiter junit-jupiter-engine test org.junit.vintage junit-vintage-engine test org.junit.platform junit-platform-launcher test junit junit test
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` bigint(0) NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名', `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码', `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮箱', `age` tinyint(0) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 19 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; SET FOREIGN_KEY_CHECKS = 1;结构 基本配置 yml配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/iot?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: bcy123
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
实体类
package mpTest.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Long id;
private String name;
private String password;
private String email;
private Integer age;
}
启动类
package mpTest;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("mpTest.mapper")
public class StartApplication {
public static void main(String[] args) {
SpringApplication.run(StartApplication.class, args);
}
}
接口
package mpTest.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import mpTest.entity.User; import org.springframework.stereotype.Repository; //在对应的Mapper 接口上 基础基本的 BaseMapper测试查询 查询全部T是对应的pojo类 @Repository //告诉容器你是持久层的 @Repository是spring提供的注释,能够将该类注册成Bean public interface UserMapper extends BaseMapper { //所有的crud都编写完成了 }
@Test
public void testSelectList() {
System.out.println(("----- selectAll method test 测试查询所有用户方法 ------"));
//selectList 的参数wrapper 是条件构造器,可以先写null
List userList = userMapper.selectList(null);
//forEach 的参数是 Consumer类型的 语法糖
System.out.println("----------test--------------");
userList.forEach(System.out::println);
}
分页查询
- 配置类
package mpTest.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.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//@MapperScan("**.mapper") //官方文档说要加MapperScan
//主要是扫描到mapper包下的接口交给spring管理,我这里在启动类上添加过了,这里就不加了
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());//创建乐观锁拦截器 OptimisticLockerInnerInterceptor
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); //插件分页拦截器,我的是mysql
return mybatisPlusInterceptor;
}
}
- 测试类
//测试分页查询
@Test
public void testPage() {
Page page = new Page<>(1,5); //开启拦截器后,会注册一个page对象 当前页,每页条数
//方法源码: > P selectPage(P page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
userMapper.selectPage(page,null); //分页查询
page.getRecords().forEach(System.out::println); //获取分页后的数据 打印
System.out.println(page.getTotal()); //获取记录总数
}
测试插入
@Test
public void testInsert() {
User user = new User();
user.setAge(12);
user.setName("说");
user.setPassword("78797777878a");
System.out.println("----------test--------------");
int result = userMapper.insert(user);
System.out.println("result = " + result);
System.out.println("user = " + user);
}
测试更新
更新
//更新测试
@Test
public void testUpdateByID() {
User user = new User();
user.setId(18L);
user.setName("小小");
user.setAge(18);//这一行后加
int i = userMapper.updateById(user);//受影响的行数,参数是一个user不是id,点击看源码
System.out.println("i = " + i);
}
自动更新时间
1、 通过注解
//字段添加填充内容 @TableField(fill = FieldFill.INSERT ,value = "create_time") private LocalDateTime createTime; @TableField(fill = FieldFill.INSERT_UPDATE ,value = "update_time") private LocalDateTime updateTime;
2、 编写处理器来处理这个注解
@Slf4j //日志
@Component//以组件的形式把这个处理器注册到IOC容器中
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时启动 第三个参数 LocalDateTime 一定要和 createTime成员变量的值的类型一致,不然是null 如果是date就都设置date
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
}
//更新时候启动
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
}
}
测试删除
//删除测试
@Test
public void testDeleteById(){
userMapper.deleteById(1525072816282255362L);
// userMapper.delete(null); //全部删除
}
QueryWrapper
条件查询
@Test
public void contextLoads() {
//----------查询多个
//查询一个复杂的,比如查询用户name、邮箱不为空,年龄大于20的用户
QueryWrapper wrapper = new QueryWrapper<>(); //首先新建一个 QueryWrapper
//链式编程 添加查询条件
wrapper.isNotNull("name")
.like("email","%@163.com")
.ge("age",12);
userMapper.selectList(wrapper).forEach(System.out::println);
//----------查询单个
wrapper.isNull("password");
User user = userMapper.selectOne(wrapper); //出现多个结果会报错,查询一个
System.out.println("user = " + user);
}
模糊删除
@Test
public void test3() {
//模糊查询
QueryWrapper wrapper = new QueryWrapper<>();
wrapper.like("name",9) // 名字中 存在 99
.notLike("name",6) // 名字中 不存在 6
.likeRight("email","s") // 邮箱 最左边是2 2%
.likeLeft("email","m"); // 邮箱 最右边是m %m
List
参考
Mybatis-Plus详解_有头发还能学的博客-CSDN博客_mybatis-plus



