当前位置:   article > 正文

springboot-mybatisplus注解与配置类方法整合_mybatisplus springboot yml配置

mybatisplus springboot yml配置

springboot-mybatisplus

1.导入mybatisplus依赖

<!--mybatisplus依赖-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>
<!--druid连接池依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.2.11</version>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2.application.yml文件配置

#设置数据源
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/4031
    username: root
    password: 123456

#设置下划线命名改为小驼峰命名
mybatis:
  configuration:
    map-underscore-to-camel-case: true

#设置访问端口号
server:
  port: 80
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

3.设置dao层接口和代理对象

//该注解设置代理对象
@Mapper   //继承BaseMapper<泛型>抽象类
public interface UserDao extends BaseMapper<User> {
}
  • 1
  • 2
  • 3
  • 4

4.CRUD标准开发

4.1实体类

public class User {
    //对应数据库主键的属性必须名为id或者加上@TableId表示
    @TableId
    private Long userId;
    private String userName;
    private Double userBalance;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4.2业务层代码

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    public Result queryUser() {
        //BaseMapper<泛型>抽象类自带的查询方法
        List<User> users = userDao.selectList(null);
        int code=users==null?Code.QUERY_ERR:Code.QUERY_OK;
        return new Result(code,null,users);
    }

    @Override
    public Result getUserById(Integer userId) {
        User user = userDao.selectById(userId);
        int code= user==null?Code.QUERY_ERR:Code.QUERY_OK;
        return new Result(code,null,user);
    }

    @Override
    public Result saveUser(User user) {
        //BaseMapper<泛型>抽象类自带的添加方法
        int insert = userDao.insert(user);
        int code= insert>0?Code.SAVE_OK:Code.SAVE_ERR;
        return new Result(code,null,insert);
    }

    @Override
    public Result updateUser(User user) {
        //BaseMapper<泛型>抽象类自带的修改方法
        int update = userDao.updateById(user);
        int code= update>0?Code.UPDATE_OK:Code.UPDATE_ERR;
        return new Result(code,null,update);
    }

