【Mybatisplus】创建Spring Boot工程实现增删改查操作的实现方法(CRUD总结)

目录

1.加入日志功能

​编辑

​编辑

2.编写代码

d.添加mapper

基本CRUD(在MybatisPlusTest中进行测试)

测试BaseMapper中的添加功能

测试BaseMapper中的删除功能

 基本CRUD的总结:​编辑


1.加入日志功能

在通过mybatis-plus为我们生成的代码后我们可以查询到我们MySQL中的数据库,但是如何查看SQL语句呢,这时候我们就需要加入日志功能。(这里的配置需要在我们之前的application.yml中进行配置)。

 在application.yml中添加配置(org.apache.ibatis.logging.stdout.StdOutImpl),然后运行我们可以看到所执行的SQL语句。

spring:
  datasource:
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
    username: root
    password: abc123
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

执行结果和SQL语句展示:

2.编写代码

d.添加mapper

我们知道在MyBaties中mapper中的方法以及SQL语句都是需要自己去编写的,而MyBaties-plus的作用就是给我们提供了跟简洁的方法,我们只需要将UserMapper接口继承BaseMapper即可,我们可以看到BaseMapper是有泛型的,而且泛型里面包含一个实体类的类型,而此时我们的实体类型是User类。

package com.atzeren.mybatiesplus.mapper;

import com.atzeren.mybatiesplus.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;

public interface UserMapper extends BaseMapper <User>{

}

之后在Spring Boot启动类中添加@MapperScan注解,扫描mapper包

package com.atzeren.mybatiesplus;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;


@SpringBootApplication
//扫描mapper接口所在的包
@MapperScan("com.atzeren.mybatiesplus.mapper")
public class MybatiesplusApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatiesplusApplication.class, args);
    }

}

基本CRUD(在MybatisPlusTest中进行测试)

测试BaseMapper中的添加功能

@Test
    public void testInsert(){
        //实现新增用户信息
        //INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
        User user = new User();
        user.setName("大仙");
        user.setAge(34);
        user.setEmail("Zhangsan@zrj.com");
        int result = userMapper.insert(user);
        System.out.println("result:"+result);
        System.out.println("id:"+user.getId());
    }

 我们看到id的增加并不是顺序的增加,而是生成了一个很长的数据,这就是之前id为什么要使用BigInt的原因了,具体为什么是因为使用了雪花算法自动生成的id。(我们这里的中文编码显示是有问题的,这个需要修改IDEA默认编码为UTF-8,我们后面已经修改)。

这样我们向MySQL中输入的语句才不会出现乱码问题。 

测试BaseMapper中的删除功能

 根据id进行删除(deleteById)

 接下来我们尝试将这些中文乱码的数据根据ID进行删除,但是我们发现放入ID之后我们的IDEA会报一个错,这时因为根据雪花算法得到的ID长度已经超过了int 的范围了,所以需要在后面添加一个L。

 @Test
    public void testDelete(){
        userMapper.deleteById(1590888429762240514L);//数据长度超过了我们的int范围,添加L表示这是一个Long类型的数据
        userMapper.deleteById(1590892685902761985L);
        userMapper.deleteById(1590894027761336322L);
        userMapper.deleteById(1590894230195191809L);
        userMapper.deleteById(1590898437178601474L);
    }

运行这个测试类得到如下测试结果:

