SpringBoot项目实战之数据交互篇

下面我会详细讲解“SpringBoot项目实战之数据交互篇”的完整攻略。

1. 结构说明

本篇文章主要介绍如何在SpringBoot项目中实现数据交互。具体包括三个方面:JDBC、Spring Data JPA、Mybatis。本文所使用的数据库是MySQL。

项目的结构如下:

│  pom.xml
│
├─src
│  └─main
│      ├─java
│      │  └─com
│      │      └─example
│      │          └─demo
│      │              │  DemoApplication.java
│      │              │
│      │              ├─controller
│      │              │      UserController.java
│      │              │
│      │              ├─model
│      │              │      User.java
│      │              │
│      │              ├─repository
│      │              │      UserRepository.java
│      │              │
│      │              └─mapper
│      │                      UserMapper.java
│      │
│      └─resources
│              application.properties
│              application.yml
│              data.sql
│              schema.sql
  • DemoApplication.java:SpringBoot项目的入口类
  • UserController.java:Spring MVC的控制器,处理用户请求
  • User.java:存在于repository和mapper包中,是与数据库中表映射的Java Bean
  • UserRepository.java:继承JPA中的CrudRepository接口,用于操作数据库
  • UserMapper.java:Mybatis的Mapper类,用于操作数据库
  • application.properties / application.yml:SpringBoot配置文件,包含了数据源等配置信息
  • schema.sql:数据库DDL语句
  • data.sql:数据库DML语句,用以初始化数据

2. JDBC

2.1 配置数据源

在SpringBoot项目中使用JDBC,需要先配置数据源。这里我们采用SpringBoot自带的HikariCP连接池,配置如下:

# application.properties
spring.datasource.hikari.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/db_example
spring.datasource.hikari.username=springuser
spring.datasource.hikari.password=ThePassword

2.2 使用JdbcTemplate

使用JdbcTemplate时,可以直接使用Sping提供的JdbcTemplate类来操作数据库。首先需要在启动类上添加@EnableJdbcRepositories注解,以启用Spring对JdbcRepositories的支持,然后在需要使用JdbcTemplate的类中注入JdbcTemplate并使用它来执行SQL语句。

例如,查询所有用户的SQL代码如下:

String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class));

完整的示例代码见com.example.demo.repository.UserRepository

3. Spring Data JPA

Spring Data JPA是Spring Data家族的一员,它基于JPA(Java Persistence API)规范,简化了JPA的使用。

3.1 配置数据源

和JDBC一样,使用Spring Data JPA也需要配置数据源。这里同样使用SpringBoot自带的HikariCP连接池,配置如下:

# application.properties
spring.datasource.hikari.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/db_example
spring.datasource.hikari.username=springuser
spring.datasource.hikari.password=ThePassword

3.2 使用CrudRepository

Spring Data JPA提供了CrudRepository接口,可以直接继承该接口来完成对数据库增删改查等操作。

例如,在UserRepository中,只需要声明接口并继承CrudRepository:

public interface UserRepository extends CrudRepository<User, Long> {
}

就可以使用如下方式对用户表进行操作:

userRepo.findAll(); // 查询所有用户
userRepo.findByFirstName("Alice"); // 根据firstName查询用户
// ...

完整的示例代码见com.example.demo.repository.UserRepository

4. Mybatis

Mybatis是一个开源的持久化框架,也是一个ORM框架。它通过XML或注解描述Java对象与数据库表之间的映射关系。

4.1 配置数据源和属性

使用Mybatis必须先配置数据源和Mybatis的属性。这里还是使用HikariCP连接池,但是需要配置一些Mybatis的属性,如下:

# application.properties
spring.datasource.hikari.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/db_example
spring.datasource.hikari.username=springuser
spring.datasource.hikari.password=ThePassword

mybatis.config-location=classpath:mybatis-config.xml
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.mapper
  • mybatis.config-location:Mybatis全局配置文件路径
  • mybatis.mapper-locations:Mapper映射文件路径
  • mybatis.type-aliases-package:Java Bean所在的包名

4.2 编写Mapper映射文件和Java Bean

Mapper映射文件和Java Bean很类似,映射文件中定义的就是Java Bean的属性和数据库表的字段之间的映射关系。

例如,UserMapper.xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.UserMapper">
  <resultMap id="userMap" type="com.example.demo.model.User">
    <id column="id" property="id"/>
    <result column="first_name" property="firstName"/>
    <result column="last_name" property="lastName"/>
    <result column="email" property="email"/>
  </resultMap>

  <select id="findAll" resultMap="userMap">
    SELECT *
    FROM users
  </select>
</mapper>

注意:namespace属性定义的是Mapper接口所在的包名,而不是Mapper接口本身的名字。