    @Override
    public Result deleteUser(Integer userId) {
        //BaseMapper<泛型>抽象类自带的删除方法
        int i = userDao.deleteById(userId);
        int code= i>0?Code.DELETE_OK:Code.DELETE_ERR;
        return new Result(code,null,i);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

4.3控制层代码

@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping
    public Result queryUser() {
        return userService.queryUser();
    }

    @GetMapping("/{id}")
    public Result getUserById(@PathVariable Integer id) {
        return userService.getUserById(id);
    }

    @PostMapping
    public Result saveUser(@RequestBody User user) {
        return userService.saveUser(user);
    }

    @PutMapping
    public Result updateUser(@RequestBody User user){
        return userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public Result deleteUser(@PathVariable Integer id){
        return userService.deleteUser(id);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

5.特殊查询

5.1分页查询

5.1.1业务层代码
public Result pageSelect(Integer current,Integer size) {
    IPage page=new Page<>(current,size);
    IPage<User> page1 = userDao.selectPage(page,null);
    int code=page1.getRecords()==null?Code.QUERY_ERR:Code.QUERY_OK;
    return new Result(code,null,page1);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
5.1.2配置分页拦截器
@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor(){
        MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

自带分页查询的原理是在基本查询时进行拦截并进行切面编程加入limit语句实现分页

5.1.3控制层代码
@GetMapping("/{current}/{size}")
public Result pageUser(@PathVariable("current") Integer current,
                       @PathVariable("size") Integer size){
    return userService.pageSelect(current,size);
}
  • 1
  • 2
  • 3
  • 4
  • 5

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HYMfI7h7-1663767549762)(C:\Users\冯瑞涛\AppData\Roaming\Typora\typora-user-images\1663205836197.png)]

​ 访问和返回方法

关闭多余日志在 application.yml文件中写入

spring:
  main:  #关闭spring日志
    banner-mode: off
    
mybatis-plus:
  global-config:   #关闭mybatis-plus日志
    banner: false
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

5.2条件查询

创建Wrapper接口的实现类对象来给查询加条件(以下代码为业务层代码)

第一个实现类(QueryWrapper)写法⬇

@Override
public Result conditionSelect(User user) {
     //QueryWrapper对象常规用法
    QueryWrapper<User> wrapper =new QueryWrapper<>();
    wrapper.lt("userBalance",50);
    wrapper.gt("userBalance",100);
    
    List<User> users = userDao.selectList(wrapper);
    int code=users==null?Code.QUERY_ERR:Code.QUERY_OK;
    return new Result(code,null,users);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

第二种写法(lambda写法)⬇

public Result conditionSelect(User user) {
    // QueryWrapper lambda用法
    QueryWrapper<User> wrapper =new QueryWrapper<>();
    wrapper.lambda().lt(User::getUserBalance,50);
    wrapper.lambda().gt(User::getUserBalance,100);
    
    List<User> users = userDao.selectList(wrapper);
    int code=users==null?Code.QUERY_ERR:Code.QUERY_OK;
    return new Result(code,null,users);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

第二个实现类(LambdaQueryWrapper)写法⬇

 public Result conditionSelect(User user) {
     //可替代上方lambda写法
        LambdaQueryWrapper<User> wrapper=new LambdaQueryWrapper();
        wrapper.lt(User::getUserBalance,100);
        wrapper.gt(User::getUserBalance,100);
     
        List<User> users = userDao.selectList(wrapper);
        int code=users==null?Code.QUERY_ERR:Code.QUERY_OK;
        return new Result(code,null,users);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

and条件

//直接写入两相反条件即可
wrapper.lt(User::getUserBalance,100);
wrapper.gt(User::getUserBalance,100);
//连接写法
wrapper.lt(User::getUserBalance,100).gt(User::getUserBalance,100);
  • 1
  • 2
  • 3
  • 4
  • 5

or条件

wrapper.lt(User::getUserBalance,100).or();//在第一个条件后加.or()即可
wrapper.gt(User::getUserBalance,100);
  • 1
  • 2

条件个数不定查询

//Wrapper接口下的所有方法均由一个boolean类型的参数可限定条件是否加入查询
//常规写法
if(user.balance!=null){
   wrapper.lt(User::getUserBalance,100);
   wrapper.gt(User::getUserBalance,100);   
}
//wrapper写法(直接在条件加入语句中第一个参数位置写入条件)
wrapper.lt(user.balance!=null,User::getUserBalance,100);
wrapper.gt(user.balance!=null,User::getUserBalance,100);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

模糊查询语句

wrapper.like(User::getUserName,"张");//用like方法进行模糊查询
  • 1

查询投影

//通过select方法来实现查询投影(需要查询哪些字段写哪些字段)
wrapper.select(User::getUserId,User::getUserName);
  • 1
  • 2

特殊查询投影

//仅有QueryWrapper实现类可实现该种查询
QueryWrapper<User> wrapper =new QueryWrapper<>();
//查询统计数
wrapper.select("count(*) as count");
//使用selectMaps方法结果会成为map集合返回
List<Map<String, Object>> users = userDao.selectMaps(wrapper);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

分组统计查询

QueryWrapper<User> wrapper =new QueryWrapper<>();
wrapper.select("count(*) as count");
wrapper.groupBy("roleId");//使用groupby方法分组
List<Map<String, Object>> users = userDao.selectMaps(wrapper);
  • 1
  • 2
  • 3
  • 4

查询条件统计(lambda实现类对象条件下)

1.等匹配

wrapper.eq(User::getUserName,"张三")
  • 1

2.范围查询

//between语句
wrapper.between语句(User::getUserBalance,50,100)

  • 1
  • 2
  • 3

6.常用注解

//实体类名与表名不同时使用
@TableName(value = "db_user")
//实体类属性名与表属性名不同时使用
@TableField(value = "pwd")
//指定实体类中某个字段为主键时使用
@TableId
//实体类该字段不参与查询时使用
@TableField(select = false)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

7.配置id生产策略和配置表名实体类名映射

7.1id生成策略

注解方式

@TableId(type = IdType.NONE)
/*type的值有:
IdType.AUTO:按数据库指定策略生产id
IdType.NONE:无生成策略
IdType.ASSIGN_ID:mybatisplus生成策略为(时间戳+服务器mac码+12位序列号)
IdType.ASSIGN_UUID:自己手写一个UUID类型的id生成策略
IdType.INPUT:自己输入一个id*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

application.yml文件配置

mybatis-plus:
  global-config:
    db-config:
      id-type: none
#可能的值同注解一样
  • 1
  • 2
  • 3
  • 4
  • 5

7.2表名实体类名映射

注解方式

//在实体类中的主键属性上方写
@TableName(value = "表名")
  • 1
  • 2

application.yml文件配置通用

mybatis-plus:
  global-config:
    db-config:
      table-prefix: 表前缀名
  • 1
  • 2
  • 3
  • 4

7.3逻辑删除

先在实体类与数据库表中添加状态字段:

注解方式

public class User {
    private Long userId;
    private String userName;
    private Double userBalance;
    //逻辑删除专用注解value(未删除值)delval(已删除值) 
    @TableLogic(value = "0",delval = "1")
    private Integer state;
    //状态字段,字段名随意,需要与数据库中字段名相同
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

application.yml文件配置通用

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: state #指定逻辑删除状态字段
      logic-not-delete-value: 0 #未删除的值
      logic-delete-value: 1 #已删除的状态值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

mybatisplus批量删除

public Result sumDelete(){
    List<Integer> list=new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    //mybatisplus自带的批量删除方法(需要一个存有需删除数据id的集合作为参数)
    int i = userDao.deleteBatchIds(list);
    int code = i > 0 ? Code.DELETE_OK : Code.DELETE_ERR;
    return new Result(code,null,i);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

字段
logic-not-delete-value: 0 #未删除的值
logic-delete-value: 1 #已删除的状态值


mybatisplus批量删除

```java
public Result sumDelete(){
    List<Integer> list=new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    //mybatisplus自带的批量删除方法(需要一个存有需删除数据id的集合作为参数)
    int i = userDao.deleteBatchIds(list);
    int code = i > 0 ? Code.DELETE_OK : Code.DELETE_ERR;
    return new Result(code,null,i);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/525282
推荐阅读
相关标签
  

闽ICP备14008679号