Spring DAata JPA的优势
开发中对数据库的操作大多为增删改查,开发者重复大量且枯燥的代码来实现这部分逻辑
Spring-data-jpa**使数据访问层变成只是一层接口的编写方式。**
Spring-data-jpa 只需要一个继承了JpaRepository的接口就能实现数据的访问
1.首先导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
2.编写application.yml配置文件
我没有使用c3p0和druid
#数据库连接配置
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/db_a?useUnicode=true&characterEncoding=UTF-8
username: root
# Spring-data-jpa依赖于Hibernate
#spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置属性
#主要作用是:自动创建、更新、验证数据库表结构
jpa:
hibernate:
ddl-auto: update
show-sql: true
Spring-data-jpa依赖于Hibernate
spring.jpa.properties.hibernate.hbm2ddl.auto是hibernate的配置属性
主要作用是:自动创建、更新、验证数据库表结构
参数配置介绍:
- create
每次加载hibernate时都会删除上一次的生成的表,
然后根据model类重新生成表,哪怕没有改变,
这是导致数据库表数据丢失的一个重要原因。
- create-drop
每次加载hibernate时根据model类生成表,但sessionFactory关闭时,表自动删除。
- update(最常用)
首次加载hibernate时根据model类自动建立起表结构(要先建立数据库)
以后加载hibernate时根据model类自动更新表结构,即使表结构变了,老数据不删除。
注意:当部署到服务器后,表结构不会立即建立起来,应用首次运行后才会建立表结构。
- validate
每次加载hibernate时,验证创建数据库表结构,和数据库表比较,不创建新表,会插入新值。
3.创建实体类
@Data
@Entity
@Table(name = "T_USER")
public class User implements Serializable {
@Id
@GeneratedValue
private Integer userId;
@Column(name = "user_name",nullable = false)
private String userName;
@Column(name = "user_password",nullable = false)
private String userPassword;
public User(Integer userId, String userName, String userPassword) {
this.userId = userId;
this.userName = userName;
this.userPassword = userPassword;
}
public User(String userName, String userPassword) {
this.userName = userName;
this.userPassword = userPassword;
}
public User() {
}
@Override
public String toString() {
return "User{" +
"userId=" + userId +
", userName='" + userName + '\'' +
", userPassword='" + userPassword + '\'' +
'}';
}
}
@Data注解是 lombok 依赖包下的注解,它可以自动帮我们生成set/getter方法,简化代码量。有兴趣的可以详细了解,这里不做多解释。
其他的注解都是引用
javax.persistence
不要引用错了,引用错了会在启动时报一个 BeanCreationException的错误
4.编写Dao接口
4.1.一般的,对于数据访问层,需要创建一个接口来规定对数据操作的一系列方法,再创建DAO来实现此接口,
从而实现对数据库的访问.
4.2.Spring-data-jpa,对数据访问,只需继承Spring-data-jpa提供的接口(这里以JpaRepository为例)
即可完成对数据的访问
public interface UserDao extends JpaRepository<User,Integer> {
@Query("from User")
List<User> findUser();
}
以上即可实现数据库的访问,无需再写实现类
JpaRepository接口实现的数据库操作方法
JpaRepository<对象,主键所使用的数据类型>
5.编写Controller类
@Controller
public class UserController {
@Resource
private UserDao userDao;
@RequestMapping("/getUser")
public ModelAndView getUser(){
ModelAndView mv = new ModelAndView();
mv.addObject("user",userDao.findUser());
mv.setViewName("index");
return mv;
}
}
即可跑程序运行,如果大家还是习惯写service类的话,也可以去创建的,操作都跟集成mybatis是一样的