SQL
JDBCTemplate
SpringBoot的数据库操作
在Spring中我们在操作数据就是通过JDBCTemplate
引入SpringJDBC依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
根据Maven可以看到默认配置的数据源
HikariDataSource
数据库驱动
为什么导入JDBC场景,官方不导入驱动?官方不知道我们接下要操作什么数据库。
数据库版本和驱动版本对应
默认版本:<mysql.version>8.0.22</mysql.version>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
想要修改版本
1、直接依赖引入具体版本(maven的就近依赖原则)
2、重新声明版本(maven的属性的就近优先原则)
<properties>
<java.version>1.8</java.version>
<mysql.version>5.1.49</mysql.version>
</properties>
自动配置分析
@Configuration(proxyBeanMethods = false)
@Conditional(PooledDataSourceCondition.class)
@ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
@Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.OracleUcp.class,
DataSourceConfiguration.Generic.class, DataSourceJmxConfiguration.class })
protected static class PooledDataSourceConfiguration
-
DataSourceTransactionManagerAutoConfiguration: 事务管理器的自动配置 -
JdbcTemplateAutoConfiguration: JdbcTemplate的自动配置,可以来对数据库进行crud -
- 可以修改这个配置项@ConfigurationProperties(prefix = “spring.jdbc”) 来修改JdbcTemplate
- @Bean@Primary JdbcTemplate;容器中有这个组件
-
JndiDataSourceAutoConfiguration: jndi的自动配置 -
XADataSourceAutoConfiguration: 分布式事务相关的
通过yaml进行配置数据库信息
spring:
datasource:
username: root
password: ok
url: jdbc:mysql://localhost:3306/usershow?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
driver-class-name: com.mysql.jdbc.Driver
测试
@Autowired
private JdbcTemplate jdbcTemplate;
@ResponseBody
@RequestMapping("showTest")
public String showTest() {
List<Map<String, Object>> maps = jdbcTemplate.queryForList("SELECT * FROM USER");
System.out.println(maps.size());
return "showTest";
}
修改数据源(druid)
我们接下来将默认的数据源更改为druid数据源
SpringBott默认:在没有指定数据源的时候使用HikariDataSource。
属于整合第三方技术。Springboot整合第三方技术的两种方式
整合技术
自定义
导入依赖,编写配置类,进行添加组件。组件是执行功能的重点
比如说swagger2的搭建就是第三方整合自定义方式
找starter依赖
- 如果存在starter依赖表示SpringBoot自己整合过。
- 只需要导入starter依赖,编写SpringBoot配置文件即可
- 编写SpringBoot配置文件就相当于配置类,只不过配置类是SpringBoot写好了
Started方式
导入druid依赖
spring:
datasource:
username: root
password: ok
url: jdbc:mysql://localhost:3306/usershow?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
driver-class-name: com.mysql.cj.jdbc.Driver
druid:
aop-patterns: cn.*
filters: stat,wall
stat-view-servlet:
enabled: true
login-username: admin
login-password: admin
resetEnable: false
web-stat-filter:
enabled: true
urlPattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat:
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false
整合Mybatis
前面的JDBCTemplate是属于Spring中进行JDBC的封装操作
一般还是借助框架进行操作
SpringBoot也是对Mybatis和mybatis-plus提供了整合 Started
配置模式
-
全局配置文件 -
SqlSessionFactory: 自动配置好了 -
SqlSession:自动配置了 SqlSessionTemplate 组合了SqlSession -
@Import(AutoConfiguredMapperScannerRegistrar.class); -
Mapper: 只要我们写的操作MyBatis的接口标准了 @Mapper 就会被自动扫描进来
@EnableConfigurationProperties(MybatisProperties.class) : MyBatis配置项绑定类。
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class })
public class MybatisAutoConfiguration{}
@ConfigurationProperties(prefix = "mybatis")
public class MybatisProperties
可以修改配置文件中 mybatis 开始的所有;
操作开始
引入依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
Yaml的配置
mybatis:
mapper-locations: classpath:/mybatis/mapper/*.xml
configuration:
map-underscore-to-camel-case: true
查看接口与映射文件
@Mapper
public interface UserDao {
public User getOneById(@Param("id") int id);
}
<?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="cn.dao.UserDao">
<select id="getOneById" resultType="cn.pojo.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
项目结构
结果展示
当然Mybatis的注解模式等其他都是可以进行操作的
整合Mybatis-plus
引入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
yaml配置
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:**/mapper/**.xml
接口的改变
@Mapper
public interface UserDao extends BaseMapper<User> {
public User getOneById(@Param("id") int id);
}
JavaBean需要注意
控制器类展示
@Resource
private UserDao userDao;
@ResponseBody
@RequestMapping("userDao")
public String UserDaoTest(){
User oneById = userDao.getOneById(1);
System.out.println(oneById.getCname());
List<User> users = userDao.selectList(null);
System.out.println("全部的用户个数:"+users.size());
return "success";
}
以上是通过整合Mybatis结合过来的。但是基本上都是引入依赖,编写配置
展示结果
NoSql
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
打开Redsi查看keys
我这里打开window,window和Linux使用是一样的。
之后会在Linux中进行详细的介绍
先开启服务,在开启客户端
根据查看知道了存在一个stuname的键值对
yaml编写
当然配置远远不止这些
spring:
redis:
port: 6379
host: 127.0.0.1
client-type: jedis
jedis:
pool:
max-active: 10
Boot操作查询
在控制器中指定RedisTemplate进行操作
@Autowired
private RedisTemplate<String,String> redisTemplate;
@ResponseBody
@RequestMapping("redisTest")
public String redisTest(){
ValueOperations<String, String> sredis = redisTemplate.opsForValue();
String stuname = sredis.get("stuname");
System.out.println("stuname的值是:"+stuname);
return "success";
}
Jedis
|