目录
一、springBoot整合Spring JDBC
步骤:
1、搭建SpringBoot应用程序
2、加坐标
<!--JDBC的坐标-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
3、写配置yml文件
----- 配置数据源[基础版的]
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: root
password: root
注意:springboot未来会帮我们配置数据源
在配置数据源的时候,要加载基本信息,
springboot会读取yml文件的信息,把信息读到类的属性里面【另一种方式:@Bean 】
4、写代码 实体类
5、测试
@SpringBootTest
class SpringbootData01JdbcApplicationTests {
@Autowired(required = false)
JdbcTemplate jdbcTemplate;
@Test
void show3() {
try {
List<Account> actors = jdbcTemplate.query("select * from Account",new MyRowMapper());
for (int i = 0; i < actors.size(); i++) {
Account actor = actors.get(i);
System.out.println(actor);
}
} catch (DataAccessException e) {
e.printStackTrace();
}
}
}
解释
springboot看你加入了一个data-starter启动器,它认为你用相关技术,还需要开启相关的自动配置
所以:
帮你造了数据源,JDBCTemplate,还将依赖关系维护好注入容器,供你使用
这其中使用了模板设计模式以及策略模式
@Autowired(required = false)
解释:required = false 有的话就注入,没有就不注入了,不会报错
为了解决------->【idea中如果不写会下面会有红色波浪线】
因为:有些是在运行期间造出来的
DBCTemplate提供了两类方法[和DBUtil一样也是如此]
query()---查询
注意: 需要我们自己写映射规则
queryForObject--查询单一结果集
Account account = jdbcTemplate.queryForObject(
"select * from account where aid =?"
,new MyRowMapper(),11);
第一个参数:sql 【?占位符】
第二个参数:映射规则对象【结果集和实体类的行映射对象】
不需要反复编写映射规则
要实现父类接口RowMapper<Account>
先给泛型【未来映射的实体类的类型】
再重写方法
返回类型【泛型的目标对象】 mapRow(参数:rs结果集)
映射规则:
public class MyRowMapper implements RowMapper<Account> {
@Override
public Account mapRow(ResultSet rs, int rowNum) throws SQLException {
int aid = rs.getInt("aid");
String aname = rs.getString("aname");
int amoney = rs.getInt("amoney");
Account account = new Account(aid,aname,amoney);
return account;
}
}
第三个参数:动态参数【占位符的值】
update()--增删改
类似,不在此赘述
二、yaml文件密码加密
数据源的密码属于敏感数据,需要加密
实现方式:
方式一:druid自带可以对密码加密
(有且只能对密码)
方式二:jasypt独立技术
【所有的yaml敏感信息都支持】
以下讲解方式二:jasypt坐标
1.添加坐标[有版本]
2.生成密文内容
通过测试类将明文信息通过jasypt的工具类生成密文内容
@Test
void contextLoads() {
StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();
EnvironmentPBEConfig config = new EnvironmentPBEConfig();
// 加密的算法,这个算法是默认的
config.setAlgorithm("PBEWithMD5AndDES");
// 加密的密钥,随便自己填写,很重要千万不要告诉别人
config.setPassword("sun");
standardPBEStringEncryptor.setConfig(config);
//自己的密码
String plainText = "SunR";
String encrypted_PasswoordText = standardPBEStringEncryptor.encrypt(plainText);
//自己的账号
String plainText1 = "root";
String encrypted_Text = standardPBEStringEncryptor.encrypt(plainText1);
//输出,复制下来备用
System.out.println("密码"+encrypted_PasswoordText);
System.out.println("账号:"+encrypted_Text);
}
3.修改配置文件yml的账号密码
3.1、将第二步生成的【账号密码】粘贴在yml配置文件中
注意:
要jasypt调用方法解析,(不然不会识别,当原始内容读取)
放置在ENC函数中
3.2、将秘钥也配置进去[否则不能正确解密]
jasypt:
encryptor:
password: sun
完整配置内容代码:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC
username: ENC(dpTXja7bX5xPVxF+WcNqNA==)
password: ENC(Mn9H7TBBsp+tLIJlYkpetQ==)
type: com.alibaba.druid.pool.DruidDataSource
jasypt:
encryptor:
password: sun
4.启动类上加上注解
@EnableEncryptableProperties:开启关于jasypt的相关配置【不需要配置类配置】
功能才能生效