下面我会详细讲解“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.UserMapper
和com.example.demo.controller.UserController
。
以上就是SpringBoot项目实战之数据交互篇的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot项目实战之数据交互篇 - Python技术站