SpringBoot整合Mybaits-Plus

一、Mybatis-Plus:

      Mybatis-Plus(opens new window)(简称 MP)是一个的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

      官网地址:https://baomidou.com/pages/24112f/

二、Mybatis-Plus入门案例

    项目结构:

  2.1 导入jar包

  <dependencies>
        <!--引入jdbc包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入mysql包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--引入mybatisplus包,要删除mybatis的依赖,要不然造成冲突-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
    <!--引入junit包,--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency>
     <!--引入lombok包,-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

  2.2 application.yml配置文件

server:
  port: 8090
  servlet:
    #项目默认发布路径/根目录
    context-path: /

#SpringBoot数据源配置
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: 123456

#SpringBoot整合Mybatis-plus
mybatis-plus:
  #定义别名包 作用: 以后封装POJO对象时自动进行拼接
  type-aliases-package: com.zy.demo.pojo
  #引入mapper配置文件
  mapper-locations: classpath:/mapper/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

  2.3 实体类 pojo

package com.zy.demo.pojo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data  //动态添加get/set/tostring/equals等方法
@AllArgsConstructor //添加构造方法
@NoArgsConstructor // 添加无参构造
@Accessors(chain = true) //引入链式加载方法
@TableName("user")  //和表关联  引入表名
//规则:如果字段名称与属性一致(包含拖放规则),则可以省略不写

public class User implements Serializable{

        @TableId(type = IdType.AUTO) //IdType.AUTO  标识主键 id自增
        private Integer id;

        private String name;

        private Integer age;

        private String sex;
}

  2.4 UserDao.xml 文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
//namespace是mybatis映射文件的唯一标识,与接口对应
<mapper namespace="com.zy.demo.dao.UserDao">
//id是接口对应的方法,resultType 返回值结果类型
<select id="findAll" resultType="User"> select * from user </select> </mapper>

  2.5 接口 UserDao.java

package com.zy.demo.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zy.demo.pojo.User;
import java.util.List;
/*
mybatis的写法
//@Mapper //为接口创建代理的对象 交给spring管理
public interface UserMapper {
//查询全部用户数据 两种方法:注解或者xml方法
List<User> findAll();
}
*/
//在对应的dao接口上 加上BaseMapper<T> T是对应的pojo
public interface UserDao extends BaseMapper<User> {
List<User> findAll();
}

  2.6 在启动上加上@mapperScan注解,用于扫描dao文件夹

   2.7 使用测试类@Test注解进行测试

package com.zy.demo;

import com.zy.demo.dao.UserDao;
import com.zy.demo.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;

@SpringBootTest
class DemoApplicationTests {
    //动态注入mapper接口实例化对象
    @Autowired    //依赖注入  1、按照类型注入  2、按照名称注入
    //@Qualifier("注入属性的名称")
    private UserDao userDao;
    @Test
    public void TestMybatis(){
        final List<User> users = userDao.findAll();
        System.out.println(users);

    }
}

 结果:

 

三、CRUD操作

  插入数据操作:

