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



相关文章
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
280 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
Java 数据库连接 数据库
spring复习05,spring整合mybatis,声明式事务
这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
spring复习05,spring整合mybatis,声明式事务
|
2月前
|
Java 数据库连接 数据库
SpringBoot 整合jdbc和mybatis
本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
SpringBoot 整合jdbc和mybatis
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
57 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
2月前
|
缓存 前端开发 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版)
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
40 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
|
1月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
119 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
2月前
|
XML Java 关系型数据库
springboot 集成 mybatis-plus 代码生成器
本文介绍了如何在Spring Boot项目中集成MyBatis-Plus代码生成器,包括导入相关依赖坐标、配置快速代码生成器以及自定义代码生成器模板的步骤和代码示例,旨在提高开发效率,快速生成Entity、Mapper、Mapper XML、Service、Controller等代码。
springboot 集成 mybatis-plus 代码生成器
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用