在Idea开发spring boot 2.7.x 过程中,Mybatis和Jpa同时使用的设置

文章详细介绍了如何在SpringBoot项目中同时集成MyBatis和JPA,包括Gradle依赖配置、application.properties中的数据源和MyBatis/JPA设置、启动类的注解以及Entity实体和Repository接口的定义。此外,还展示了MapperXML文件的内容,并提供了测试类来验证配置的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、gradle设置

   implementation "tk.mybatis:mapper-spring-boot-starter:4.2.2"
   implementation "org.springframework.boot:spring-boot-starter-data-jpa:2.7.9"
   其他自己添加

2、application.properties设置

############################################################
## 配置主库的相关连接信息(mysql) ##
############################################################
spring.datasource.name=datasource
spring.datasource.url=jdbc:mysql://x.x.x.x:3306/datasource?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=username
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
############################################################
## 主库mybatis配置  ##
############################################################
## 该配置节点为独立的节点,有很多同学容易将这个配置放在spring的节点下,导致配置无法被识别
mybatis.mapper-locations=classpath:mapper/*.xml
#注意:一定要对应mapper映射xml文件的所在路径
# 注册实体类(多个package里面)
mybatis.type-aliases-package=org.springboot.test.entity
#开启驼峰命名转换
mybatis.configuration.map-underscore-to-camel-case=true
# 通用Mapper 配置
#mapper.identity=MYSQL
mapper.mappers=tk.mybatis.mapper.common.Mapper
mapper.notEmpty=true
# 分页插件配置
#pagehelper.helperDialect=mysql
#pagehelper.reasonable=true
#pagehelper.supportMethodsArguments=true
#pagehelper.params=count=countSql
############################################################
## 主库JPA配置  ##
############################################################
#开发工具的控制台是否显示SQL语句,建议打开
spring.jpa.show-sql=true
#hibernate的配置属性,主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置见下表:
# 控制是否可以基于程序中Entity的定义自动创建或者修改DB中表结构(none、create、update、create-drop、validate等的不同)
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#Java代码实体字段命名与数据库表结构字段之间的名称映射策略(驼峰转为下划线)
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
#下面配置开启后,会禁止将驼峰转为下划线
#spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.open-in-view=false
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true

备注:数据库连接池采用druid还是hikari,自己选择.

3、spring boot 启动设置

 // 使用tkMapper的包扫描器注解
@MapperScan(basePackages = {"org.springboot.test.mapper"})
// 可选,指定扫描的表映射实体Entity的目录,如果不指定,会扫描全部目录
@EntityScan("org.springboot.test.entity")
// 可选,指定扫描的表repository目录,如果不指定,会扫描全部目录
@EnableJpaRepositories(basePackages = {"org.springboot.test.repository"})
// 可选,开启JPA auditing能力,可以自动赋值一些字段,比如创建时间、最后一次修改时间等等
@EnableJpaAuditing
@SpringBootApplication 
public class Application {  
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

4、Entity实例

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
@AllArgsConstructor// : 注在类上,提供类的全参构造
@NoArgsConstructor //: 注在类上,提供类的无参构造
@ToString
@Data
@Entity
// 不加@Table,则自动创建表时,为驼峰原则创建user_entity
// @Table(name = "user_entity")
@EntityListeners(value = AuditingEntityListener.class)
public class UsersEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String workId;
    private String userName;
    @ManyToOne(optional = false)
    @JoinColumn(name = "department")
    private DepartmentEntity department;
    @CreatedDate
    private Date createTime;
    @LastModifiedDate
    private Date updateTime;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import javax.persistence.*;
import java.util.Date;
@AllArgsConstructor// : 注在类上,提供类的全参构造
@NoArgsConstructor //: 注在类上,提供类的无参构造
@ToString
@Data
@Entity
// @Table(name = "department_entity")
@EntityListeners(value = AuditingEntityListener.class)
public class DepartmentEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String deptName;
    @CreatedDate
    private Date createTime;
    @LastModifiedDate
    private Date updateTime;
}

5、Jpa:Repository 代码

import org.springboot.test.UsersEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UsersEntityRepository extends JpaRepository<UsersEntity, Integer> {
    // 根据id查询
    @Query("select a from UsersEntity a where a.id = ?1")
    UsersEntity findById(String id);

    @Query("select a from UsersEntity a where a.workId = ?1")
    List<UsersEntity> findByWorkId(String workId);

    // 根据名称查询
    @Query("select a from UsersEntity a where a.userName = ?1")
    List<UsersEntity> findByUserName(String userName);
}
import org.springboot.test.DepartmentEntity;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;

import java.util.List;
@Repository
public interface DepartmentEntityRepository extends JpaRepository<DepartmentEntity, Integer> {
    // 根据id查询
    @Query("select a from DepartmentEntity a where a.id = ?1")
    DepartmentEntity findById(String id);

    // 根据名称查询
    @Query("select a from DepartmentEntity a where a.deptName = ?1")
    List<DepartmentEntity> findByDeptName(String deptName);

}

6、MyBatis:Mapper代码

package org.springboot.test.mapper;

import org.apache.ibatis.annotations.Select;
import org.springboot.test.ActivitySet;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;
import java.util.Map;

@Mapper
public interface UsersEntityMapper {
    int deleteByPrimaryKey(Integer id);
    int insert(UsersEntity row);
    int insertSelective(UsersEntity row);
    UsersEntity selectByPrimaryKey(Integer id);
    int updateByPrimaryKeySelective(UsersEntity row);
    int updateByPrimaryKey(UsersEntity row);
    UsersEntity getPocGpsById(Integer id);
    /**
     * 通过id获取应用
     *
     * @param workId
     * @return
     */
    List<UsersEntity> getUsersEntityByWorkId(String workId);

    /**
     * 查询所有应用
     *
     * @return
     */
    List<UsersEntity> getAll();

    @Select("select * from UsersEntity where userName = #{userName}")
    UsersEntity selectByUserName(String userName);
}
package org.springboot.test.mapper;