2022-11-11 11:02:10.672  INFO 13004 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2022-11-11 11:02:10.927  INFO 13004 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.
JDBC Connection [HikariProxyConnection@599316979 wrapping com.mysql.cj.jdbc.ConnectionImpl@7f353d99] will not be managed by Spring
==>  Preparing: DELETE FROM user WHERE id=?
==> Parameters: 1590888429762240514(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a230001]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7e74a380] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1842463725 wrapping com.mysql.cj.jdbc.ConnectionImpl@7f353d99] will not be managed by Spring
==>  Preparing: DELETE FROM user WHERE id=?
==> Parameters: 1590892685902761985(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7e74a380]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@55e42449] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@240641494 wrapping com.mysql.cj.jdbc.ConnectionImpl@7f353d99] will not be managed by Spring
==>  Preparing: DELETE FROM user WHERE id=?
==> Parameters: 1590894027761336322(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@55e42449]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78054f54] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@213383793 wrapping com.mysql.cj.jdbc.ConnectionImpl@7f353d99] will not be managed by Spring
==>  Preparing: DELETE FROM user WHERE id=?
==> Parameters: 1590894230195191809(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@78054f54]
Creating a new SqlSession
SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4b6e1c0] was not registered for synchronization because synchronization is not active
JDBC Connection [HikariProxyConnection@1444635117 wrapping com.mysql.cj.jdbc.ConnectionImpl@7f353d99] will not be managed by Spring
==>  Preparing: DELETE FROM user WHERE id=?
==> Parameters: 1590898437178601474(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4b6e1c0]
2022-11-11 11:02:11.006  INFO 13004 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown initiated...
2022-11-11 11:02:11.015  INFO 13004 --- [ionShutdownHook] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Shutdown completed.

 再次查看SQLyog中的数据发现刚刚删除的数据已经不见了,这说明我们根据ID进行删除的操作成功了。

 根据Map集合进行删除(deleteByMap)

@Test
    public void testDelete(){
//      根据map集合中设置的条件删除用户信息(map集合中的信息必须全部匹配才能删除成功)
//      DELETE FROM user WHERE name = ? AND age = ?
        Map<String,Object> map = new HashMap<>();
        map.put("name","大仙");
        map.put("age",34);
        int result = userMapper.deleteByMap(map);
        System.out.println("result:"+result);
    }

进行批量删除(deleteBatchIds)

@Test
    public void testDelete(){
//        通过多个id实现批量删除        
//        DELETE FROM user WHERE id IN ( ? , ? , ? )
        List<Long> list = Arrays.asList(1L, 2L, 3L);
        int result = userMapper.deleteBatchIds(list);
        System.out.println("result:"+result);
    }

 操作完成后我们数据库中也只剩下两条数据了。

修改数据(updateById)

@Test
    public void testUpdateById(){
        //修改用户信息
        //UPDATE user SET name=?, age=? WHERE id=?
        User user = new User();
        user.setId(4L);
        user.setName("张三");
        user.setEmail("atJxau@zrj.com");
        int result = userMapper.updateById(user);
        System.out.println("受影响行数:"+result);
    }
JDBC Connection [HikariProxyConnection@2004305265 wrapping com.mysql.cj.jdbc.ConnectionImpl@277b8fa4] will not be managed by Spring
==>  Preparing: UPDATE user SET name=?, email=? WHERE id=?
==> Parameters: 张三(String), atJxau@zrj.com(String), 4(Long)
<==    Updates: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@2d0ecb24]
受影响行数:1

 我们可以看到年龄是没有进行修改的。

根据id查询用户数据(selectById)

@Test
    public void testSelectById(){
        //根据id查询用户信息
        //SELECT id,name,age,email FROM user WHERE id=?
        User user = userMapper.selectById(4L);
        System.out.println(user);
    }
==>  Preparing: SELECT id,name,age,email FROM user WHERE id=?
==> Parameters: 4(Long)
<==    Columns: id, name, age, email
<==        Row: 4, 张三, 21, atJxau@zrj.com
<==      Total: 1
Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@3a230001]
User(id=4, name=张三, age=21, email=atJxau@zrj.com)

根据多个id查询多个用户信息(selectBatchIds

@Test
public void testSelectBatchIds(){
        //根据多个id查询多个用户信息
        //SELECT id,name,age,email FROM user WHERE id IN ( ? , ? )
        List<Long> idList = Arrays.asList(4L, 5L);
        List<User> list = userMapper.selectBatchIds(idList);
        list.forEach(System.out::println);
}

 基本CRUD的总结:

本文使用的是MySql8.0环境,之前的8.0和5.7同时存在让我误以为我使用的是MySql8.0,在通过重装MySQL之后终于连接成功了。

本文是博主在学习mybatisplus中的笔记,如有错误欢迎指正。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值