数据层解决方案
SQL(数据源+持久化+数据库)
Druid+MyBtais-Plus+MySQL
-
-
现有数据层解决方案技术选型
-
数据源:DruidDataSource
持久化技术:MyBtais-Plus/MyBatis
数据库:MySQL
-
数据源:DruidDataSource
- Druid配置格式(两种,推荐第二种)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSourc
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: 123456
内嵌数据源
HikariCP
- 默认的内置数据源对象
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
hikari:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
Tomcat提供DataSource
- HikariCP不可用的情况下,且在Web环境中,将使用tomcat服务器配置的数据源对象
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
tomcat:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
Commons DBCP
- 前两者都可使用的情况下会使用dbcp数据源
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
dbcp2:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
JdbcTemplate(持久化技术MyBtis和MyBatis-Plus)
- 导入jdbc依赖注释掉mybatis-plus依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
- 编写测试类
- 查询
@Test
void testJdbcTemplate(){
String sql = "select * from t_book";
RowMapper<Book> rm = new RowMapper<Book>(){
@Override
public Book mapRow(ResultSet rs, int i) throws SQLException {
Book temp = new Book();
temp.setId(rs.getInt("id"));
temp.setName(rs.getString("name"));
temp.setType(rs.getString("type"));
temp.setDescription(rs.getString("description"));
return temp;
}
};
List<Book> list = jdbcTemplate.query(sql, rm);
System.out.println(list);
}
- 新增
@Test
void testJdbcTemplateSave(){
String sql = "insert into t_book values (null, 'spring1', 'spring2', 'spring3')";
int update = jdbcTemplate.update(sql);
System.out.println(update);
}
- JDBC的配置项目
内置数据库
H2
使用JDBC来连接H2
- 导入依赖
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
spring:
h2:
console:
enabled: true
path: /h2 # 上线之前务必修改为fasle否则会有重大的安全隐患
datasource:
url: jdbc:h2:~/test
hikari:
driver-class-name: org.h2.Driver
username: sa
password: 123456
maximum-pool-size: 50
- 测试
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
void testJdbcTemplateSave(){
String sql = "insert into t_book values (3, 'spring3', 'spring3', 'spring3')";
int update = jdbcTemplate.update(sql);
System.out.println(update);
}
使用MyBatis-Plus来连接H2
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
- 配置
mybatis-plus:
global-config:
db-config:
table-prefix: t_
id-type: auto
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 标准的日志输出
spring:
h2:
console:
enabled: true
path: /h2
datasource:
url: jdbc:h2:~/test
hikari:
driver-class-name: org.h2.Driver
username: sa
password: 123456
maximum-pool-size: 50
- 测试
@Autowired
private BookDao bookDao;
@Test
void contextLoads() {
bookDao.selectById(1);
}
HSQL
Derby
技术选型
NoSQL
Redis
Redis简介
-
-
key-value存储结构的内存级NoSQL数据库
-
支持多种数据存储格式
支持持久化
支持集群
-
支持多种数据存储格式
- 服务端启动命令
redis-server.exe redis.windows.conf
- 客户端启动命令
redis-cli.exe
- 添加数据
set a1 aa1
hset keya a1 aa1
Spring Boot整合Redis
- 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
- 配置文件
spring:
redis:
host: localhost
port: 6379
- 测试
@SpringBootTest
class Springboot13RedisApplicationTests {
@Autowired
private RedisTemplate redisTemplate;
@Test
void set() {
ValueOperations ops = redisTemplate.opsForValue();
ops.set("age",41);
}
@Test
void get() {
ValueOperations ops = redisTemplate.opsForValue();
Object age = ops.get("age");
System.out.println(age);
}
@Test
void hset() {
HashOperations hops = redisTemplate.opsForHash();
hops.put("info","name","ssc");
}
@Test
void hget() {
HashOperations hops = redisTemplate.opsForHash();
Object o = hops.get("info", "name");
System.out.println(o);
}
}
- 各种redis操作的API
Spring Boot读写Redis客户端
Mongo
启动
- 服务端启动
mongod --dbpath=..\data\db
- 客户端启动
mongo --host=127.0.0.1 --port=27017
mongo基础操作
- 增
db.book.save({"name":"springBoot"})
- 查
db.getCollection('book').find({})
db.book.find({type:"springBoot"})
- 删
db.book.remove({type:"springBoot"})
- 改
// 遇到第一条满足条件的就修改
db.book.update({name:"springBoot"},{$set:{name:"springBoot2"}})
整合MongoDB
- 整合
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- 必要配置
spring:
data:
mongodb:
uri: mongodb://localhost/ssc
- 测试
@SpringBootTest
class SpringBoot14MongoApplicationTests {
@Autowired
private MongoTemplate mongoTemplate;
@Test
void testSave() {
Book book = new Book();
book.setId(2);
book.setName("哈哈哈");
book.setType("文学");
book.setDescription("这是一本文学书");
mongoTemplate.save(book);
}
@Test
void testFind() {
List<Book> all = mongoTemplate.findAll(Book.class);
System.out.println(all);
}
}
ES
- Elasticsearch是一个分布式
全文搜索
引擎
启动ES
双击bin目录下面的 elasticsearch.bat文件
基本操作
http://localhost:9200/books/
- 遵循restFul风格的API请求
- 创建索引时携带的请求体
{
"mappings":{
"properties":{
"id":{
"type":"keyword"
},
"name":{
"type":"text",
"analyzer":"ik_max_word",
"copy_to":"all"
},
"type":{
"type":"keyword"
},
"description":{
"type":"text",
"analyzer":"ik_max_word",
"copy_to":"all"
},
"all":{
"type":"text",
"analyzer":"ik_max_word"
}
}
}
}
创建文档
查询
删除
修改
低版本Elasticsearch整合
- 导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
- 配置
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC
username: root
password: 123456
elasticsearch:
rest:
uris: http://localhost:9200
mybatis-plus:
global-config:
db-config:
table-prefix: t_
id-type: auto
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- 测试
注入ES的bean 通过bean来获取低版本的各种操作
高版本Elasticsearch整合
- 导入依赖
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>
- 测试(
通过setup和tearDown来统一创建客户端连接和关闭连接
)
@SpringBootTest
class Springboot15EsApplicationTests {
//@Autowired
//private ElasticsearchRestTemplate template; // 低级别
private RestHighLevelClient client;
// 造个客户端
@BeforeEach
void setUp() {
HttpHost host = HttpHost.create("http://localhost:9200");
RestClientBuilder builder = RestClient.builder(host);
client = new RestHighLevelClient(builder);
}
// 关闭客户端
@AfterEach
void tearDown() throws IOException {
client.close();
}
@Test
void testCreateIndex() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("books");
client.indices().create(request, RequestOptions.DEFAULT);
}
}
添加文档
postman中不会出现问题,但是IDEA中会出现问题
@Test
void testCreateIndexByIk() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("books");
String json = "{\n" +
" \"mappings\":{\n" +
" \"properties\":{\n" +
" \"id\":{\n" +
" \"type\":\"keyword\"\n" +
" },\n" +
" \"name\":{\n" +
" \"type\":\"text\",\n" +
" \"analyzer\":\"ik_max_word\",\n" +
" \"copy_to\":\"all\"\n" +
" },\n" +
" \"type\":{\n" +
" \"type\":\"keyword\"\n" +
" },\n" +
" \"description\":{\n" +
" \"type\":\"text\",\n" +
" \"analyzer\":\"ik_max_word\",\n" +
" \"copy_to\":\"all\"\n" +
" },\n" +
" \"all\":{\n" +
" \"type\":\"text\",\n" +
" \"analyzer\":\"ik_max_word\"\n" +
" }\n" +
" }\n" +
" }\n" +
"}";
// 设置请求中的参数
request.source(json, XContentType.JSON);
client.indices().create(request, RequestOptions.DEFAULT);
}