【开发】Spring整合MyBatis、MyBatisPlus

目录

前言

Spring整合MyBatis

1. 在项目中的pom.xml中导入MyBatis和Spring相关的依赖:

2. 配置数据源

3. 编写实体类

4. 编写API接口

5. 编写单元测试方法(业务)

 Spring整合MyBatis-Plus

1. 在项目中导入依赖:

2. 配置数据源

3. 编写实体类

4. 编写API接口与编写单元测试方法(业务)


前言

什么是MyBatis?

  • MyBatis是一个开源、轻量级的数据持久型框架,是JDBCHibernate的替代方案。

为什么使用MyBatis?

  • MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement等繁杂的过程,开发者只需要关注SQL语句本身。

Spring怎么整合MyBatis?

  • 如下文所示

什么是MyBatis-Plus?

  • MyBatis-Plus简称MP,是MyBatis的增强工具,在MyBatis的基础上扩展了许多实用的功能。

为什么使用MyBatis-Plus?

  1. 简化CRUD操作:MP提供了丰富的内置方法,可以通过简单的方法调用完成常见的CRUD(创建、读取、更新、删除)操作,无需手动编写SQL语句。
  2. 条件构造器:MP提供了强大的条件构造器,可以通过API的方式灵活地拼接查询条件,支持链式调用,使得复杂的查询条件更加可控和易于维护。
  3. 分页查询:支持快速、简单地进行分页查询,减少手动编写分页SQL的复杂性,提高了开发效率。
  4. 逻辑删除:MP支持逻辑删除,通过注解配置的方式可以轻松实现逻辑删除的功能,避免在业务代码中手动处理逻辑删除的逻辑。
  5. 乐观锁和数据权限:对乐观锁和数据权限提供了良好的支持,简化了相关的操作和配置。

Spring怎么整合MyBatis-Plus?

  • 如下文第二章所示

Spring整合MyBatis

1. 在项目中的pom.xml中导入MyBatis和Spring相关的依赖:

MySQL的依赖坐标: 

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

MyBatis的依赖坐标:

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.9</version>
        </dependency>

