Spring Boot的数据访问:CrudRepository接口的使用
示例 使用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==
Spring Boot的数据访问:CrudRepository接口的使用的更多相关文章
- (8)Spring Boot 与数据访问
文章目录 简介 整合基本的JDBC与数据源 整合 druid 数据源 整合 mybatis 简介 对于数据访问层,无论是 SQL 还是 NOSQL ,Spring Boot 默认都采用整合 Sprin ...
- Spring Boot的数据访问 之Spring Boot + jpa的demo
1. 快速地创建一个项目,pom中选择如下 <?xml version="1.0" encoding="UTF-8"?> <project x ...
- Spring Boot框架 - 数据访问 - 整合Mybatis
一.新建Spring Boot项目 注意:创建的时候勾选Mybatis依赖,pom文件如下 <dependency> <groupId>org.mybatis.spring.b ...
- Spring Boot实现数据访问计数器
1.数据访问计数器 在Spring Boot项目中,有时需要数据访问计数器.大致有下列三种情形: 1)纯计数:如登录的密码错误计数,超过门限N次,则表示计数器满,此时可进行下一步处理,如锁定该账户 ...
- Spring Boot框架 - 数据访问 - JDBC&自动配置
一.新建Spring Boot 工程 特殊勾选数据库相关两个依赖 Mysql Driver — 数据库驱动 Spring Data JDBC 二.配置文件application.properties ...
- Spring MVC或Spring Boot配置默认访问页面不生效?
相信在开发项目过程中,设置默认访问页面应该都用过.但是有时候设置了却不起作用.你知道是什么原因吗?今天就来说说我遇到的问题. 首先说说配置默认访问页面有哪几种方式. 1.tomcat配置默认访问页面 ...
- Spring Boot启动过程及回调接口汇总
Spring Boot启动过程及回调接口汇总 链接: https://www.itcodemonkey.com/article/1431.html 来自:chanjarster (Daniel Qia ...
- Spring boot未授权访问造成的数据库外联
一.spring boot 日常测试或攻防演练中像shiro,fastjson等漏洞已经越来越少了,但是随着spring boot框架的广泛使用,spring boot带来的安全问题也越来越多,本文仅 ...
- spring boot使用swagger生成api接口文档
前言 在之前的文章中,使用mybatis-plus生成了对应的包,在此基础上,我们针对项目的api接口,添加swagger配置和注解,生成swagger接口文档 具体可以查看本站spring boot ...
随机推荐
- go 依赖工具glide
添加gopath/bin目录到环境变量下 安装glide $ go get github.com/Masterminds/glide $ go install github.com/Mastermin ...
- 测试常用的sql语句总结
测试中常用的sql语句,排名部分先后 1. 查询 SELECT * FROM 表名称 SELECT COUNT(DISTINCT column_name) FROM table_name 指定列的不同 ...
- HDU 3848 CC On The Tree(树形dp)
http://acm.hdu.edu.cn/showproblem.php?pid=3848 题意: 求一棵树上两个叶子结点之间的最短距离. 思路: 两个叶子节点之间一定会经过非叶子节点,除非只有两个 ...
- maven springMVC SSM框架中 出现的406 (Not Acceptable)
首先,需要清楚,http state 406代表什么意思: 406是HTTP协议状态码的一种,表示无法使用请求的特性来响应请求的网页.一般指客户端浏览器不接受所请求页面的MIME类型. 出现这样的错误 ...
- hibernate事务规范写法
@Test public void testTx() { SessionFactory sessionFactory = null; Session session = null; Transacti ...
- 使用pipeline减少与redis交互次数
1.redis_pipeline=redis_cli.pipeline() 2.redis_pipeline.setex()此语句可写多条 3.redis_pipeline.execute() # # ...
- lua中产生 1 - n 之间不重复随机数
local function GetRandomNumList(len) local rsList = {} ,len do table.insert(rsList,i) end local num, ...
- 注册表的作用、bat文件中REG ADD命令添加注册表项以及bat
注册表的用途与设置 注册表是windows的核心,里面储存着大量的系统信息,说白了就是一个庞大的数据库.如果你不懂什么是数据库,那没关系,不影响你了解注册表,不过最好对数据库有所了解.注册表里面所有的 ...
- 数据结构(C语言版)-第8章 排序
8.1 概述 1. 什么是排序? 将一组杂乱无章的数据按一定规律顺次排列起来. 2. 排序的目的是什么? ——便于查找! 3. 什么叫内部排序?什么叫外部排序? 若待排序记录都在内存中,称为内部排序 ...
- ubuntu 下Visual Studio Code 安装
Build in Visual Studio Code Install VSCode The easiest way to install for Debian/Ubuntu based distri ...