示例 使用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==

 
参考 https://blog.csdn.net/qiangcuo6087/article/details/79137234

Spring Boot的数据访问:CrudRepository接口的使用的更多相关文章

  1. (8)Spring Boot 与数据访问

    文章目录 简介 整合基本的JDBC与数据源 整合 druid 数据源 整合 mybatis 简介 对于数据访问层,无论是 SQL 还是 NOSQL ,Spring Boot 默认都采用整合 Sprin ...

  2. Spring Boot的数据访问 之Spring Boot + jpa的demo

    1. 快速地创建一个项目,pom中选择如下 <?xml version="1.0" encoding="UTF-8"?> <project x ...

  3. Spring Boot框架 - 数据访问 - 整合Mybatis

    一.新建Spring Boot项目 注意:创建的时候勾选Mybatis依赖,pom文件如下 <dependency> <groupId>org.mybatis.spring.b ...

  4. Spring Boot实现数据访问计数器

    1.数据访问计数器   在Spring Boot项目中,有时需要数据访问计数器.大致有下列三种情形: 1)纯计数:如登录的密码错误计数,超过门限N次,则表示计数器满,此时可进行下一步处理,如锁定该账户 ...

  5. Spring Boot框架 - 数据访问 - JDBC&自动配置

    一.新建Spring Boot 工程 特殊勾选数据库相关两个依赖 Mysql Driver — 数据库驱动 Spring Data JDBC 二.配置文件application.properties ...

  6. Spring MVC或Spring Boot配置默认访问页面不生效?

    相信在开发项目过程中,设置默认访问页面应该都用过.但是有时候设置了却不起作用.你知道是什么原因吗?今天就来说说我遇到的问题. 首先说说配置默认访问页面有哪几种方式. 1.tomcat配置默认访问页面 ...

  7. Spring Boot启动过程及回调接口汇总

    Spring Boot启动过程及回调接口汇总 链接: https://www.itcodemonkey.com/article/1431.html 来自:chanjarster (Daniel Qia ...

  8. Spring boot未授权访问造成的数据库外联

    一.spring boot 日常测试或攻防演练中像shiro,fastjson等漏洞已经越来越少了,但是随着spring boot框架的广泛使用,spring boot带来的安全问题也越来越多,本文仅 ...

  9. spring boot使用swagger生成api接口文档

    前言 在之前的文章中,使用mybatis-plus生成了对应的包,在此基础上,我们针对项目的api接口,添加swagger配置和注解,生成swagger接口文档 具体可以查看本站spring boot ...

随机推荐

  1. Images之管理image

    Manage images The easiest way to make your images available for use by others inside or outside your ...

  2. qt QRegExp使用(搬运工)

    设置正则表达式. 类似下面的 QRegExp 这里的用法就是用来检测QString等字符串错误的,例如文件名里面最好就不出现<>|/\:等,所以可以如下定义QRegExp rx(" ...

  3. Markdown 指南

    Markdown 是一种轻量级的「标记语言」,使用用特殊的 Markdown 文档处理器将 Markdown 语法翻译成预设的文档格式.标题大小等,一般用于展示时输出的是 HTML.这个教程可以让使用 ...

  4. MVC ---- 去掉HTML过滤

    在方法头上添加特效  [ValidateInput(false)]  富文本框提交的内容就可以顺利提交到后台了.

  5. vs编译出现 fatal error LNK1281:无法生成 SAFESEH 映像

    问题: 在vs编译中我们有时候常常会见到这样的错误,无法生成 SAFESEH 映像,镜像安全问题 解决方法: 1.打开该项目的"属性页"对话框. 2.单击"链接器&quo ...

  6. react native 渐变组件 react-native-linear-gradient

    github:  https://github.com/react-native-community/react-native-linear-gradient 安装:yarn add  react-n ...

  7. React绑定事件动态化的实现方法

    一.什么是绑定事件 1.1 事件 我这里指的事件一般指的是React自带的触发事件,我这里先简单举例几个 onClick //鼠标点击 onMouseEnter //鼠标滑进 onMouseLeave ...

  8. 3.1 vue组件的使用

    1. 组件 组件: 组件是一个局部功能界面,它包含了所有要实现这个功能界面的相关资源,如css.html等. 组件化编程: vue文件包含3个部分 <template> <div&g ...

  9. 小程序模板template

    WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用. 定义模板 使用 name 属性,作为模板的名字.然后在<template/>内定义代码片段,如: & ...

  10. js 高级知识点

    在JS中统计函数执行次数与执行时间 详解JS中统计函数执行次数与执行时间 JavaScript是如何工作的:深入类和继承内部原理 + Babel和TypeScript 之间转换 javascript设 ...