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

示例 使用CrudRepository接口访问数据

转载自https://blog.csdn.net/qiangcuo6087/article/details/79137234

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

修改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>

配置基本属性

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

数据源信息配置

# 数据库地址
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

创建持久化类

在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;

}

}

定义数据访问层接口

在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项目中数据访问层无需提供实现,直接继承数据访问接口即可。

定义业务层类

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注解用于申明方法的事物特性。

定义控制器类

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


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();
}
}

测试应用

启动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方法进行处理,如果该方法执行保存用户成功即可返回字符串“保存用户成功!”,
测试修改用户,在浏览器中输入如下地址:

http://127.0.0.1:8080/user/update

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

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

http://127.0.0.1:8080/user/getAll

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

测试删除用户数据,在浏览器中输入:
http://127.0.0.1:8080/user/delete
请求会提交到UserController类的delete方法进行处理

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值