在Spring Boot应用中,数据访问层是一个核心组件,它负责应用程序与数据库之间的交互。Spring Boot支持多种数据访问技术,其中JPA(Java Persistence API)和MyBatis是两种非常流行的选择。每种技术都有其优势和适用场景,并且Spring Boot为它们提供了良好的集成支持。
JPA(Java Persistence API)
JPA是一种规范,它定义了对象/关系映射(ORM)的标准,允许开发者将Java对象映射到数据库表,并处理对象生命周期和关系。Spring Data JPA 是Spring Boot中用于简化JPA数据访问的一个模块。
JPA关联
在JPA中,实体之间的关联通常通过映射注解(如@OneToOne
、@OneToMany
、@ManyToOne
、@ManyToMany
)来实现。这些注解定义了实体之间的关系以及如何在数据库中表示这些关系。
//@Entity
//@Table(name = "sys_user")
@TableName("sys_user")
@Data
//@NamedQueries(@NamedQuery(name = "User.findUserByName",query = "select u from User u where u.usrName = ?1"))
public class User implements Serializable {
// @Id
// @GeneratedValue(strategy = GenerationType.IDENTITY)
// @Column(name = "usr_id")
@TableId(type = IdType.AUTO)
@TableField("usr_id")
private Long usrId;
// @Column(name = "usr_name")
@TableField("usr_name")
private String usrName;
// @Column(name = "usr_password")
private String usrPassword;
// @Column(name = "usr_role_id")
private Long usrRoleId;
// @ManyToOne(targetEntity = Role.class)
// @JoinColumn(name = "usr_role_id")
// private Role role;
// @Column(name = "usr_flag")
private Integer usrFlag;
public User() {
}
// public User(String usrName, String usrPassword, Role role, Integer usrFlag) {
// this.usrName = usrName;
// this.usrPassword = usrPassword;
// this.role = role;
// this.usrFlag = usrFlag;
// }
// public User(String usrName, String usrPassword, Long usrRoleId, Integer usrFlag) {
// this.usrName = usrName;
// this.usrPassword = usrPassword;
// this.usrRoleId = usrRoleId;
// this.usrFlag = usrFlag;
// }
//
//
// public Long getUsrId() {
// return usrId;
// }
//
// public void setUsrId(Long usrId) {
// this.usrId = usrId;
// }
//
// public String getUsrName() {
// return usrName;
// }
//
// public void setUsrName(String usrName) {
// this.usrName = usrName;
// }
//
// public String getUsrPassword() {
// return usrPassword;
// }
//
// public void setUsrPassword(String usrPassword) {
// this.usrPassword = usrPassword;
// }
//
// public Role getRole() {
// return role;
// }
//
// public void setRole(Role role) {
// this.role = role;
// }
//
// public Long getUsrRoleId() {
// return usrRoleId;
// }
//
// public void setUsrRoleId(Long usrRoleId) {
// this.usrRoleId = usrRoleId;
// }
//
// public Integer getUsrFlag() {
// return usrFlag;
// }
//
// public void setUsrFlag(Integer usrFlag) {
// this.usrFlag = usrFlag;
// }
在application.properties中配置
spring.application.name=T369-Spring-Boot
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/crm?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
#??JPA(Hibernate)????
#spring.jpa.properties.hibernate.hbm2ddl.auto=update
#spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
#spring.jpa.show-sql=true
#spring.jpa.properties.hibernate.format_sql=true
#mybatis.config-location=classpath:mybatis/mybatis-config.xml
#mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
#mybatis.type-aliases-package=com.ktjiaoyu.crm.entity
logging.level.root=warn
logging.level.com.ktjiaoyu.crm.mapper=trace
logging.pattern.console=%p%m%n
在启动类中需要使用
package com.ktjiaoyu.crm;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.ktjiaoyu.crm.mapper")
public class T369SpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(T369SpringBootApplication.class, args);
}
}
总结
- JPA提供了强大的ORM支持,使得对象与数据库之间的映射变得简单和自动化。JPA关联通过注解实现,适合那些希望减少数据库操作代码,并依赖JPA提供者(如Hibernate)来处理复杂场景的情况。
- MyBatis则提供了更高的灵活性和控制能力,允许开发者编写具体的SQL语句,并通过映射文件精确地控制如何将查询结果映射到Java对象。MyBatis适合那些需要高度优化SQL性能,或者需要在复杂查询中保持对SQL完全控制的情况。