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 ...
随机推荐
- 【Hadoop 分布式部署 四:配置Hadoop 2.x 中主节点(NN和RM)到从节点的SSH无密码登录】
******************* 一定要使这三台机器的用户名相同,安装目录相同 ************* SSH 无密钥登录的简单介绍(之前再搭 ...
- Lintcode452-Remove Linked List Elements-Easy
Remove Linked List Elements Remove all elements from a linked list of integers that have value val. ...
- UVA12558 埃及分数
#include<iostream> #include<cstdio> #include<set> #include<memory.h> using n ...
- jQuery页面加载初始化常用的三种方法
当页面打开时我们需要执行一些操作,这个时候如果我们选择使用jquery的话,需要重写他的3中方法,自我感觉没什么区 别,看个人喜好了,第二种感觉比较简单明了: 第一种: 复制代码代码如下: <s ...
- 清除memcached缓存
telnet localhost 11211 flush_all 最后要一定要关闭dos窗体,不然会导致memcached写值返回ture,但是实际上并没有写入值
- react native 渐变组件 react-native-linear-gradient
github: https://github.com/react-native-community/react-native-linear-gradient 安装:yarn add react-n ...
- URL helper 逆向破解思路+详细过程 利用messagebox破解
先了解一下软件的运行: 打开后是这样的,要注册 随便输入假注册码,看他怎么响应: 会弹出一个信息窗(massageBox)提示注册失败.到这里就行了,关掉,然后用OD打开,按F9跑起来: 这里输入假码 ...
- 2017"百度之星"程序设计大赛 - 复赛 01,03,05
Arithmetic of Bomb Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- RedHat(Linux)下安装Python3步骤
1. 下载解压.$ wget https://www.python.org/ftp/python/3.4.1/Python-3.4.1.tgz$ tar zxvf Python-3.4.1.tgz 2 ...
- Algorithm 算法基础知识(未完成
基础概念不讲,记录课上关键部分 时间复杂度(Time Complexity) 算法所需要花的时间 比较时间复杂度(主要看问题的规模) 时间频度(算法执行次数)T(n)和T(n1),如果两个时间频度为等 ...