mybatisPlus项目CRUD步骤

mybatisPlus项目CRUD步骤

1.pom.xml引入相应的依赖
 <?xml version="1.0" encoding="UTF-8"?>
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.6.3</version>
         <relativePath/> <!-- lookup parent from repository -->
     </parent>
     <groupId>com.wyc</groupId>
     <artifactId>demo1</artifactId>
     <version>0.0.1-SNAPSHOT</version>
     <name>demo1</name>
     <description>Demo project for Spring Boot</description>
     <properties>
         <java.version>1.8</java.version>
     </properties>
     <dependencies>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
 
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <scope>runtime</scope>
         </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
 <!--mybatis-plus-->
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>
             <version>3.5.0</version>
         </dependency>
 <!--代码生成器  mybatis-plus-generator-->
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-generator</artifactId>
             <version>3.5.1</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
     </dependencies>
 
     <build>
         <plugins>
             <plugin>
                 <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
             </plugin>
         </plugins>
     </build>
 
 </project>
2. 在resources目录下写配置文件
  • 数据库连接配置

  • application.properties

 #mysql 配置
 spring.datasource.username=root
 spring.datasource.password=123456
 spring.datasource.url=jdbc:mysql://localhost:3306/mybatisplus?useSSL=false&useUnicode=true&characterEncoding=UTF-8
 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
 #配置日志
 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
 #配置逻辑删除
 mybatis-plus.global-config.db-config.logic-delete-value=1
 mybatis-plus.global-config.db-config.logic-not-delete-value=0
3. 创建相应的包

img

各个层的含义

img

4. 在config里面编写配置
  • MybatisPlusConfig
 package com.wyc.config;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 import com.baomidou.mybatisplus.core.injector.ISqlInjector;
 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;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 //扫描我们的mappe文件夹
 @MapperScan("com.wyc.mapper")
 @EnableTransactionManagement //事务的注解
 @Configuration  //配置类
 public class MyBatisPlusConfig {
     //注册乐观锁插件
     @Bean
     public MybatisPlusInterceptor mybatisPlusInterceptor() {
         MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
         mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
         return mybatisPlusInterceptor;
     }
     //分页插件
     @Bean
     public MybatisPlusInterceptor paginationInterceptor() {
         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
         interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
         return interceptor;
     }
 
     //添加分页
 //        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
 //        return mybatisPlusInterceptor;
 //}
 }
5. 在handler进行填充配置
  • MymetaObjectHandler
 package com.wyc.handler;
 
 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.reflection.MetaObject;
 import org.springframework.stereotype.Component;
 
 import java.util.Date;
 
 @Slf4j
 @Component  //一定不要忘记吧处理器加到ioc容器中!
 public class MymetaObjectHandler implements MetaObjectHandler {
     //插入时的填充策略
     @Override
     public void insertFill(MetaObject metaObject) {
         log.info("start insert fill...");
 //        default MetaObjectHandler setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
         this.setFieldValByName("createTime",new Date(),metaObject);
         this.setFieldValByName("updateTime",new Date(),metaObject);
 
 
     }
     //更新时的填充策略
     @Override
     public void updateFill(MetaObject metaObject) {
         log.info("start update fill...");
         this.setFieldValByName("updateTime",new Date(),metaObject);
 
     }
 }
 
 