@Test
    /*插入数据*/
    public void inset(){
         User user = new User();
         user.setName("金钱豹").setAge(10).setSex("男");
         userDao.insert(user);
    }

  查询数据操作:

  @Test
    /*查询 :
    * 1、根据id查询 id=5*/
    public void selectByid(){
         User user = userDao.selectById(5);
        System.out.println(user);

    }
    @Test
    /*查询:
    1、条件构造器 QueryWrapper:动态拼接where条件
            原则:根据对象不为null的属性,动态拼接where条件
       eg:查询name=沙悟净并且age=503的数据
    * */
    public void testSelect1(){
         User user = new User();
         user.setName("沙悟净").setAge(503);
         QueryWrapper queryWrapper = new QueryWrapper(user);
         User one = userDao.selectOne(queryWrapper);
        System.out.println(one);

    }
    @Test
    /*eg:查询age>18,并且sex=女的用户
      条件构造器的方法(常用的):
                函数名:eq    说明:= (等于)
                       gt         > (大于)
                       ge         >= (大于等于)
                       lt         < (小于)
                       le         <= (小于等于)
                       isNull     字段 is null
                       is Not Null   字段 is not null

    * */
    public void testSelect2(){
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.gt("age", 18);
         queryWrapper.eq("sex", "女");

        List<User> list = userDao.selectList(queryWrapper);
        System.out.println(list);

    }

    @Test
    /*eg:查询name中含有‘孙’字的用户,并且性别为女的

    *   模糊查询:关键词用"like"
                条件构造器:条件构造器.like()
                     含"孙”==》like
    *                以"孙"开头 ==》likeLeft
    *                以"孙"结尾 ==>likeRight
    *         sql查询:含"孙”==》like%孙%
    *                以"孙"开头 ==》孙%
    *                以"孙"结尾 ==>%孙
    * */
    public void testSelect3(){
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.like("name","孙");
         queryWrapper.eq("sex", "女");
         List<User> list1 = userDao.selectList(queryWrapper);
        System.out.println(list1);

    }
    @Test
    /*eg:
    *  查询age>20 并且name不为null 的用户,按照age进行降序排列*/
    public void testSelect4(){
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.gt("age", 20);
         queryWrapper.isNotNull("name");
         queryWrapper.orderByDesc("age");
         List<User> list2 = userDao.selectList(queryWrapper);
        System.out.println(list2);

    }
    @Test
    /*1
    * 查询用户的信息,有2个参数,但是这个2个参数有可能为null  ==》使用动态查询
    * sql查询的:<if test="参数1 != null && 参数2 !=null">sql语句</if>
    * 在条件构造器中,使用的是condition,当condition为什么的时候,条件为true时,条件才会拼接
    * 源码:public Children gt(boolean condition,
                   R column,
                   Object val)
    * */
    public void testSelect5(){
         User user = new User();
         user.setAge(150);
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.gt(user.getAge()!=null && user.getAge()>0, "age", user.getAge());
         queryWrapper.gt(!"".equals(user.getSex())&&user.getSex() !=null, "sex",user.getSex());
         List<User> list3 = userDao.selectList(queryWrapper);
        System.out.println(list3);

    }
    @Test
    /*查询用户id为1,8,10,45,7的信息
    * sql查询:select * from user where id in (1,8,10,45,7)
    * */
    public void testSelect6(){
       /*规则  :如果数组需要用转换集合则使用包装类型的
       * 在这里,我们使用包装类型的,因为包装类型有方法,而基本类型没有,*/
        Integer[] ids={1,8,10,45,7};
        //将数组转化为集合 使用工具类 Arrays
         List<Integer> asList = Arrays.asList(ids);

         //第一种方法
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.in("id", asList);
         List<User> list4 = userDao.selectList(queryWrapper);
        System.out.println(list4);

        //第二种方法
         List<User> ids1 = userDao.selectBatchIds(asList);
        System.out.println(ids1);

    }

  删除数据操作:

  @Test
    /*删除name为null的数据*/
    public void delete(){
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.isNull("name");
        userDao.delete(queryWrapper);
        System.out.println("删除成功");
    }

  更新数据操作:

@Test
    /*更新操作
    * 将id=7的用户名称改为mybatisPlus age=10 sex="其他"
    * */
    public void updateByid(){
         User user = new User();
         user.setId(7).setName("mybatisPlus").setAge(10).setSex("其他");
         userDao.updateById(user);
    }


    @Test
    /*
    * 将name=”小乔“的数据改为age=18,sex="无"
    * */
    public void update(){
         User user = new User();
         user.setSex("无").setAge(18);
         QueryWrapper queryWrapper = new QueryWrapper();
         queryWrapper.eq("name", "小乔");
         userDao.update(user, queryWrapper);
        System.out.println("更新成功!");
    }
    
posted @ 2022-04-20 15:52  年华只余一地悲凉  阅读(161)  评论(0编辑  收藏  举报
/*粒子线条,鼠标移动会以鼠标为中心吸附的特效*/