springBoot中整合jpa与mybatis的新思路

一、序言

我先提出我对于jpa与mybatis使用后的理解
mybatis:半自动化orm框架,所有sql语句均需要开发者把握,我觉得不太喜欢的就是增加类时,有需要去增加它的映射文件,好吧,你说有生成器,但还是难免需要修改实体类,如增加一个属性,那我是不是需要去xml,好好的把属性加上去。就是mybatis的这一点觉得有点小烦
jpa:全自动的orm框架,好的一点=点是简单的crud,不用开发者自己编写,操作实体类,操作对应的数据库表,不喜欢的一点就是复杂查询,感觉写起来很鸡肋,觉得复杂的还是在mybaitis里面写sql语句比较顺手

于是总琢磨着,把jpa与mybatis合起来一起用,我简单搜索了一下,网上有,不过是将两个dao分开来,弄个两个独立的接口,这一点不喜欢,偶然一次重新看回mybatis基础,在B站老雷视频第二节中看到,使用mybatis其实是可以不用dao接口的,只需xml的映射关系就行,dao接口是通过代理,使得我们方便使用,于是,我发觉可以采用原始的方式,采用sqlsessionFactory的方式去调用我的mybatis,而且也只是在jpa的基础上增加,因为我不想破坏jpa原本就实现的JpaRepository(一个提供crud的接口)

二、正式撸代码

1、创建项目

使用idea创建springboot
在这里插入图片描述
编辑好项目信息
在这里插入图片描述
添加好需要的几个依赖,重点记住,jpa与mybatis都要
在这里插入图片描述
由于我比较喜欢用yml,所以在resources目录下新建一个application.yml
写入配置,图片有限,详细配置在图片下方
在这里插入图片描述
application.yml的配置信息

# Spring配置
spring:
  datasource:
    type: org.springframework.jdbc.datasource.DriverManagerDataSource
    url: jdbc:mysql://localhost:3306/jpa?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver

  #配置 Jpa
  jpa:
    hibernate:
      ddl-auto: update
    # SQL语句打印
    show-sql: true
    # 配置方言
    database-platform: org.hibernate.dialect.MySQL5Dialect

# MyBatis
mybatis:
  # 配置包别名
  typeAliasesPackage: com.demo.mybatisjpa.entity
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
  mapperLocations: classpath*:mapper/*Mapper.xml
  configuration:
    # 下划线转驼峰命名法
    map-underscore-to-camel-case: true
    # 打印日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

2、创建实体类

由于我们还是想借用jpa之手,将数据库表给创建起来,所以实体类的创建依然是jpa的标配。在项目中创建entity目录,并新建User类
在这里插入图片描述

3、新建userdao接口,并实现JpaRepository

在这里插入图片描述
4、测试jpa的可用性
在test目录下进行测试,以下是测试代码

package com.demo.mybatisjpa;

import com.demo.mybatisjpa.dao.UserDao;
import com.demo.mybatisjpa.entity.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class MybatisJpaApplicationTests {

    @Autowired
    private UserDao userDao;

    @Test
    void jpaTest() {
        //初始化数据
        User user = new User();
        user.setUserName("陈锐敏");
        user.setAge(23);

        //调用save方法保存
        userDao.save(user);
    }
}

如没意外,就可以看到保存成功,发现,未使用mybatis情况下,jpa正常使用,下面就可以开始整合mybatis
在这里插入图片描述
在这里插入图片描述
5、新建mybatis的关键,映射文件(xml)
在resources目录下新建mapper文件夹,并且写入以下配置
在这里插入图片描述

6、编写我们的baseDao接口

由于这是通用的,每个接口都将会有,所以索性提取出来
springUtis可以在手动获取到spring容器的类。关于我为什么没用注解注入形式,这里你可以试试用注入会有什么错误,另外关于SqlSessionTemplate,我就不做过多介绍,可看下这篇博客
一文搞懂mybatis中SqlSession、SqlSessionTemplate等之间的关系
总而言之呢,有了SqlSessionTemplate,我们就可以使用原始的方式去操作mybatis,这里我只是演示一个,单纯的获取数据库的所有数据,可自己继续拓展
在这里插入图片描述

7、改造我们的UserDao

大家会发现,这里还是接口,可是,我却有方法体,这一点不疑惑,早在jdk8,java的接口就实现了默认实现方式,我得jpa整合mybatis就是于这一点得于简单实现
在这里插入图片描述

8、开始测试mybatis的方法

编写如下的测试方法
在这里插入图片描述
执行成功,同时我们也可以发现,是确实是通过mybatis执行的
在这里插入图片描述

9、demo地址

最后放出demo地址,参考
https://gitee.com/ruige2826/mybatis-jpa

发布了40 篇原创文章 · 获赞 11 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Chen_RuiMin/article/details/104144442