SpringBoot整合MyBatisPlus(十四)中

简介: SpringBoot整合MyBatisPlus(十四)

三.三 编写 UserMapper.xml 文件


<?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="top.yueshushu.learn.mapper.UserMapper">
    <insert id="batchAdd">
        insert into user(name,sex,age,description) values
        <foreach collection="userList" item="user" open="" close="" separator=",">
            (#{user.name},#{user.sex},#{user.age},#{user.description})
        </foreach>
    </insert>
    <update id="batchUpdate">
        <foreach collection="userList" item="user" open="" close="" separator=";">
            update user set name=#{user.name},sex=#{user.sex},
            age=#{user.age},description=#{user.description}
            where id=#{user.id}
        </foreach>
    </update>
    <delete id="batchDeleteByIds">
        delete from user where id in
        <foreach collection="ids" item="id" open="(" close=")" separator=",">
            #{id}
        </foreach>
    </delete>
</mapper>


三.四 修改 Service 和对应的实现类


定义的方法,与 Mybatis 项目时的方法,基本一致。


UserService.java 接口


public interface UserService {
    void addUser(User user);
    void updateUser(User user);
    void deleteUser(int id);
    void saveUser(User user);
    void batchAddUser(List<User> userList);
    void batchUpdateUser(List<User> userList);
    void batchDeleteByIds(List<Integer> ids);
    User findById(int id);
    List<User> findAll();
    List<User> findAllByIds(List<Integer> ids);
    Long count();
    List<User> findByNameSexAndDesc(User user);
}


UserServiceImpl 实现类


@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public void addUser(User user) {
        userMapper.insert(user);
    }
    @Override
    public void updateUser(User user) {
        userMapper.updateById(user);
    }
    @Override
    public void deleteUser(int id) {
        userMapper.deleteById(id);
    }
    @Override
    public void saveUser(User user) {
        userMapper.insert(user);
    }
    @Override
    public void batchAddUser(List<User> userList) {
        userMapper.batchAdd(userList);
    }
    @Override
    public void batchUpdateUser(List<User> userList) {
        userMapper.batchUpdate(userList);
    }
    @Override
    public void batchDeleteByIds(List<Integer> ids) {
        userMapper.batchDeleteByIds(ids);
    }
    @Override
    public User findById(int id) {
        return userMapper.selectById(id);
    }
    @Override
    public List<User> findAll() {
        return userMapper.selectList(null);
    }
    @Override
    public List<User> findAllByIds(List<Integer> ids) {
        return userMapper.selectBatchIds(ids);
    }
    @Override
    public Long count() {
        return Long.valueOf(userMapper.selectCount(null));
    }
    @Override
    public List<User> findByNameSexAndDesc(User user) {
        // 注意查询的方式,用的是  QueryWrapper 接口 
        QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
        queryWrapper.like(!StringUtils.isEmpty(user.getName()),"name",user.getName());
        queryWrapper.eq(!StringUtils.isEmpty(user.getSex()),"sex",user.getSex());
        queryWrapper.eq(!StringUtils.isEmpty(user.getDescription()),"description",
                user.getDescription());
        return userMapper.selectList(queryWrapper);
    }
}


三.五 MyBatisTests 测试实现


