示例 使用CrudRepository接口访问数据
创建一个新的Maven项目,命名为crudrepositorytest。按照Maven项目的规范,在src/main/下新建一个名为resources的Folder。
(1) 修改pom.xml文件。
在pom.xml文件中增加web开发的启动器配置如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
然后添加数据库驱动依赖配置:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
最后需要加spring-boot-starter-data-jpa,它是Spring Boot项目访问数据库的核心依赖配置,加入此配置后,系统会自动导入Spring Data相关的核心数据访问接口包,以及Hibernate框架相关的依赖包,该配置如下:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
修改后的完整pom.xml文件如下:
程序清单:codes/04/crudreposotorytest/pom.xml
<projectxmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<groupId>org.fkit</groupId>
<artifactId>crudreposotorytest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>crudreposotorytest</name>
<url>http://maven.apache.org</url>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
</parent>
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 指定一下jdk的版本 ,这里我们使用jdk 1.8 ->
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- spring-boot-starter-web: MVC,AOP的依赖包.... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- <version></version> 由于我们在上面指定了 parent(spring boot) -->
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
</project>
</project>
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
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;
}
}
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<User,Integer>{
}
在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<User> 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注解用于申明方法的事物特性。
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<User> getAll(){
// 查询所有的用户数据
return userService.getAll
();
}
}
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 保存数据
查看数据库的表信息如下:
Java
图4.2 保存数据后的表信息
Java
测试修改用户,在浏览器中输入如下地址:
http://127.0.0.1:8080/user/update
请求会提交到UserController类的update方法进行处理,如果该方法执行修改用户成功即可返回字符串“修改成功”,如下图所示:
Java
图4.3 修改用户
Java
查看数据库的表信息如下:
图4.4 修改数据后的表信息
测试查询所有用户数据,在浏览器中输入:
http://127.0.0.1:8080/user/getAll
请求会提交到UserController类的getAll方法进行处理,如果该方法执行查询所有用户成功即可返查询到的所有用户信息的json字符串格式,如下图所示:
Java
图4.5 查询所有用户数据
测试删除用户数据,在浏览器中输入:
http://127.0.0.1:8080/user/delete
请求会提交到UserController类的delete方法进行处理,如下图所示:
Java
图4.6 删除用户信息
查看数据库的表信息如下:
Java
以上所述是小编给大家介绍的Spring Boot的数据访问:CrudRepository接口的使用,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的!
Java学习资料获取(复制下段连接至浏览器即可)
data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==
本文来自博客园,作者:茄子_2008,转载请注明原文链接:https://www.cnblogs.com/xd502djj/p/9380278.html