6.在pojo层编写实体类
  • User

     package com.wyc.pojo;
     
     import com.baomidou.mybatisplus.annotation.*;
     import lombok.AllArgsConstructor;
     import lombok.Data;
     import lombok.NoArgsConstructor;
     
     import java.util.Date;
     
     
     @Data
     @AllArgsConstructor
     @NoArgsConstructor
     public class User {
         //主键自增
         @TableId(type = IdType.AUTO)
         private Long id;
         private String name;
         private Integer age;
         private String email;
         @TableLogic
         private Integer deleted;
         //乐观锁注解
         @Version
         private Integer version;
         //字段自动填充内容
         @TableField(fill = FieldFill.INSERT)
         private Date createTime;
         @TableField(fill = FieldFill.INSERT_UPDATE)
         private Date updateTime;
     }
     
     
    
  • 代码生成器配置

  • WycCode

     package com.wyc;
     
     import com.baomidou.mybatisplus.annotation.FieldFill;
     import com.baomidou.mybatisplus.annotation.IdType;
     import com.baomidou.mybatisplus.generator.AutoGenerator;
     import com.baomidou.mybatisplus.generator.FastAutoGenerator;
     import com.baomidou.mybatisplus.generator.config.GlobalConfig;
     import com.baomidou.mybatisplus.generator.config.OutputFile;
     import com.baomidou.mybatisplus.generator.config.rules.DateType;
     import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
     import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
     import com.baomidou.mybatisplus.generator.fill.Column;
     import com.baomidou.mybatisplus.generator.fill.Property;
     
     import java.util.Collections;
     
     //代码自动生成器
     public class WycCode {
         public static void main(String[] args) {
             //代码生成器
             FastAutoGenerator.create("jdbc:mysql://localhost:3306/mybatisplus?useSSL=false&useUnicode=true&characterEncoding=UTF-8", "root", "123456")
                     //全局配置
                     .globalConfig(builder -> {
                         builder.author("super-boom") // 设置作者
                                 .enableSwagger() // 开启 swagger 模式
                                 .fileOverride() // 覆盖已生成文件
                                 .outputDir("D:\\IDEAproject\\mybatisplus\\demo1\\src\\main\\java"); // 指定输出目录
                     })
                     //包配置
                     .packageConfig(builder -> {
                         builder.parent("com.wyc") // 设置父包名
                                 .moduleName("blog") // 设置父包模块名
                                 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D:\\IDEAproject\\mybatisplus\\demo1\\src\\main\\java\\com\\wyc")); // 设置mapperXml生成路径
                     })
     //                策略配置
                     .strategyConfig(builder -> {
                         builder.addInclude("t_simple") // 设置需要生成的表名
                                 .addTablePrefix("t_", "c_"); // 设置过滤表前缀
                     })
                     .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                     .execute();
         }
     }
     
     
    
    7.编写测试类test,进行测试
    1. Demo1ApplicationTests
     package com.wyc;
     
     import com.baomidou.mybatisplus.core.metadata.IPage;
     import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
     import com.wyc.mapper.UserMapper;
     import com.wyc.pojo.User;
     import org.junit.jupiter.api.Test;
     import org.springframework.beans.factory.annotation.Autowired;
     import org.springframework.boot.test.context.SpringBootTest;
     import org.springframework.core.annotation.MergedAnnotationPredicates;
     
     import javax.jws.soap.SOAPBinding;
     import java.util.Arrays;
     import java.util.HashMap;
     import java.util.List;
     import java.util.Map;
     
     @SpringBootTest
     class Demo1ApplicationTests {
         //继承了Basemapper,所有的方法都来自父类,我们也可以自己编写自己的扩展方法
         @Autowired
         private UserMapper userMapper;
     
     
         @Test
         void contextLoads() {
             //参数是一个wrapper,条件构造器,这里没有条件,就是null。
             //查询所有用户
             List <User> users = userMapper.selectList(null);
             users.forEach(System.out::println);
         }
         //测试插入
         @Test
         public void test(){
             User user = new User();
             user.setAge(88);
             user.setEmail("1542010896@qq.com");
             int result = userMapper.insert(user);
             System.out.println(result);
             System.out.println(user);
         }
         //测试更新
         @Test
         public void update(){
             User user = new User();
             user.setAge(88);
             user.setId(1489769008923234310L);
             user.setEmail("1542010896@qq.com");
             int update = userMapper.updateById(user);
             System.out.println(update);
             System.out.println(user);
     
         }
         @Test
         //测试乐观锁成功!
         public void testOptimisticLocker(){
             //1.查询用户信息
             User user = userMapper.selectById(1L);
             //2.修改用户信息
             user.setName("sss");
             user.setEmail("134qq.com");
             //3.执行更新操作
             userMapper.updateById(user);
     
         }
         @Test
         //测试乐观锁失败!
         public void testOptimisticLocker2(){
             //线程1
             User user = userMapper.selectById(1L);
             user.setName("ss");
             user.setEmail("131qq.com");
             //模拟另外一个线程执行了插队操作
             User user2 = userMapper.selectById(1L);
             user2.setName("rrr");
             user2.setEmail("135qq.com");
             userMapper.updateById(user2);
             userMapper.updateById(user);  //如果没有乐观锁,就会覆盖插队线程的值!
     
         }
         @Test
         //测试单个查询
         public void testSelectById(){
             User user = userMapper.selectById(1L);
             System.out.println("--------------------------------------");
             System.out.println(user);
         }
         @Test
         //测试批量用户
         public void testSelecBatchtById(){
             List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
             System.out.println("--------------------------------------");
             System.out.println(users);
         }
         @Test
         //测试条件查询 之一:map  还有warpper
         public void testSelectBatchtByIds(){
             HashMap<String, Object> map = new HashMap<>();
             //自定义要查询的条件
             map.put("name","rrr");
             List<User> users = userMapper.selectByMap(map);
             System.out.println("--------------------------------------");
             System.out.println(users);
     
         }
         @Test
         //测试分页查询
         public void testPage(){
             //参数一:当前页
             //参数二:页面大小
             Page<User> page = new Page<>(2,5);
             userMapper.selectPage(page,null);
             page.getRecords().forEach( System.out::println);
             System.out.println("=======================");
             System.out.println(page.getTotal()); //获得总页数
     
         }
         @Test
         //测试单个删除
         public void testDeleteById(){
           userMapper.deleteById(4L);
         }
         @Test
         //测试通过id批量删除
         public void testDeleteBatchById(){
             userMapper.deleteBatchIds(Arrays.asList(3,1489769008923234309L));
         }
         @Test
         //测试通过map批量删除
         public void testDeleteMapById(){ 
            HashMap<String, Object> map = new HashMap<>(); 
            map.put("name","h"); 
            userMapper.deleteByMap(map); 
        } 
    //    @Test 
    //    //测试逻辑删除 
    //    public void testDeleteBatch(){ 
    //        userMapper.deleteBatchIds() 
    //    } 
     
    } 
    
    
    2. Wappertest
     package com.wyc;
     
     import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
     import com.wyc.mapper.UserMapper;
     import com.wyc.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.List;
     import java.util.Map;
     
     @SpringBootTest
     public class Wappertest {
         @Autowired
         private UserMapper userMapper;
     
     
         @Test
         void contextLoads() {
               //查询name不为空的用户,并且邮箱不为空,年龄大于12
             QueryWrapper<User> wrapper = new QueryWrapper<>();
             wrapper.isNotNull("name")
                     .isNotNull("email")
                     .ge("age",12);
             userMapper.selectList(wrapper).forEach(System.out::println);
         }
         @Test
         void test(){
             //查询单个名字 用one
             QueryWrapper<User> wrapper = new QueryWrapper<>();
             wrapper.eq("name","abc");
             User user = userMapper.selectOne(wrapper);
             System.out.println(user);
         }
         @Test
         void test1(){
             //查询单个名字 用one
             QueryWrapper<User> wrapper = new QueryWrapper<>();
             wrapper.between("age",20,30);  //区间
             Long count = userMapper.selectCount(wrapper);
             System.out.println(count);
         }
         @Test
         void test2(){
             QueryWrapper<User> wrapper = new QueryWrapper<>();
             wrapper.notLike("name","a");
             List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
             maps.forEach(System.out::println);
         }
         @Test
         void test3(){
             QueryWrapper<User> wrapper = new QueryWrapper<>();
             wrapper.orderByDesc("id");
             List<User> users = userMapper.selectList(wrapper);
             System.out.println(users);
     
         }
     }
     
    
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值