Spring Boot的数据访问:CrudRepository接口的使用

示例 使用CrudRepository接口访问数据

创建一个新的Maven项目,命名为crudrepositorytest。按照Maven项目的规范,在src/main/下新建一个名为resources的Folder。

(1) 修改pom.xml文件。

在pom.xml文件中增加web开发的启动器配置如下:

org.springframework.boot

spring-boot-starter-web

然后添加数据库驱动依赖配置:

mysql

mysql-connector-java

最后需要加spring-boot-starter-data-jpa,它是Spring Boot项目访问数据库的核心依赖配置,加入此配置后,系统会自动导入Spring Data相关的核心数据访问接口包,以及Hibernate框架相关的依赖包,该配置如下:

org.springframework.boot

spring-boot-starter-data-jpa

修改后的完整pom.xml文件如下:

程序清单:codes/04/crudreposotorytest/pom.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

org.fkit

crudreposotorytest

0.0.1-SNAPSHOT

jar

crudreposotorytest

http://maven.apache.org

org.springframework.boot

spring-boot-starter-parent

1.5.6.RELEASE

UTF-8

org.springframework.boot

spring-boot-starter-web

mysql

mysql-connector-java

org.springframework.boot

spring-boot-starter-data-jpa

Spring Boot的数据访问:CrudRepository接口的使用_第1张图片

Java

(2) 配置基本属性

在src/main/resources包下新建一个全局配置文件,命名为application.properties,在该配置文件中配置数据源和jpa相关的属性:

程序清单:codes/04/crudreposotorytest/src/main/resources/application.properties

########################################################

### 数据源信息配置

########################################################

# 数据库地址

spring.datasource.url = jdbc:mysql://localhost:3306/springdatajpa

# 用户名

spring.datasource.username = root

# 密码

spring.datasource.password =

# 数据库驱动

spring.datasource.driverClassName = com.mysql.jdbc.Driver

# 指定连接池中最大的活跃连接数.

spring.datasource.max-active=20

# 指定连接池最大的空闲连接数量.

spring.datasource.max-idle=8

# 指定必须保持连接的最小值

spring.datasource.min-idle=8

# 指定启动连接池时,初始建立的连接数量

spring.datasource.initial-size=10

########################################################

### JPA持久化配置

########################################################

# 指定数据库的类型

spring.jpa.database = MYSQL

# 指定是否需要在日志中显示sql语句

spring.jpa.show-sql = true

# 指定自动创建|更新|验证数据库表结构等配置,配置成update

# 表示如果数据库中存在持久化类对应的表就不创建,不存在就创建对应的表

spring.jpa.hibernate.ddl-auto = update

# Naming strategy

# 指定命名策略

spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy

# 指定数据库方言

spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

Spring Boot的数据访问:CrudRepository接口的使用_第2张图片

Java

(3) 创建持久化类

在org.fkit.crudreposotorytest包下新建四个包,依次是bean(放置持久化类的)、controller(控制器)、repository(定义数据访问接口的包)、service(业务逻辑处理类),在bean包创建一个持久化了类User.java其代码如下:

程序清单:codes/04/crudreposotorytest/src/main/java/org/fkit/crudreposotorytest/bean/User.java

package org.fkit.crudreposotorytest.bean;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

@Entity

// 用于标记持久化类,Spring Boot项目加载后会自动根据持久化类建表

public class User{

/**

* 使用@Id指定主键. 使用代码@GeneratedValue(strategy=GenerationType.AUTO)

* 指定主键的生成策略,mysql默认的是自增长。

*

*/

@Id

@GeneratedValue(strategy =GenerationType.AUTO)

private int id;// 主键.

private String userName;// 姓名. cat_name

private String loginName;

private char sex;// 性别

private int age;// 年龄

public int getId(){

return id;

}

public void setId(int id){

this.id = id;

}

public String getUserName(){

return userName;

}

public void setUserName(String userName){

this.userName = userName;

}

public String getLoginName(){

return loginName;

}

public void setLoginName(String loginName){

this.loginName = loginName;

}

public char getSex(){

return sex;

}

public void setSex(char sex){

this.sex = sex;

}

public int getAge(){

return age;

}

public void setAge(int age){

this.age = age;

}

}

Spring Boot的数据访问:CrudRepository接口的使用_第3张图片

Java

(4) 定义数据访问层接口

在org.fkit.crudreposotorytest.repository包下新建一个接口命名为UserRepository,让该接口继承CrudRepository接口,以持久化对象User作为CrudRepository的第一个类型参数,表示当前所操作的持久化对象类型,Integer作为CrudRepository的第二个类型参数,用于指定ID类型,完整代码结构如下:

程序清单:

codes/04/crudreposotorytest/src/main/java/org/fkit/crudreposotorytest/repository/UserRepository.java

package org.fkit.crudreposotorytest.repository;

import org.fkit.crudreposotorytest.bean.User;

import org.springframework.data.repository.CrudRepository;

public interface UserRepository extends CrudRepository{

}

在Spring Boot项目中数据访问层无需提供实现,直接继承数据访问接口即可。

(5) 定义业务层类

