一、数据访问(SQL)

1、数据源的自动配置-HikariDataSource

1、导入JDBC场景

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>

数据库版本和驱动版本对应

默认版本:<mysql.version>8.0.22</mysql.version>

        <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<!-- <version>5.1.49</version>-->
</dependency>
想要修改版本
1、直接依赖引入具体版本(maven的就近依赖原则)
2、重新声明版本(maven的属性的就近优先原则)
<properties>
<java.version>1.8</java.version>
<mysql.version>5.1.49</mysql.version>
</properties>

2、分析自动配置

1、自动配置的类

  • DataSourceAutoConfiguration : 数据源的自动配置

    • 修改数据源相关的配置:spring.datasource
    • 数据库连接池的配置,是自己容器中没有DataSource才自动配置的
    • 底层配置好的连接池是:HikariDataSource
  • DataSourceTransactionManagerAutoConfiguration: 事务管理器的自动配置

  • JdbcTemplateAutoConfiguration: JdbcTemplate的自动配置,可以来对数据库进行crud

    • 可以修改这个配置项@ConfigurationProperties(prefix = "spring.jdbc") 来修改JdbcTemplate
    • @Bean@Primary JdbcTemplate;容器中有这个组件
  • JndiDataSourceAutoConfiguration: jndi的自动配置

  • XADataSourceAutoConfiguration: 分布式事务相关的

3、修改配置项

spring:
datasource:
url: jdbc:mysql://localhost:3306/db_account
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver

4、测试

@Slf4j
@SpringBootTest
class Boot01WebAdminApplicationTests { //自动注入jdbcTemplate
@Autowired
JdbcTemplate jdbcTemplate; @Test
void contextLoads() {
Long aLong = jdbcTemplate.queryForObject("select count(*) from item", Long.class);
log.info("查询数量为:{}",aLong);
} }

2、使用Druid数据源

1、druid官方github地址

https://github.com/alibaba/druid

整合第三方技术的两种方式

  • 自定义
  • 找starter

2、自定义方式

3、使用官方stater方式

1、引入druid-starter

        <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.17</version>
</dependency>

2、分析自动配置

  • 扩展配置项 spring.datasource.druid

  • DruidSpringAopConfiguration.class, 监控SpringBean的;配置项:spring.datasource.druid.aop-patterns

  • DruidStatViewServletConfiguration.class, 监控页的配置:spring.datasource.druid.stat-view-servlet;默认开启

  • DruidWebStatFilterConfiguration.class, web监控配置;spring.datasource.druid.web-stat-filter;默认开启

  • DruidFilterConfiguration.class}) 所有Druid自己filter的配置

3、配置示例

spring:
datasource:
url: jdbc:mysql://localhost:3306/db_account
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver druid:
aop-patterns: com.atguigu.admin.* #监控SpringBean
filters: stat,wall # 底层开启功能,stat(sql监控),wall(防火墙) stat-view-servlet: # 配置监控页功能
enabled: true
login-username: admin
login-password: admin
resetEnable: false web-stat-filter: # 监控web
enabled: true
urlPattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*' filter:
stat: # 对上面filters里面的stat的详细配置
slow-sql-millis: 1000
logSlowSql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false

SpringBoot配置示例

https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

配置项列表https://github.com/alibaba/druid/wiki/DruidDataSource%E9%85%8D%E7%BD%AE%E5%B1%9E%E6%80%A7%E5%88%97%E8%A1%A8

4、监控页

http://localhost:8080/druid/进入数据源的监控页

3、整合Mybatis操作

0、导入mybatis的依赖

 <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>

1、编写Mapper接口(添加@mapper注解)

package gyb.boot01webadmin.mapper;
import org.apache.ibatis.annotations.Mapper; @Mapper
public interface ItemMapper {
/**
* 查询item的数量
* @return
*/ Long SumItemNum();
}

1、编写mabatis全局配置文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    </configuration>

2、编写映射文件

<?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,和命名空间--><mapper namespace="gyb.boot01webadmin.mapper.ItemMapper">    <select id="SumItemNum" resultType="Long">        select count(*) from item    </select></mapper>

3、编写yaml中的mybatis相关配置

mybatis:  #  config-location: classpath:mybatis/mybatis-config.xml  mapper-locations: classpath:mybatis/mapper/*.xml  configuration:  #开启驼峰命名法    map-underscore-to-camel-case: true

4、测试

@AutowiredItemService itemService;@GetMapping("/db")@ResponseBodypublic String dbTest(){    Long num = itemService.SumItemNum();    return num.toString();}

5、注解模式

@Mapperpublic interface CityMapper {    @Select("select * from city where id=#{id}")    @Options(useGeneratedKeys= true, keyProperty=id)    public City getById(Long id);    public void insert(City city);}

6、tip: 获取自增主键

​ insert ... .. ... .

4、整合 MyBatis-Plus 完成CRUD

1、什么是MyBatis-Plus

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

mybatis plus 官网

建议安装 MybatisX 插件

2、开发步骤

1、导入依赖

导入后不需要导入mybatis-spring的依赖

