IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot-mybatisplus注解与配置类方法整合 -> 正文阅读

[Java知识库]springboot-mybatisplus注解与配置类方法整合

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>

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

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

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

4.CRUD标准开发

4.1实体类

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

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);
    }

}

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);
    }
}

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);
}

5.1.2配置分页拦截器

@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor(){
        MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

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

5.1.3控制层代码

@GetMapping("/{current}/{size}")
public Result pageUser(@PathVariable("current") Integer current,
                       @PathVariable("size") Integer size){
    return userService.pageSelect(current,size);
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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

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);
}

第二种写法(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);
}

第二个实现类(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);
    }

and条件

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

or条件

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

条件个数不定查询

//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);

模糊查询语句

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

查询投影

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

特殊查询投影

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

分组统计查询

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

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

1.等匹配

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

2.范围查询

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

6.常用注解

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

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*/

application.yml文件配置

mybatis-plus:
  global-config:
    db-config:
      id-type: none
#可能的值同注解一样

7.2表名实体类名映射

注解方式

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

application.yml文件配置通用

mybatis-plus:
  global-config:
    db-config:
      table-prefix: 表前缀名

7.3逻辑删除

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

注解方式

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

application.yml文件配置通用

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

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);
}

字段
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);
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 20:42:44  更:2022-09-24 20:44:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:32:28-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码