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自个实现。