• 二:对表进行基本CRUD操作


    一:创建Spring Boot工程

    ①初始化工程

    ②引入依赖

    ③idea中安装lombok插件

    二:编写代码

    ①配置application.yml

    ②添加实体

    ③添加mapper

    ④添加日志

    ⑤测试

    1>插入

    测试添加操作,只有一种添加的方法

    ①使用insert方法

    1. @Test
    2. public void testInsert(){
    3. User user = new User();
    4. user.setName("张三");
    5. user.setAge(20);
    6. user.setEmail("zhangsan@tian.com");
    7. int result = userMapper.insert(user);
    8. System.out.println("result:" + result);
    9. System.out.println("id:" + user.getId());
    10. }

    雪花算法的引入:

    最终执行的结果,所获取的id为1475754982694199298

    这是因为MyBatis-Plus在实现插入数据时,会默认基于雪花算法的策略生成id

     执行的sql

    1. --实现新增用户信息
    2. INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )

    2>删除

    测试删除操作,一共五种删除方法,这里测试三种

    ①使用deleteById方法

    1. @Test
    2. public void testDelete() {
    3. int result = userMapper.deleteById(1595758168781840385L);
    4. System.out.println("result:" + result);
    5. }

    执行的sql 

    1. --通过id删除用户信息
    2. DELETE FROM user WHERE id=?

    ②使用deleteByMap方法 

    1. @Test
    2. public void testDelete() {
    3. Map map = new HashMap<>();
    4. map.put("name", "张三");
    5. map.put("age",20);
    6. int result = userMapper.deleteByMap(map);
    7. System.out.println("result:" + result);
    8. }

    执行的sql

    1. --根据map集合中所设置的条件删除用户信息
    2. DELETE FROM user WHERE name = ? AND age = ?

    ③使用deleteBatchIds方法

    1. @Test
    2. public void testDelete() {
    3. List list = Arrays.asList(1L, 2L, 3L);
    4. int result = userMapper.deleteBatchIds(list);
    5. System.out.println("result" + result);
    6. }

     执行的sql

    1. --通过多个id实现批量删除
    2. DELETE FROM user WHERE id IN ( ? , ? , ? )

    3>修改 

    测试修改功能,有两个方法

    ①使用updateById方法

    1. @Test
    2. public void testUpdate(){
    3. User user = new User();
    4. user.setId(4L);
    5. user.setName("李四");
    6. user.setEmail("lisi@tian.com");
    7. int result = userMapper.updateById(user);
    8. System.out.println("result" + result);
    9. }

     执行的sql 

    1. --修改用户信息
    2. UPDATE user SET name=?, email=? WHERE id=?

    4>查询

    测试查询功能,查询方法就很多了,因为在增删改查四个操作中,查询操作比例是非常高的

    ①使用selectById方法

    1. @Test
    2. public void testSelect() {
    3. User user = userMapper.selectById(4L);
    4. System.out.println(user);
    5. }

    执行的sql

    1. --通过id查询用户信息
    2. SELECT id,name,age,email FROM user WHERE id=?

    ②使用selectBatchIds方法

    1. @Test
    2. public void testSelect() {
    3. List list = Arrays.asList(1L, 2L, 3L);
    4. List users = userMapper.selectBatchIds(list);
    5. users.forEach(System.out::println);
    6. }

    执行的sql

    1. --根据多个id查询多个用户信息
    2. SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )

    ③使用selectByMap,根据Map集合作为条件来进行查询

    1. @Test
    2. public void testSelect() {
    3. Map map = new HashMap<>();
    4. map.put("name","熊二");
    5. map.put("age","5");
    6. List users = userMapper.selectByMap(map);
    7. users.forEach(System.out::println);
    8. }

    执行的sql 

    1. --根据map集合中的条件查询用户信息
    2. SELECT id,name,age,email FROM user WHERE name = ? AND age = ?

     使用selectList

    1. @Test
    2. public void testSelect() {
    3. List users = userMapper.selectList(null);
    4. users.forEach(System.out::println);
    5. }

     执行的sql 

    1. --查询所有数据
    2. SELECT id,name,age,email FROM user

    还有一些其他的方法可以自行去测试,我们对baseMapper里面的一些方法进行了一些简单的测试,这里就出现一个问题了,要是baseMapper里面的方法无法满足我们的需求,比如两表联查的情况,或者自定义一个方法,自定义一个sql如何去实现,我们之前说过MyBatis-plus是在MyBatis的基础上只做增强而不做改变,所以以前我们如何实现,现在我们就如何去实现 

     测试自定义功能

     ①自定义mapper接口方法

    1. @Repository//将我们的类或接口标识为持久层组件
    2. public interface UserMapper extends BaseMapper {
    3. /**
    4. * 根据id查询用户信息为map集合
    5. * @param id
    6. * @return
    7. */
    8. Map selectMapById(Long id);
    9. }

    ②创建mapper映射文件,自定义sql

    1. <select id="selectMapById" resultType="map">
    2. select id,name,age,email from user where id = #{id}
    3. select>

    ③测试

    1. @Test
    2. public void testSelect() {
    3. Map map = userMapper.selectMapById(1L);
    4. System.out.println(map);
    5. }

    5>通用的Service

    说明:

    通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删 除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,

    泛型 T 为任意实体对象 建议如果存在自定义通用 Service 方法的可能,请创建自己的 IBaseService 继承 Mybatis-Plus 提供的基类

    官网地址:CRUD 接口 | MyBatis-Plus (baomidou.com)

    IService

    MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑 详情查看源码IService和ServiceImpl

    ①创建Service接口和实现类

    Service接口

    1. /**
    2. * UserService继承IService模板提供的基础功能
    3. */
    4. public interface UserService extends IService {
    5. }

    实现类

    ServiceImpl实现了IService,提供了IService中基础功能的实现

    若ServiceImpl无法满足业务需求,则可以使用自定的UserService定义方法,并在实现类中实现

    1. @Service
    2. public class UserServiceImpl extends ServiceImpl implements UserService {
    3. }

    测试类

    ②测试查询记录数

    1. @SpringBootTest
    2. public class MyBatisPlusServiceTest {
    3. @Autowired
    4. private UserService userService;
    5. @Test
    6. public void testGetCount() {
    7. long count = userService.count();
    8. System.out.println("总记录数:" + count);
    9. }
    10. }

    执行的sql

    1. --查询总记录数
    2. SELECT COUNT( * ) FROM user

    ①测试批量插入

    1. @Test
    2. public void testInsertMore() {
    3. List list = new ArrayList<>();
    4. for (int i = 0; i <= 10; i++) {
    5. User user = new User();
    6. user.setName("ht" + i);
    7. user.setAge(20 + i);
    8. list.add(user);
    9. }
    10. boolean b = userService.saveBatch(list);
    11. System.out.println(b);
    12. }

    执行的sql 

    1. --批量添加
    2. INSERT INTO user ( id, name, age ) VALUES ( ?, ?, ? )
  • 相关阅读:
    Cholesterol-PEG-Acid,Cholesterol-PEG-COOH,疏水性分子胆固醇-聚乙二醇-羧基
    C++|list的模拟实现
    批量操作数据、自定义分页器
    vue 实现左侧导航栏,右侧锚点定位滚动到指定位置(超简单方法)
    MySQL存储引擎
    渗透测试-Windows密码凭证获取
    Python教程:itertools模块
    【靶场搭建】-01- 在kali上搭建DVWA靶机
    为什么说FTP越来越不好用了?该如何替代?
    【LeetCode】540. 有序数组中的单一元素
  • 原文地址:https://blog.csdn.net/m0_56379670/article/details/128026203