SpringBoot整合MybatisPlus

SpringBoot整合MybatisPlus

mybatisplus ,是国人开发的, 极大地简化了增删改查的操作,并且减少了sql语句的编写.

导入maven依赖

  1. pom.xml

    1. <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.4.2</version>
      </dependency>
      
      <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>8.0.25</version>
      </dependency>
      
    2. 因为要操作数据库,所以还要将数据库驱动包导入.

创建数据库表

  1. DROP TABLE IF EXISTS `person2`;
    CREATE TABLE `person2`  (
      `id` int(0) NOT NULL AUTO_INCREMENT,
      `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
      `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
      `phone` bigint(0) NULL DEFAULT NULL,
      PRIMARY KEY (`id`) USING BTREE
    ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
    
    SET FOREIGN_KEY_CHECKS = 1;
    

创建完成后编写实体类

  1. @NoArgsConstructor// 创建无参的构造方法
    @AllArgsConstructor// 创建满参的构造方法
    @Accessors(chain = true)// 使用链式方法
    @Data// 重写toString方法等方法
    @TableName("person2")// 对应表名
    public class Person {
    
        //主键有Tableid注解 type是主键自增规则
        @TableId(value = "id", type = IdType.AUTO)
        private Integer id;
        @TableField("username")
        private String username;
    
        @TableField("phone")
        private long phone;
    
        @TableField("password")
        private String password;
    
    }
    

编写dao

  1. @Repository
    public interface PersonDao extends BaseMapper<Person> {}
    
    
  2. 这里直接击沉BaseMapper即可,BaseMapper里面就有我们常用的方法!

  3. 如果我们想要自定义查询就需要这么写

    1. @Repository
      public interface PersonDao extends BaseMapper<Person> {
          /**
           * 按照姓名查询
           * @param username
           * @return
           */
          @Select("select * from person2 where username = #{username}")
          List<Person> selectByUsername(String username);
      }
      
      

编写service

  1. 这里了就用增删改查举例

  2. @Service
    public class PersonService {
    
        @Resource
        private PersonDao personDao;
    
        /**
         * 添加person
         *
         * @param person
         * @return
         */
        public Object addPerson(Person person) {
            return personDao.insert(person);
        }
    
    
        public Object updPerson(Person person) {
            //使用  会自动根据id把数据库中的信息进行修改为指定值
    //        person.setId(1);
    //        person.setPassword("setValue");
    //        person.setUsername("setUsername");
    //        person.setPhone(1873374979);
            return personDao.updateById(person);
        }
    
        public Object delPerosn(Integer id) {
            return personDao.deleteById(id);
        }
    
        public Object findAll() {
            return personDao.selectList(null);
        }
    
         /**
         * 只有这个是我们自己定义的
         *
         * @param username
         * @return object
         */
        public Object findByName(String username) {
            return personDao.selectByUsername(username);
        }
    }
    

编写Controller

  1. @RestController
    public class TestCtrl {
    
    
        @Resource
        private PersonService ps;
    
        @RequestMapping("/findAll")
        public Object findAll() {
            return new Result("ok", ps.findAll());
        }
    
        @RequestMapping("/findByName/{username}")
        public Object findByName(@PathVariable(value = "username") String username) {
            return new Result("ok", ps.findByName(username));
        }
        @RequestMapping("/del/{id}")
        public Object delPerson(@PathVariable(value = "id") Integer id ) {
            return new Result("ok", ps.delPerosn(id));
        }
    
        @RequestMapping("/add")
        public Object addPerson(Person person) {
            return new Result("ok", ps.addPerson(person));
        }
        @RequestMapping("/upd")
        public Object updPerson(Person person) {
            return new Result("ok", ps.updPerson(person));
        }
    }
    
    
  2. 每个方法最后返回的 new Result(); 是自己定义的返回值类

    1. @Data
      public class Result {
      
          private Integer code;
          private String message;
          private Object data;
      
          public Result(String message, Object data) {
              this.code = 200;
              this.message = message;
              this.data = data;
          }
      
          public Result(String message) {
              this.code = 4444;
              this.message = message;
          }
      }
      
  3. 编写完成后一定不要忘了扫描dao !!!

  4. 在启动类上添加注解@MapperScan

    1. @SpringBootApplication
      //这个不能忘了加 这就是dao接口所在的包
      @MapperScan("com.mucd.mps.dao")
      public class MpsApplication {
          public static void main(String[] args) {
              SpringApplication.run(MpsApplication.class, args);
          }
      
      }
      
      

自定义查询

  1. 自定义查询,这里是重要的部分.

  2. 自定义查询

    1. 按照ID查询

      1. /**
             * 按照Id进行查询
             * @param id
             * @return
             */
        public Object findById(Integer id) {
            Person person = personDao.selectById(id);
            return personDao;
        }
        
      2. 因为id是唯一的, 查出来的的是一条数据,所以返回值是Person类型。

    2. 按照 username查询

      1. /**
             * 按照map参数查询
             * @param username
             * @return
             */
        public Object findByUserName(String username) {
            Map<String,Object> map = new HashMap<>();
            map.put("username",username);
            List<Person> people = personDao.selectByMap(map);
            return people;
        }
        
      2. 这里使用map.put("列名","要查询的值") ,按照map中的数据作为条件来进行查询。也可以put多个条件作为查询条件。

      3. public Object findByUserName(String username String phone) {
            Map<String,Object> map = new HashMap<>();
            map.put("username",username);
            map.put("phone",phone);
            List<Person> people = personDao.selectByMap(map);
            return people;
        }
        
      4. 这里返回的是一组数据,如果只需要一个数据使用selectOne(条件)

      5. public Object findByUserName(String username String phone) {
            Map<String,Object> map = new HashMap<>();
            map.put("username",username);
            map.put("phone",phone);
            Person people = personDao.selectOne(map);
            return people;
        }
        
    3. 模糊查询

      1. 在我们需要完成搜索数据功能的时候经常会使用的模糊查询。

      2. /**
             * 模糊查询
             * @param username
             * @return
             */
        public Object findByLike(String username){
            QueryWrapper<Person> queryWrap = new QueryWrapper<Person>().like("username", username);
                List<Person> likeList = personDao.selectList(queryWrap);
                return likeList;
        }
        
      3. 使用selectList()方法,参数传入我们需要查询的条件。

      4. //Compare<Children, R>接口
        default Children like(R column, Object val) {
            return this.like(true, column, val);
        }
        
      5. 可以看到这里第一个参数需要的是列名,第二个参数是要查找的参数

      6. 模糊查询查出来的可能是多个数据,所以返回值是集合类型。

    4. 排序查询

      1. /**
             * 排序查询
             * 正序 or 倒叙
             * @return obj
             */
        public Object findByOrder(){
            QueryWrapper<Person> asc = new QueryWrapper<Person>().orderByAsc("id");
            QueryWrapper<Person> desc = new QueryWrapper<Person>().orderByDesc("id");
        
            List<Person> people = personDao.selectList(asc);
            List<Person> desc2 = personDao.selectList(desc);
            System.out.println("desc2 = " + desc2);
            return people;
        }
        
      2. 将一组数据按照指定的正序或者是倒叙查询出来。

    5. 条件查询

      1.  QueryWrapper<Person> eq = new QueryWrapper<Person>().eq("username", "admin");
                QueryWrapper<Person> le = new QueryWrapper<Person>().le("id", 3);
                QueryWrapper<Person> lt = new QueryWrapper<Person>().lt("id", 2);
                QueryWrapper<Person> ge = new QueryWrapper<Person>().ge("id", 2);
                QueryWrapper<Person> gt = new QueryWrapper<Person>().gt("id", 2);
                QueryWrapper<Person> ne = new QueryWrapper<Person>().ne("id", 2);
        
      2.  public Object findByTiaoJian() {
             //eq =
             QueryWrapper<Person> eq = new QueryWrapper<Person>().eq("username", "admin");
             //le <=
             QueryWrapper<Person> le = new QueryWrapper<Person>().le("id", 3);
             //lt <
             QueryWrapper<Person> lt = new QueryWrapper<Person>().lt("id", 2);
             //ge >=
             QueryWrapper<Person> ge = new QueryWrapper<Person>().ge("id", 2);
             //gt >
             QueryWrapper<Person> gt = new QueryWrapper<Person>().gt("id", 2);
             //ne !=
             QueryWrapper<Person> ne = new QueryWrapper<Person>().ne("id", 2);
             //查找值不为null
             QueryWrapper<Object> isNotNull = new QueryWrapper<>().isNotNull("username");
             //查找值为null
             QueryWrapper<Object> isNull = new QueryWrapper<>().isNull("username");
         
             //between 在范围之间,包含边界值
             QueryWrapper<Object> between = new QueryWrapper<>().between("id", 1, 10);
         
             //notBetween 在范围之外,不包含边界值
             QueryWrapper<Object> notBentween = new QueryWrapper<>().notBetween("id", 1, 10);
         
         
             //在selectList中添加查询条件即可
             List<Person> people = personDao.selectList(eq);
         
             return people;
         }
         
        
      3. 使用QueryWrapper编写查询条件,编写完成将参数传到selectList()

    6. 链式调用

      1. 在实际使用中,查询只有一个条件是远远不够用的,mybatis-plus也提供了链式调用。

      2. /**
             * 链式调用
             *
             * @return obj
             */
        public Object chain() {
            //条件
            QueryWrapper<Person> chain = new QueryWrapper<Person>().like("username","adm").eq("phone","18733741939").orderByAsc("id");
        
            return personDao.selectList(chain);
        }
        
      3. 在实际开发中可以根据自己的需求来写条件

    time 2022-4-1 09:13

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值