刚开始学习spring框架的时候,使用的是spring data jpa,这是第一个接触的orm框架,一开始使用的时候可以用orm框架为之兴奋不已,觉得这个框架厉害的不行,太强了。后来发现国内流行的是mybatis,jpa速度在mybatis、beetlsql、hibernate里是最慢的一个。。。
beetlsql官网对比
http://ibeetl.com/guide/#beetlsql
不过也不影响开始项目的使用。
jpa
jpa orm框架使用的是hibernate框架
在国外很流行的一个持久层框架
国内流行的是mybatis
我在其他项目使用的是国人写的另一个框架 beetlsql
依赖
jpa依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
其他的依赖:mysql-jdbc、spring-boot
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
</dependencies>
创建实体
创建一个user实体
package com.wys.read.domain;
import com.fasterxml.jackson.annotation.JsonIgnore;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
/**
* @author: wys
* @created in 9:47 2018/10/6
* user实体
*/
// 实体注解
@Entity
public class User {
/**
* 实体id,自增主键
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
/**
* 用户名字
*/
@NotNull // 不空注解
@Size(min = 1, max = 50) // 长度
@Column(length = 50, unique = true, nullable = false) // 唯一约束
private String username;
/**
* 密码
*/
@JsonIgnore
@NotNull // 不空注解
@Size(min = 60, max = 60) // 长度
@Column(name = "password", length = 60, nullable = false) // 唯一约束
private String password;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
自动映射数据库
当实体创建好后,jpa在数据库中是自动帮你创建表的,所以不用在数据库中再次创建对应的表。
不过要注意的是,如果项目跑起来,数据库中没有对应的表,可能就是你的实体没有写对,没写好,可以回去检查下
创建user的repository
package com.wys.read.repository;
import com.wys.read.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
/**
* @author: wys
* @date: Created in 9:51 2018/10/6
*/
// repository注解
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
1.Repository注解
说明这个类是实体的Repository
2.命名方式是实体+Repository
3.继承JpaRepository
继承的泛型两个参数
第一个:实体
第二个:实体的主键数据类型
使用user实体的orm
1.service注入Repository Bean
@Autowired
private UserRepository userRepository;
增加通过名字查找用户方法
User findUserByUsername(String username);
方法名创建根据框架的方法命名规则来写
这个作者有命名规则
https://blog.csdn.net/sbin456/article/details/53304148/
自定义方法
比如分页获取user
@Query(nativeQuery = true, value = "select * from user limit ?1,?2")
List<User> findUserByPage(int page, int size);
写好方法名
@Query
自定义方法
nativeQuery = true
原生sql语句编写
value = ""
原生sql语句