程序清单:codes/04/crudreposotorytest/src/main/java/org/fkit/crudreposotorytest/service/UserService.javapackage org.fkit.crudreposotorytest.service;

import javax.annotation.Resource;

import javax.transaction.Transactional;

import org.fkit.crudreposotorytest.bean.User;

import org.fkit.crudreposotorytest.repository.UserRepository;

import org.springframework.stereotype.Service;

@Service

public class UserService{

@Resource

private UserRepository userRepository;

/**

* save,update ,delete 方法需要绑定事务. 使用@Transactional进行事务的绑定.

*

* @param User

* 保存对象

*/

@Transactional

public void save(User User){

userRepository.save(

User);

}

/**

* 根据id删除对象

*

* @param id

*/

@Transactional

public void delete(int id){

userRepository.delete(id);

}

/**

* 查询数据

*

* @return

*/

public Iterable getAll(){

return userRepository.findAll();

}

/**

* 修改用户对象数据

*

* @param user

*/

@Transactional

public void update(User user){

// 先根据要修改的对象id查询出对应的持久化对象

User sessionUser = userRepository.findOne(user.getId());

// 直接调用持久化对象的set方法修改对象的数据

sessionUser.setUserName(user.getUserName());

sessionUser.setLoginName(user.getLoginName());

}

}

在业务层中需要注入数据访问层对象,在上述代码中我们是通过@Resources注解将UserRepository接口对应的实现类注入进来的,从这里可以看出,只要数据访问层接口实现了CrudReposity,Spring Boot项目会自动扫描该类并为该类创建实现类对象。@Transactional注解用于申明方法的事物特性。

Spring Boot的数据访问:CrudRepository接口的使用_第4张图片

Java

(6) 定义控制器类

在org.fkit.crudreposotorytest.controller包先新建一个控制器类命名为UserController,其代码如下:

程序清单:codes/04/crudreposotorytest/src/main/java/org/fkit/crudreposotorytest/controller/UserController.javapackage org.fkit.crudreposotorytest.controller;

import javax.annotation.Resource;

import org.fkit.crudreposotorytest.bean.User;

import org.fkit.crudreposotorytest.service.UserService;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

@RequestMapping("/user")

public class UserController{

@Resource

private UserService userService;

@RequestMapping("/save")

public String save(){

User user =newUser();

user.setLoginName("dlei");

user.setUserName("徐磊");

user.setSex('男');

user.setAge(3);

userService.save(user);

return"保存数据成功!";

}

@RequestMapping("/update")

public String update(){

User user =new User();

user.setId(1);

user.setUserName("孙悟空");

user.setLoginName("swk");

userService.update(user);

return"修改成功!";

}

@RequestMapping

("/delete")

public String delete(){

userService.delete(1);

return"删除数据成功!";

}

@RequestMapping("/getAll")

public Iterable getAll(){

// 查询所有的用户数据

return userService.getAll

();

}

}

Spring Boot的数据访问:CrudRepository接口的使用_第5张图片

Java

(7)测试应用

启动Mysql数据库,在数据库中创建名称为springdatajpa的数据库,执行脚本如下:

CREATE DATABASE springdatajpa;

然后在org.fkit.crudreposotorytest包下新建App.java启动类,App.java和之前的项目一致,此处不再赘述。右键该类运行main方法。Spring Boot项目启动后,先去数据库查看是否成功自动创建了user表,然后在浏览器输入URL来测试应用。

http://127.0.0.1:8080/user/save

请求会提交到UserController类的save方法进行处理,如果该方法执行保存用户成功即可返回字符串“保存用户成功!”,如下图所示:

图4.1 保存数据

查看数据库的表信息如下:

Spring Boot的数据访问:CrudRepository接口的使用_第6张图片

Java

图4.2 保存数据后的表信息

Java

测试修改用户,在浏览器中输入如下地址:

http://127.0.0.1:8080/user/update

请求会提交到UserController类的update方法进行处理,如果该方法执行修改用户成功即可返回字符串“修改成功”,如下图所示:

Spring Boot的数据访问:CrudRepository接口的使用_第7张图片

Java

图4.3 修改用户

Java

查看数据库的表信息如下:

图4.4 修改数据后的表信息

测试查询所有用户数据,在浏览器中输入:

http://127.0.0.1:8080/user/getAll

请求会提交到UserController类的getAll方法进行处理,如果该方法执行查询所有用户成功即可返查询到的所有用户信息的json字符串格式,如下图所示:

Spring Boot的数据访问:CrudRepository接口的使用_第8张图片

Java

图4.5 查询所有用户数据

测试删除用户数据,在浏览器中输入:

http://127.0.0.1:8080/user/delete

请求会提交到UserController类的delete方法进行处理,如下图所示:

Spring Boot的数据访问:CrudRepository接口的使用_第9张图片

Java

图4.6 删除用户信息

查看数据库的表信息如下:

Java

以上所述是小编给大家介绍的Spring Boot的数据访问:CrudRepository接口的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的!

Java学习资料获取(复制下段连接至浏览器即可)
data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==

你可能感兴趣的:(Java,Java,编程语言,软件,技术)