<dependency>    <groupId>com.baomidou</groupId>    <artifactId>mybatis-plus-boot-starter</artifactId>    <version>3.4.1</version></dependency>

2、配置数据库

spring:  datasource:    url: jdbc:mysql://localhost:3306/db_account    username: root    password: 123456    driver-class-name: com.mysql.jdbc.Driver        druid:      aop-patterns: com.atguigu.admin.*  #监控SpringBean      filters: stat,wall     # 底层开启功能,stat(sql监控),wall(防火墙)      stat-view-servlet:   # 配置监控页功能        enabled: true        login-username: admin        login-password: admin        resetEnable: false      web-stat-filter:  # 监控web        enabled: true        urlPattern: /*        exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'      filter:        stat:    # 对上面filters里面的stat的详细配置          slow-sql-millis: 1000          logSlowSql: true          enabled: true        wall:          enabled: true          config:            drop-table-allow: false

3、在在 Spring Boot 启动类中添加 @MapperScan 注解

扫描 Mapper 文件夹:

@MapperScan("gyb.mapper")

4、编写实体类、Mapper接口(继承)

@TableField(exist = false):去除表中不存在的字段

@Data//使用Mybatis时,实体类的属性都应存在于数据库public class User {    //注解表示此属性不存在数据库的字段与之对应    @TableField(exist = false)    private String username;    @TableField(exist = false)    private String password;    private Long id;    private String name;    private Integer age;    private String email;}

继承BaseMapper<>泛型为要映射的对象

public interface UserMapper extends BaseMapper<User> {}

5、测试

@Testvoid MybatisPlusTest(){    //User user = userMapper.selectById(1);    List<User> users = userMapper.selectList(null);    for (User user : users) {        log.info(String.valueOf(user));    }}

6、ServiceImpl使用提供好的接口

UserService需要继承IService

UserServiceImpl 继承实现类extends ServiceImpl<UserMapper,User>

@Servicepublic class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {}public interface UserService extends IService<User> {}

在controller中:

userServie.函数名

二、NoSQL

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。

1、Redis自动配置

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>        </dependency>

自动配置:

  • RedisAutoConfiguration 自动配置类。RedisProperties 属性类 --> spring.redis.xxx是对redis的配置
  • 连接工厂是准备好的。LettuceConnectionConfiguration、JedisConnectionConfiguration
  • 自动注入了RedisTemplate<Object, Object> : xxxTemplate;
  • 自动注入了StringRedisTemplate;k:v都是String
  • key:value
  • 底层只要我们使用 StringRedisTemplate、****RedisTemplate就可以操作redis

redis环境搭建

1、阿里云按量付费redis。经典网络

2、申请redis的公网连接地址

3、修改白名单 允许0.0.0.0/0 访问

2、RedisTemplate与Lettuce

    @Test    void testRedis(){        ValueOperations<String, String> operations = redisTemplate.opsForValue();        operations.set("hello","world");        String hello = operations.get("hello");        System.out.println(hello);    }

3、切换至jedis

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-data-redis</artifactId>        </dependency><!--        导入jedis-->        <dependency>            <groupId>redis.clients</groupId>            <artifactId>jedis</artifactId>        </dependency>spring:  redis:      host: r-bp1nc7reqesxisgxpipd.redis.rds.aliyuncs.com      port: 6379      password: lfy:Lfy123456      client-type: jedis      jedis:        pool:          max-active: 10

最新文章

  1. 两千行PHP学习笔记
  2. R语言练习(一)
  3. java 查询 mongodb 中的objectid
  4. Java中Comparable和Comparator实现对象比较
  5. 各种U启网启什么的都是浮云
  6. MapReduce作业的map task和reduce task调度参数
  7. [RxJS] Error Handling in RxJS
  8. LoadRunner性能测试指标分析
  9. win10 , JAVA安装 环境搭建
  10. mysql8.0卸载干净--win10
  11. A.CTable 自动创建数据表
  12. C#多线程编程实战(二)
  13. oracle查询数据字典的sql
  14. ArrayList集合方法
  15. 《centos系列》ubuntu终端链接centos服务器
  16. GridView创建菜单栏
  17. 数学:莫比乌斯反演-GCD计数
  18. linux下面mmap和setsignal函数用法
  19. 关于MySQL字符集问题:Specified key was too long; max key length is 767 bytes
  20. hdu5616 暴力枚举

热门文章

  1. 构建后端第6篇之---java 多态的本质 父类引用 指向子类实现
  2. Spring最简单构建一个后台{msg:&quot;登录成功&quot;,code:200,data:null}
  3. 原来select语句在MySQL中是这样执行的!看完又涨见识了!这回我要碾压面试官!
  4. Netty入门(一):ByteBuf
  5. [ZJOI2010]基站选址,线段树优化DP
  6. Unix 网络IO模型介绍
  7. 2020年!最全Android大厂面试真题合集(附答案)
  8. Spring Cloud Alibaba - RestTemplate
  9. 基于ScheduledExecutorService的并发定时任务处理能力测试
  10. Nginx中location匹配及rewrite重写