• 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==

     
    参考 https://blog.csdn.net/qiangcuo6087/article/details/79137234
  • 相关阅读:
    如何理解联合文件系统?
    Docker 学习笔记(一)
    Bzoj 3124: [Sdoi2013]直径 题解
    Bzoj 3131 [Sdoi2013]淘金 题解
    欧拉路(题目)
    硬币问题
    线段树、树状数组
    Splay树、Treap树
    模拟退火
    广搜题目(一本通)
  • 原文地址:https://www.cnblogs.com/xd502djj/p/9380278.html
Copyright © 2020-2023  润新知