写在前面:
继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用!
3.4 数据层解决方案
3.4.1 使用项目
新建空项目,加入数据库驱动,改为Web项目,如图
3.4.2 SQL
3.4.2.1 数据源配置
- SpringBoot提供了3种内嵌的数据源对象供开发者选择,如
- HiKariCp(默认)
- Tomcat提供DataSource:上个不可用且在Web环境中会使用
- Commons DBCP:前两者均不可用
- 通用配置无法设置具体的数据源配置信息,仅提供基本的连接相关配置,可在下一级中进行配置,如图
3.4.2.2 内置持久化解决方案-JdbcTemplate
- pom文件添加依赖,如图
- yml 配置Template,如下:
jdbc:
template:
fetch-size: 10 #缓存行数
max-rows: 500 #最大行数
query-timeout: 10 #查询超时时间
- jdbc查询代码如下:
@Test
public void getUsers(@Autowired JdbcTemplate jdbcTemplate){
String sql = "select * from user";
RowMapper<User> rowMapper = new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setPassword(rs.getString("password"));
user.setUsername(rs.getString("username"));
return user;
}
};
List<User> query = jdbcTemplate.query(sql, rowMapper);
query.forEach(System.out::println);
}
3.4.2.3 内置数据库
3.4.2.3.1 介绍
SpringBoot提供了3种内嵌数据库供选择,有H2,HSQL,Derby,仅仅用于测试开发,线上务必关掉yml配置中enabled为false
3.4.2.3.2 配置
- 添加H2相关依赖,如图
- 配置yml,如下:
# H2数据库配置
server:
port: 8080
spring:
h2:
console:
# 访问用户名sa,密码123456
enabled: true
path: /h2
# 第一次连接需要,后面可不需要
datasource:
url: jdbc:h2:~/test
driver-class-name: org.h2.Driver
username: sa
password: 123456
3.4.2.3.3 操作
- 数据库控制台可在浏览器打开,输入网址
http://localhost:8080/h2
即可打开,如图 - 创建表,如图
,创建成功后可看到新建表,如图 - 添加表数据,如图
- 查询操作,使用jdbc查询语句后可发现操作成功,如图
3.4.3 NoSQL
3.4.3.1 介绍
市面上主流NoSQL解决方案为Redis,Mongodb 和ES,这里用的是Windows版
3.4.3.2 Redis
3.4.3.2.1 安装及使用
安装详见CSDN
3.4.3.2.2 SpringBoot整合Redis
- 新建项目,过程中添加Redis相关配置,如图
,可在pom看到Redis相应坐标,如图 - 配置,在yml中添加端口地址等信息,如下:
spring:
redis:
# 默认配置
port: 6379
host: localhost
- 操作,使用的是RedisTemplate,以对象作为key和value,内部对数据进行序列化,主要有Set,HashSet等数据类型接口,如图
,简单使用如图
注:客户端使用的StringRedisTemplate,以字符串作为key和value,必须使用它才能在客户端进行统一交互查询操作。
3.4.3.2.3 Jedis和Lettcue
- Jedis和Lettcue均是Redis在SpringBoot中来操作Redis客户端的技术
- 默认是Lettcue技术,切换则需要添加坐标及更改使用,如图
- 两者区别:
- jedis :连接服务器是直连,当多线程模式下使用jedis会存在线程安全问题,解决方案可以通过配置连接池使每个连接专用,这样整体性能就大受影响。
- Lettcue基于Netty框架进行Redis服务器连接,底层设计中采用StatefulRedisConnection。StatefulRedisConnection自身线程是安全的,可以保障并发访问安全问题,所以一个连接可以被多线程复用,也支持多连接实例一起工作。