Springboot对于数据访问层,无论是SQL还是NOSQL,都默认采用整合Spring Data的方式进行统一处理,Springboot添加大量自动配置,屏蔽了很多设置。并引入各种Template,Repository来简化我们对数据访问层的操作。
1.SpringBoot数据库访问
1.1 Spring DAO JdbcTemplate
引入spring-boot-starter-jdbc后(hikari、spring-jdbc包),就可以借助DataSourceAutoConfiguration、JdbcTemplateAutoConfiguration自动配置组件创建出HikariDataSource、JdbcTemplate对象。
- 引入jdbc启动器、驱动包,创建连接池
- 根据要操作表定义entity(pojo,属性名与字段名一致)
1 | public class Direction { |
- 定义Dao接口
1 | public interface DirectionDao { |
- 定义Dao实现类,扫描并注入JdbcTemplate使用
1 | //通过组件扫描加载到Spring容器 |
1.2 Spring MyBatis(XML SQL版本)
- 引入spring-boot-starter-jdbc、驱动包、mybatis-spring-boot-starter
- 引入application.properties(连接池参数)
- 实体类(同上)
- SQL定义
1 |
|
Mapper接口
1
2
3
4public interface DirectionMapper {
public List<Direction> selectAll();
public Direction selectById(int id);
}使用@MapperScan和mybatis.mapperLocations=classpath:sql/*.xml
在启动类前追加@MapperScan
1 |
|
- 在application.properties追加mybatis.mapperLocations
1 | mybatis.mapperLocations=classpath:sql/*.xml |
1.3 Spring MyBatis(注解 SQL版本)
- 引入spring-boot-starter-jdbc、驱动包、mybatis-spring-boot-starter
- 引入application.properties(连接池参数)
- 实体类(同上)
- 定义Mapper接口,使用@Select、@Update、@Insert、@Delete注解定义SQL
1 | public interface DirectionMapper { |
- 使用@MapperScan(同上)
2. Spring Data JPA
2.1 Jpa
Jpa (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
Sun引入新的JPA ORM规范主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的局面。
注意:Jpa 是一套规范,不是一套产品,那么像 Hibernate,TopLink,JDO 他们是一套产品,如果说这些产品实现了这个 Jpa 规范,那么我们就可以叫他们为 Jpa 的实现产品。
2.2 Spring Boot Jpa
Spring Boot Jpa 是 Spring 基于 ORM 框架、Jpa 规范的基础上封装的一套 Jpa 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作。
Spring Boot Jpa 让我们解脱了 DAO 层的操作,基本上所有 CRUD 都可以依赖于它来实现
在Spring中使用JPA访问数据库,需要使用Spring Data模块支持。
- SpringData是对Spring框架一个扩展模块,包含对JPA、Redis、MongoDB等技术的访问支持。
Spring Boot Jpa的使用
引入spring-boot-starter-jdbc、spring-boot-starter-data-jpa、驱动包
在application.properties定义db连接池参数(同上)
定义RunBoot启动类,使用@SpringBootApplication标记(同上)
根据要操作的表定义实体类,使用@Entity、@Table、@Id、@Column定义该对象和表结构之间的映射关系
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Direction {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}定义Dao接口,可以选择继承JpaRepository、PagingAndSortingRepository、CrudRepository等
1
2
3
4public interface DirectionDao
extends JpaRepository<Direction, Integer>{
//...
}
2.3 Dao扩展操作
分页查询
1 | Pageable pageable = PageRequest.of(1, 3);//of(页数从0开始,记录条数) |
按方法名规则扩展
1 | //where id>? |
定义SQL语句扩展
1 |
|
定义JPQL面向查询语句扩展
1 | //使用类型名和属性名替代表名和字段名 |
按名称模糊查询,带分页支持
1 |
|