@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
@Log4j2
public class MyBatisTests {
    @Autowired
    private UserService userService;
    @Test
    public void insertTest(){
        //1. 构建对象
        User user=new User();
        user.setName("欢欢");
        user.setAge(22);
        user.setSex("女");
        user.setDescription("一个非常可爱的女孩纸");
        //2. 添加方法
        userService.addUser(user);
        log.info("添加成功,{}",user);
    }
    @Test
    public void updateTest(){
        //1. 构建对象
        User user=new User();
        user.setId(1); //id不存在,会添加
        user.setName("欢欢");
        user.setDescription("岳泽霖最好的朋友");
        //2. 修改方法
        userService.updateUser(user);
        log.info("修改成功,{}",user);
    }
    @Test
    public void deleteTest(){
        userService.deleteUser(16);
    }
    // 批量添加,批量修改操作。
    @Test
    public void saveTest(){
        //1. 构建对象
        User user=new User();
        user.setId(2);
        user.setName("欢欢A");
        user.setDescription("岳泽霖最好的朋友");
        //2. 修改方法
        userService.saveUser(user);
        log.info("添加或者修改成功,{}",user);
    }
    @Test
    public void batchAddTest(){
        //1. 构建对象
        User user=new User();
        user.setName("小欢欢");
        user.setAge(22);
        user.setSex("女");
        user.setDescription("一个小坏蛋");
        User user1=new User();
        user1.setName("小泽霖");
        user1.setAge(25);
        user1.setSex("男");
        user1.setDescription("一个大坏蛋");
        //这是修改的操作,id=2已经存在这条记录了。
        User user2=new User();
        user2.setName("岳泽霖");
        user2.setAge(25);
        user2.setSex("男性");
        user2.setDescription("一个快乐的程序员");
        //2. 放置到集合里面
        List<User> userList=new ArrayList<>();
        userList.add(user);
        userList.add(user1);
        userList.add(user2);
        userService.batchAddUser(userList);
    }
    @Test
    public void batchUpdateTest(){
        //1. 构建对象
        User user=new User();
        user.setId(2);
        user.setName("小欢欢A");
        user.setAge(22);
        user.setSex("女");
        user.setDescription("一个小坏蛋");
        User user1=new User();
        user1.setId(3);
        user1.setName("小泽霖A");
        user1.setAge(25);
        user1.setSex("男");
        user1.setDescription("一个大坏蛋");
        //
        User user2=new User();
        user2.setId(4);
        user2.setName("岳泽霖A");
        user2.setAge(25);
        user2.setSex("男性");
        user2.setDescription("一个快乐的程序员");
        //2. 放置到集合里面
        List<User> userList=new ArrayList<>();
        userList.add(user);
        userList.add(user1);
        userList.add(user2);
        userService.batchUpdateUser(userList);
    }
    @Test
    public void batchDeleteTest(){
        List<Integer> ids= Arrays.asList(3,4,6);
        userService.batchDeleteByIds(ids);
    }
    @Test
    public void findByIdTest(){
        User user=userService.findById(2);
        log.info(user);
    }
    @Test
    public void findAllTest(){
        List<User> userList=userService.findAll();
        userList.forEach(n->log.info(n));
    }
    @Test
    public void findByIdsTest(){
        List<Integer> ids= Arrays.asList(2,4,6);
        List<User> userList=userService.findAllByIds(ids);
        userList.forEach(n->log.info(n));
    }
    @Test
    public void countTest(){
        Long count=userService.count();
        log.info("总数目{}",count);
    }
    @Test
    public void nameAndSexAndDescTest(){
        User user=new User();
        user.setName("小欢欢A");
        user.setSex("女");
        user.setAge(27);
        user.setDescription("小坏蛋");
        List<User> userList=userService.findByNameSexAndDesc(user);
        userList.forEach(n->log.info(n));
    }
}


这些方法,是可以运行的,数据库表里面的数据也会同步进行更新。


基础的 Crud 功能实现完成


四. 自动填充 创建时间和修改时间功能


在公司业务里面,每一个表都有 创建时间,修改时间。 希望这两个字段 create_time, update_time 可以由系统进行处理,并不是由调用者进行手动处理。


四.一 数据库表 user 添加相应字段


-- 添加开始时间和修改时间字段, 用于验证自动插入
-- 修改数据库中表结构
ALTER TABLE user ADD column create_time TIMESTAMP null COMMENT '记录插入时间';
ALTER TABLE user ADD column update_time TIMESTAMP null COMMENT '记录修改时间';
-- 更新所有表中数据
UPDATE user SET create_time=NOW();
UPDATE user SET update_time=NOW();


四.二 User.java 添加属性