Java Bean如下:

public class User {
    private long id;
    private String firstName;
    private String lastName;
    private String email;

    // getter and setter
}

4.3 编写Mapper接口

Mapper接口定义了对数据表所做的增删改查操作,由Mybatis框架自动实现。

例如,UserMapper接口如下:

public interface UserMapper {
    List<User> findAll();
}

其中方法名和返回值类型必须和Mapper映射文件中的定义一致。

4.4 注入Mapper接口并使用

使用注解@Mapper注解标注Mapper接口,让Spring可以自动实现Mapper,并使用@Autowired注解将其注入到需要使用的地方。

例如,使用注入的UserMapper查询所有用户的代码如下:

@Autowired
private UserMapper userMapper;

public List<User> findAllUsers() {
    return userMapper.findAll();
}

完整的示例代码见com.example.demo.mapper.UserMappercom.example.demo.controller.UserController

以上就是SpringBoot项目实战之数据交互篇的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot项目实战之数据交互篇 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • spring security获取用户信息的实现代码

    下面是关于“Spring Security获取用户信息的实现代码”的完整攻略。 1. 简介 Spring Security是一个基于Spring框架的安全管理框架,它可以在Web应用程序的身份验证、授权、验证码、攻击防御等方面提供强大支持。其中,获取用户信息是Spring Security的常见功能之一。 通过Spring Security,我们可以实现以下…

    Java 2023年5月20日
    00
  • java split()使用方法解析

    Java split()使用方法解析 在Java中,split()是一个常用的字符串方法,用于将一个字符串按指定的分隔符分割成多个子字符串,并将结果存储在一个字符串数组中。本文将详细解析Java split()的使用方法。 语法 public String[] split(String regex) 参数说明: regex:用于指定分隔符的字符串。可以是一个…

    Java 2023年5月26日
    00
  • 详解java 三种调用机制(同步、回调、异步)

    详解java 三种调用机制(同步、回调、异步) 调用机制的概念 调用机制指的是在进行函数调用时,系统进行操作的方式。针对不同的操作方式,可以分为同步、回调、异步这三种机制。 同步调用机制 同步调用机制指的是在函数调用时,必须等待该函数返回结果之后才能继续执行下一步操作的调用方式。在同步调用过程中,如果该函数阻塞或运行时间较长,那么整个程序的性能就会变得比较低…

    Java 2023年5月26日
    00
  • vuejs 动态添加input框的实例讲解

    下面是关于“vuejs 动态添加input框的实例讲解”的完整攻略: 1. 需求分析 在编写一个表单页面时,通常需要动态添加表单项,比如当用户需要输入多个电话号码时,我们需要在页面上动态添加多个电话输入框。这时我们可以使用 Vue.js 来实现动态添加 input 框。 2. 实现动态添加 input 框的步骤 2.1 定义数据 我们需要定义一个数组来存储 …

    Java 2023年6月15日
    00
  • Java开发中为什么要使用单例模式详解

    单例模式是一种创建型设计模式,用于确保一个特定类只能有一个实例,并且提供全局访问点。在Java开发中,单例模式是一个常用的设计模式,因为它可以帮助我们管理应用程序中的全局状态,减少内存使用,并提高代码的可测试性。 下面是Java开发中为什么要使用单例模式的详细攻略: 1. 避免对象的重复创建 在应用程序中,某些对象只需要一个实例,如果每次需要使用该对象时都创…

    Java 2023年5月26日
    00
  • JSP中Servlet的Request与Response的用法与区别

    JSP中Servlet的Request和Response是非常重要的概念,它们通过HttpServletRequest和HttpServletResponse来实现。在JSP中,Servlet对象是默认创建而且被调用的,因此学习Servlet的Request和Response对于理解JSP的数据交互和页面跳转非常重要。 一、Servlet Request S…

    Java 2023年6月15日
    00
  • springboot集成mybatis官方生成器

    下面我会详细讲解“Spring Boot 集成 MyBatis 官方生成器”的完整攻略。 简介 在使用 MyBatis 进行开发时,为了提高开发效率、减少重复的代码编写,可以使用 MyBatis 官方生成器。而 Spring Boot 是一种优秀的 Java Web 开发框架,本文将会介绍如何在 Spring Boot 框架中集成 MyBatis 官方生成器…

    Java 2023年5月20日
    00
  • Android发送GET与POST请求的DEMO详解

    下面我将为你详细讲解“Android发送GET与POST请求的DEMO详解”这个主题,包括以下几个方面的内容: 什么是HTTP请求 Android中发送HTTP请求的方式 完整示例:Android发送GET请求 完整示例:Android发送POST请求 什么是HTTP请求 HTTP(HyperText Transfer Protocol)是一种用于传输数据的…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部