前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务项目:尚融宝(3)(上手复习mybatisplus)

微服务项目:尚融宝(3)(上手复习mybatisplus)

作者头像
一个风轻云淡
发布2022-11-15 13:46:56
1980
发布2022-11-15 13:46:56
举报
文章被收录于专栏:java学习java

一、通用Mapper

MP中的基本CRUD在内置的BaseMapper中都已得到了实现。

创建MapperTests测试类:

代码语言:javascript
复制
@SpringBootTest
public class MapperTests {

    @Resource
    private UserMapper userMapper;
}

1、Create

代码语言:javascript
复制
@Test
public void testInsert(){

    User user = new User();
    user.setName("Helen");
    user.setAge(18);
    //不设置email属性,则生成的动态sql中不包括email字段

    int result = userMapper.insert(user);
    System.out.println("影响的行数:" + result); //影响的行数
    System.out.println("id:" + user.getId()); //id自动回填
}

结果

2、Retrieve

代码语言:javascript
复制
  @Test
    public void testSelect(){

        //按id查询
        User user = userMapper.selectById(1);
        System.out.println(user);

        //按id列表查询
        List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
        users.forEach(System.out::println);

        //按条件查询
        Map<String, Object> map = new HashMap<>();
        map.put("name", "Helen"); //注意此处是表中的列名,不是类中的属性名
        map.put("age", 18);
        List<User> users1 = userMapper.selectByMap(map);
        users1.forEach(System.out::println);
    }

结果

3、Update 

代码语言:javascript
复制
@Test
public void testUpdate(){

    User user = new User();
    user.setId(1L);
    user.setAge(28);

    //注意:update时生成的sql自动是动态sql
    int result = userMapper.updateById(user);
    System.out.println("影响的行数:" + result);
}

结果 

4、Delete

代码语言:javascript
复制
@Test
public void testDelete(){

    int result = userMapper.deleteById(5);
    System.out.println("影响的行数:" + result);
}

结果

二、通用Service

MP中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑

1、创建Service接口

代码语言:javascript
复制
public interface UserService extends IService<User> {
    
}

2、创建Service实现类

创建 impl 包,创建 UserServiceImpl,继承 ServiceImpl,实现 UserService

代码语言:javascript
复制
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {

}

3、创建测试类

创建ServiceTests

代码语言:javascript
复制
package com.atguigu.mybatisplus;

@SpringBootTest
public class ServiceTests {

    @Resource
    private UserService userService;

}

4、测试记录数

代码语言:javascript
复制
@Test
public void testCount(){

    int count = userService.count();
    System.out.println("总记录数:" + count);
}

结果

5、测试批量插入 

代码语言:javascript
复制
 @Test
    public void testSaveBatch(){

        // SQL长度有限制,海量数据插入单条SQL无法实行,
        // 因此MP将批量插入放在了通用Service中实现,而不是通用Mapper
        ArrayList<User> users = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            User user = new User();
            user.setName("Helen" + i);
            user.setAge(10 + i);
            users.add(user);
        }
        userService.saveBatch(users);
    }

三、自定义Mapper

当通用Mapper无法满足我们的需求时,我们可以自定义基于Mapper接口的xml文件,并在xml文件中配置SQL语句

1、接口方法定义

在UserMapper接口中定义如下方法

代码语言:javascript
复制
List<User> selectAllByName(String name);

2、创建xml文件

在resources目录中创建mapper目录,创建UserMapper.xml

代码语言:javascript
复制
<?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">

<mapper namespace="com.atguigu.mybatisplus.mapper.UserMapper">

   <sql id="Base_Column_List">
       id, name, age, email
   </sql>

    <select id="selectAllByName" resultType="com.atguigu.mybatisplus.entity.User">
        select
        <include refid="Base_Column_List"/>
        from user
        where
        name = #{name}
    </select>
</mapper>

注意:MP中mapper目录是持久层映射文件的默认目录,如果是其他目录,需要配置mapper-locations,例如:

mybatis-plus.mapper-locations=classpath:xml/*.xml

3、测试条件查询

在MapperTests中创建如下测试用例

代码语言:javascript
复制
@Test
public void testSelectAllByName(){
    List<User> users = userMapper.selectAllByName("Helen");
    users.forEach(System.out::println);
}

 四、自定义Service

1、添加接口方法

UserService中添加接口方法

代码语言:javascript
复制
List<User> listAllByName(String name);

2、实现接口方法

代码语言:javascript
复制
@Override
public List<User> listAllByName(String name) {
    // baseMapper对象指向当前业务的mapper对象
    return baseMapper.selectAllByName("Helen");
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、通用Mapper
    • 1、Create
      • 2、Retrieve
        • 3、Update 
          • 4、Delete
          • 二、通用Service
            • 1、创建Service接口
              • 2、创建Service实现类
                • 3、创建测试类
                  • 4、测试记录数
                    • 5、测试批量插入 
                    • 三、自定义Mapper
                      • 1、接口方法定义
                        • 2、创建xml文件
                          • 3、测试条件查询
                            •  四、自定义Service
                              • 1、添加接口方法
                                • 2、实现接口方法
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档