public class User implements Serializable {
    /**
     * @param id id编号
     * @param name 姓名
     * @param sex 性别
     * @param age 年龄
     * @param description 描述
     */
    @TableId(value="id",type = IdType.AUTO)
    private Integer id;
    @TableField(value="name")
    private String name;
    @TableField(value="sex")
    private String sex;
    @TableField(value="age")
    private Integer age;
    @TableField(value="description")
    private String description;
    /*处理自动插入创建时间,自动更新修改时间*/
    @TableField(value="create_time",fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(value="update_time",fill = FieldFill.UPDATE)
    private Date updateTime;
}


createTime 和 updateTime 上面 的注解 @TableField 注解上面,添加 fill 属性,


public enum FieldFill {
    /**
     * 默认不处理
     */
    DEFAULT,
    /**
     * 插入时填充字段
     */
    INSERT,
    /**
     * 更新时填充字段
     */
    UPDATE,
    /**
     * 插入和更新时填充字段
     */
    INSERT_UPDATE
}


四.三 实现元对象 MetaObject 处理器


@Component
@Log4j2
public class FillDateHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("createTime 字段插入开始日期");
        //3.3.0 及其以上的写法。   createTime 对应的是类中属性名称,所以创建时间的那个字段要想自动填入,必须是 createTime 
        // 可以会多个字段设置自动填充值。
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("updateTime 字段更新修改日期");
         //3.3.0 及其以上的写法。   updateTime 对应的是类中属性名称,所以创建时间的那个字段要想自动填入,必须是 updateTime 
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
    }
}



相关文章
|
3天前
|
SQL Java 数据库连接
SpringBoot整合Mybatis
SpringBoot整合Mybatis
31 2
|
3天前
|
Java Spring 容器
Spring系列文章:Spring6集成MyBatis3.5
Spring系列文章:Spring6集成MyBatis3.5
|
3天前
|
运维 监控 安全
云HIS医疗管理系统源码——技术栈【SpringBoot+Angular+MySQL+MyBatis】
云HIS系统采用主流成熟技术,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同,服务可拆分,功能易扩展;支持多样化灵活配置,提取大量公共参数,无需修改代码即可满足不同客户需求;服务组织合理,功能高内聚,服务间通信简练。
38 4
|
3天前
|
Java 数据库连接 Spring
Spring 整合mybatis
Spring 整合mybatis
20 2
|
1天前
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
|
3天前
|
JSON Java 数据格式
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
nbcio-boot升级springboot、mybatis-plus和JSQLParser后的LocalDateTime日期json问题
|
3天前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
31 4
|
3天前
|
Java 数据库连接 数据库
Springboot整合mybatisPlus开发
MyBatis-Plus是一个MyBatis的增强工具,旨在简化开发和提高效率。它在不修改原有MyBatis的基础上提供额外功能。要将MyBatis-Plus集成到SpringBoot项目中,首先通过Maven添加mybatis-plus-boot-starter和相应数据库驱动依赖,然后配置application.yml中的数据库连接信息,并指定Mapper类的扫描路径。Mapper接口可继承BaseMapper实现基本的CRUD操作。
|
3天前
|
XML Java 数据库连接
Springboot整合mybatisPlus操作数据库
MyBatis-Plus是MyBatis的增强工具,简化开发、提高效率。它提供官网文档,便于集成到SpringBoot项目中。集成步骤包括添加mybatis-plus-boot-starter和数据库驱动依赖,配置数据源,扫描Mapper类包。Mapper接口继承BaseMapper即可使用基本的CRUD操作。示例代码展示了Service层的增删改查实现。MyBatisPlus还支持逻辑删除、自动填充等功能,同时可与Mybatis XML配合使用,通过调整配置指定XML映射文件位置。
|
3天前
|
XML Java 数据库连接
Spring Boot与MyBatis:整合与实战
【4月更文挑战第29天】在现代的Java Web应用开发中,持久化层框架扮演了至关重要的角色。MyBatis作为一款优秀的持久化框架,被广泛应用于Java开发中。Spring Boot提供了简化开发流程的功能,而与MyBatis的整合也变得更加便捷。
26 0