import org.apache.ibatis.annotations.Select;
import org.springboot.test.ActivitySet;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;
import java.util.Map;
@Mapper
public interface DepartmentEntityMapper {
    int deleteByPrimaryKey(Integer id);
    int insert(DepartmentEntity row);
    int insertSelective(DepartmentEntity row);
    DepartmentEntity selectByPrimaryKey(Integer id);
    int updateByPrimaryKeySelective(DepartmentEntity row);
    int updateByPrimaryKey(DepartmentEntity row);
    DepartmentEntity getPocGpsById(Integer id);  

    /**
     * 查询所有应用
     *
     * @return
     */
    List<DepartmentEntity> getAll();
    @Select("select * from DepartmentEntity where deptName = #{deptName}")
    DepartmentEntity selectByDeptName(String deptName);
}

7、MyBatis:Resources下的Mapper文件

UserEntityMapper.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="org.springboot.test.UsersEntityMapper">
    <sql id="Base_Column_List">
        id, create_time, update_time, user_name, work_id, department
    </sql>
    <select id="getById" parameterType="java.lang.Integer"  resultType="UsersEntity">
        select
        <include refid="Base_Column_List"/>
        from user_entity
        where id = #{id,jdbcType=INTEGER}
    </select>
    <select id="getByWorkId" parameterType="java.lang.String" resultType="UsersEntity">
        select
        <include refid="Base_Column_List"/>
        from user_entity
        where work_id = #{work_id,jdbcType=VARCHAR}
    </select>
    <select id="getByUserName" parameterType="java.lang.String" resultType="UsersEntity">
        select
        <include refid="Base_Column_List"/>
        from user_entity
        where user_name = #{user_name,jdbcType=VARCHAR}
    </select>
    <select id="getAll" resultType="UsersEntity">
        select *
        from user_entity
    </select>

</mapper>

DepartmentEntityMapper.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="org.springboot.test.mapper.DepartmentEntityMapper">
    <sql id="Base_Column_List">
        id, create_time, dept_name, update_time
    </sql>
    <select id="getById" parameterType="java.lang.Integer"  resultType="DepartmentEntity">
        select
        <include refid="Base_Column_List"/>
        from department_entity
        where id = #{id,jdbcType=INTEGER}
    </select>
    <select id="getByDeptName" parameterType="java.lang.String" resultType="DepartmentEntity">
        select
        <include refid="Base_Column_List"/>
        from department_entity
        where dept_name = #{dept_name,jdbcType=VARCHAR}
    </select>
    <select id="getAll" resultType="DepartmentEntity">
        select *
        from department_entity
    </select>

</mapper>

8、测试:编写测试类

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class) // 启动类.class
public class Test {
    @Autowired
    UserEntityJpaService userService;
    @Autowired
    DepartmentEntityJpaService deptJpaService;
    @Autowired
    private UserEntityMapper userMapper;    
    @Autowired
    private DepartmentEntityMapper deptMapper;    
    @Test
    public void testJpa() {     
        List<UserEntity> userList = userService.getAll();
        System.out.println(userList);
        List<DepartmentEntity> deptList = deptJpaService.getAll();
        System.out.println(deptList);
    }

    @Test
    public void testMapper() {
        List<UserEntity> userList = userMapper.getAll();
        System.out.println(userList);
        List<DepartmentEntity> deptList = deptMapper.getAll();
        System.out.println(deptList);
    }
}

备注:service自个实现。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值