Lombok的依赖坐标:导入后,自动生成实体类的get、set、无参构造方法和有参构造方法,方便快速搭建项目(多数情况下会导致编译器“报红”,影响开发者对“异常”信息的捕捉

注:使用此Java库,IDEA、Eclipse需要安装Lombok插件,启用注解处理功能或添加配置。

相关搜索:Lombok在IDEA中的使用        Eclipse使用Lombok

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>

Junit的依赖坐标:在项目开发过程中用于“单元测试”某个接口API的逻辑正确性,避免造成过大损失

       <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

2. 配置数据源

在MyBatis的配置文件(一般为 mybatis.xml 或 mybatis-config.xml 文件)中配置全局设置、数据源、映射器等信息

jdbc.properties文件: 

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/2003db?serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=123456

mybatis-config.xml文件: 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--开启全局配置-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>


    <!--开发模式-->
    <environments default="env">
        <environment id="env">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射器注册-->
    <mappers>
        <package name="com.ape.dao"/>
    </mappers>
</configuration>

解读:

  • 在这里,我们使用
     <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>开启了驼峰命名和下划线命名的自动转换功能。

        Mybatis自动驼峰映射规范:

  1. 数据库的 stu_id 对应实体类中的 stuId;
  2. 数据库的 stu_name 对应实体类中的 stuName;
  • environments 标签内配置了数据源和环境信息;环境名为 env ,使用JDBC作为事务管理器类型,使用 POOLED 数据源类型,配置MySQL数据库的连接信息(驱动、URL、用户名、密码);
    • <property>标签的value属性中使用${jdbc.username}占位符,引用jdbc.properties文件中的属性值 jdbc.username
      • 通常情况下,我们会将敏感的配置信息存储在外部的配置文件中;
      •  jdbc.properties 存储MySQL的连接信息,这样做的好处是可以在不同环境中使用不同的配置,而不修改MyBatis的配置文件;
  • mappers 标签内注册映射器(Mapper)。使用<package>标签指定Mappper接口所在包路径 com.ape.dao,表示MyBatis会扫描该包下的Mapper接口并注册到MyBatis中;

3. 编写实体类

使用Lombok快速构建

案例:

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Student {

    private int stuId;

    private String stuName;

    private String stuHobby;

    public Student(String stuName, String stuHobby) {
        this.stuName = stuName;
        this.stuHobby = stuHobby;
    }
}

解读:

  • @NoArgsConstructor注解:Lombok注解在编译时自动生成“无参的构造方法”。
  • @AllArgsConstructor注解:自动生成“全参的构造方法”。
  • @Data注解:自动生成“GetterSettertoStringequalshashCode”方法。

4. 编写API接口

案例:

public interface StudentMapper extends BaseMapper<Student> {

    @Select("select * from student")
    public List<Student> findAll();

    @Insert("insert into student (stu_name,stu_hobby) value(#{stuName},#{stuHobby})")
    public void save(Student student);
}

5. 编写单元测试方法(业务)

在 test文件夹下 => java文件夹下 => 创建包 =>在包下创建测试类

案例: 

public class Test01 {
    SqlSession sqlSession = null;
    StudentMapper studentMapper = null;
    InputStream inputStream = null;

    @Before
    public void beforeMethod(){
        try {
            inputStream = Resources.getResourceAsStream("mybatis.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            SqlSessionFactory factory = sqlSessionFactoryBuilder.build(inputStream);
            sqlSession = factory.openSession(true);//开启事务自动提交
            studentMapper = sqlSession.getMapper(StudentMapper.class);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @After
    public void afterMethod(){
        try {
            sqlSession.close();
            inputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


     @Test
    public void show1(){
        studentMapper.save(new Student("会诚意","创可贴"));
    }

    @Test
    public void show2(){
        List<Student> all = studentMapper.findAll();
        for (int i = 0; i < all.size(); i++) {
            Student student =  all.get(i);
            System.out.println(student);
        }
    }
}

解读:

  • @Before @After 注解修饰的方法 会分别在每个测试方法(被 @Test 包围的方法)执行前和执行后允许。
  • 案例中@Before注解方法 :获取名为 “mybatis.xml” 的配置文件资源,创建SqlSessionFactorySqlSession以及相应的Mapper对象。
  • 案例中@After注解方法:关闭SqlSession并且关闭输入流。
  • 案例中@Test注解方法:表示它是一个测试方法,在一个测试类中,可以创建多个不同名,但被注解修饰的方法。

 Spring整合MyBatis-Plus

1. 在项目中导入依赖:

MySQL的依赖坐标:

        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.29</version>
        </dependency>

MyBatis-Plus的依赖坐标:

        <!--mybatis plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>3.1.1</version>
        </dependency>

Junit的依赖坐标:

        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>

Lombok的依赖坐标:

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>

2. 配置数据源

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--开启全局配置-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <!--插件-->
    <plugins>
        <!--mp分页插件-->
        <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></plugin>
    </plugins>

    <!--开发模式-->
    <environments default="env">
        <environment id="env">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/2307db?serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <!--映射器注册-->
    <mappers>
        <package name="com.apesource.dao"/>
    </mappers>
</configuration>

总结:

  • 除了加入了
    <plugins>
        <!--mp分页插件-->
        <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"></plugin>
    </plugins>
    加入了MyBatis-Plus的分页插件外,其他配置与 Spring 整合 MyBatis 的大差不差。

3. 编写实体类

使用Lombok快速构建:与整合MyBatis不同的是使用了MP的注解

@NoArgsConstructor
@AllArgsConstructor
@Data
@TableName(value = "student")
public class Student {
    @TableId(value = "stu_id",type = IdType.AUTO)
    private int stuId;
    @TableField(value = "stu_name")
    private String stuName;
    @TableField(value = "stu_hobby")
    private String stuHobby;

    public Student(String stuName, String stuHobby) {
        this.stuName = stuName;
        this.stuHobby = stuHobby;
    }
}

解读:

  • @TableName(value = "student"):用于指定实体对应的表名。
  • @TableId(value = "stu_id",type = IdType.AUTO):用于表示主键字段,并且设置了主键自增。
  • @TableField(value = "stu_name") @TableField(value = "stu_hobby"):用于指定实体类字段和数据库表字段的映射关系。将实体类字段 stuName  stuHobby 分别映射到数据库表中的列 stu_name  stu_hobby

4. 编写API接口与编写单元测试方法(业务)

MP是在MyBatis上做了扩展,所以编写接口和编写实现业务和MyBatis差不多,这里不再一一赘述,后面更新MP在这两个方面上对MyBatis的扩展。


  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud是一个基于Spring Boot的开发工具包,用于构建微服务应用程序。而Mybatis Plus是Mybatis的增强工具包,提供了许多实用的功能,如分页、自动生成代码等。下面是Spring Cloud和Mybatis Plus整合的步骤: 1. 添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.2</version> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> ``` 2. 配置数据源 在application.yml文件中配置数据源: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver ``` 3. 配置Mybatis Plus 在application.yml文件中添加以下配置: ```yaml mybatis-plus: configuration: map-underscore-to-camel-case: true log-impl: org.apache.ibatis.logging.stdout.StdOutImpl mapper-locations: classpath:/mapper/*Mapper.xml ``` 其中,map-underscore-to-camel-case为下划线转驼峰,log-impl为Mybatis日志输出到控制台,mapper-locations为Mapper文件所在路径。 4. 创建实体类和Mapper 创建实体类和Mapper,如下所示: ```java @Data public class User { private Long id; private String name; private Integer age; } ``` ```java @Mapper public interface UserMapper extends BaseMapper<User> { } ``` 其中,@Mapper注解表示该类为Mapper接口,BaseMapper为Mybatis Plus提供的基础Mapper接口。 5. 创建Service和ServiceImpl 创建Service和ServiceImpl,如下所示: ```java public interface UserService { User getById(Long id); boolean save(User user); boolean updateById(User user); boolean removeById(Long id); List<User> list(); } ``` ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public User getById(Long id) { return userMapper.selectById(id); } @Override public boolean save(User user) { return userMapper.insert(user) > 0; } @Override public boolean updateById(User user) { return userMapper.updateById(user) > 0; } @Override public boolean removeById(Long id) { return userMapper.deleteById(id) > 0; } @Override public List<User> list() { return userMapper.selectList(null); } } ``` 其中,@Service注解表示该类为Service实现类,@Autowired注解表示自动注入UserMapper。实现类中直接调用UserMapper的方法实现对数据库的操作。 6. 测试 在测试类中测试Service的方法,如下所示: ```java @SpringBootTest(classes = Application.class) class UserServiceTest { @Autowired private UserService userService; @Test void test() { User user = new User(); user.setName("test"); user.setAge(18); userService.save(user); List<User> userList = userService.list(); System.out.println(userList); user.setAge(20); userService.updateById(user); User user2 = userService.getById(user.getId()); System.out.println(user2); userService.removeById(user.getId()); userList = userService.list(); System.out.println(userList); } } ``` 运行测试类,查看控制台输出,即可验证整合是否成功。 以上就是Spring Cloud和Mybatis Plus整合的步骤,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值