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



相关文章
|
6天前
|
Java 数据库连接 数据库
spring复习05,spring整合mybatis,声明式事务
这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
spring复习05,spring整合mybatis,声明式事务
|
9天前
|
Java 数据库连接 数据库
SpringBoot 整合jdbc和mybatis
本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
SpringBoot 整合jdbc和mybatis
|
19天前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
6天前
|
XML Java 关系型数据库
springboot 集成 mybatis-plus 代码生成器
本文介绍了如何在Spring Boot项目中集成MyBatis-Plus代码生成器,包括导入相关依赖坐标、配置快速代码生成器以及自定义代码生成器模板的步骤和代码示例,旨在提高开发效率,快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。
springboot 集成 mybatis-plus 代码生成器
|
6天前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
6天前
|
XML Java 数据库连接
springboot中整合mybatis及简单使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis,包括依赖引入、配置数据源、创建测试表、编写Mapper接口和XML文件、以及创建Service和Controller层的步骤。
springboot中整合mybatis及简单使用
|
20天前
|
Java 数据库连接 数据格式
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
IOC/DI配置管理DruidDataSource和properties、核心容器的创建、获取bean的方式、spring注解开发、注解开发管理第三方bean、Spring整合Mybatis和Junit
【Java笔记+踩坑】Spring基础2——IOC,DI注解开发、整合Mybatis,Junit
|
2月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
24天前
|
前端开发 JavaScript Java
技术分享:使用Spring Boot3.3与MyBatis-Plus联合实现多层次树结构的异步加载策略
在现代Web开发中,处理多层次树形结构数据是一项常见且重要的任务。这些结构广泛应用于分类管理、组织结构、权限管理等场景。为了提升用户体验和系统性能,采用异步加载策略来动态加载树形结构的各个层级变得尤为重要。本文将详细介绍如何使用Spring Boot3.3与MyBatis-Plus联合实现这一功能。
57 2
|
2月前
|
Java 数据库连接 测试技术
SpringBoot 3.3.2 + ShardingSphere 5.5 + Mybatis-plus:轻松搞定数据加解密,支持字段级!
【8月更文挑战第30天】在数据驱动的时代,数据的安全性显得尤为重要。特别是在涉及用户隐私或敏感信息的应用中,如何确保数据在存储和传输过程中的安全性成为了开发者必须面对的问题。今天,我们将围绕SpringBoot 3.3.2、ShardingSphere 5.5以及Mybatis-plus的组合,探讨如何轻松实现数据的字段级加解密,为数据安全保驾护航。
89 1
下一篇
无影云桌面