SpringBoot2(五):数据访问

1.SQL

        1.数据源的自动配置

                1.导入JDBC场景

        
            org.springframework.boot
            spring-boot-starter-data-jdbc
        

SpringBoot2(五):数据访问_第1张图片 
                        1.导入JDBC场景,官方不导入驱动 → 官方不知道我们接下要操作什么数据库

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

默认版本:8.0.22

        
            mysql
            mysql-connector-java

        
想要修改版本
1、直接依赖引入具体版本(maven的就近依赖原则)
2、重新声明版本(maven的属性的就近优先原则)
    
        1.8
        5.1.49
    

                2.分析自动配置

                        1.自动配置的类

                                1.DataSourceAutoConfiguration : 数据源的自动配置

                                        1.修改数据源相关的配置:spring.datasource

                                        2.数据库连接池的配置,是自己容器中没有DataSource才自动配置的

                                        3.底层配置好的连接池是:HikariDataSource

	@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

                                2.DataSourceTransactionManagerAutoConfiguration: 事务管理器的自动配置

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

                                        1.可以修改这个配置项@ConfigurationProperties(prefix = "spring.jdbc") 来修改JdbcTemplate

                                        2.@Bean@Primary JdbcTemplate;容器中有这个组件

                                4.JndiDataSourceAutoConfiguration: jndi的自动配置

                                5.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 Boot05WebAdminApplicationTests {

    @Autowired
    JdbcTemplate jdbcTemplate;


    @Test
    void contextLoads() {

//        jdbcTemplate.queryForObject("select * from account_tbl")
//        jdbcTemplate.queryForList("select * from account_tbl",)
        Long aLong = jdbcTemplate.queryForObject("select count(*) from account_tbl", Long.class);
        log.info("记录总数:{}",aLong);
    }

}

        2.使用Druid数据源

                1.druid官方github地址:GitHub - alibaba/druid: 阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池

                        1.整合第三方技术的两种方式:

                                1.自定义

                                2.找starter

                2.自定义方式

                        1.创建数据源

        
            com.alibaba
            druid
            1.1.17
        


		
		
		
		
		
		
		
		
		
		
		
		
		
		

                        2.StatViewServlet

                                1.StatViewServlet的用途包括:

                                        1.提供监控信息展示的html页面

                                        2.提供监控信息的JSON API

	
		DruidStatView
		com.alibaba.druid.support.http.StatViewServlet
	
	
		DruidStatView
		/druid/*
	

                        3.StatFilter

                                1.用于统计监控信息;如SQL监控、URI监控

需要给数据源中配置如下属性;可以允许多个filter,多个用,分割;如:

                                2.系统中所有filter:

别名

Filter类名

default

com.alibaba.druid.filter.stat.StatFilter

stat

com.alibaba.druid.filter.stat.StatFilter

mergeStat

com.alibaba.druid.filter.stat.MergeStatFilter

encoding

com.alibaba.druid.filter.encoding.EncodingConvertFilter

log4j

com.alibaba.druid.filter.logging.Log4jFilter

log4j2

com.alibaba.druid.filter.logging.Log4j2Filter

slf4j

com.alibaba.druid.filter.logging.Slf4jLogFilter

commonlogging

com.alibaba.druid.filter.logging.CommonsLogFilter

                                 3.慢SQL记录配置


    
    


使用 slowSqlMillis 定义慢SQL的时长

                3.使用官方starter方式

                        1.引入druid-starter

        
            com.alibaba
            druid-spring-boot-starter
            1.1.17
        

                        2.分析自动配置

                                1.扩展配置项 spring.datasource.druid

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

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

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

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

    private static final String FILTER_STAT_PREFIX = "spring.datasource.druid.filter.stat";
    private static final String FILTER_CONFIG_PREFIX = "spring.datasource.druid.filter.config";
    private static final String FILTER_ENCODING_PREFIX = "spring.datasource.druid.filter.encoding";
    private static final String FILTER_SLF4J_PREFIX = "spring.datasource.druid.filter.slf4j";
    private static final String FILTER_LOG4J_PREFIX = "spring.datasource.druid.filter.log4j";
    private static final String FILTER_LOG4J2_PREFIX = "spring.datasource.druid.filter.log4j2";
    private static final String FILTER_COMMONS_LOG_PREFIX = "spring.datasource.druid.filter.commons-log";
    private static final String FILTER_WALL_PREFIX = "spring.datasource.druid.filter.wall";

                        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

                                1.SpringBoot配置示例:druid/druid-spring-boot-starter at master · alibaba/druid · GitHub 

                                2.配置项列表:DruidDataSource配置属性列表 · alibaba/druid Wiki · GitHub

        3.整合MyBatis操作

        MyBatis · GitHub

        starter

        SpringBoot官方的Starter:spring-boot-starter-*

        第三方的: *-spring-boot-starter

        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
            2.1.4
        

                1.配置模式

                        1.全局配置文件

                        2.SqlSessionFactory: 自动配置好了

                        3.SqlSession:自动配置了 SqlSessionTemplate 组合了SqlSession

                        4.@Import(AutoConfiguredMapperScannerRegistrar.class);

                        5.Mapper: 只要我们写的操作MyBatis的接口标准了 @Mapper 就会被自动扫描进来

@EnableConfigurationProperties(MybatisProperties.class) : MyBatis配置项绑定类。
@AutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class })
public class MybatisAutoConfiguration{}

@ConfigurationProperties(prefix = "mybatis")
public class MybatisProperties

                        6.可以修改配置文件中 mybatis 开始的所有; 

# 配置mybatis规则
mybatis:
  config-location: classpath:mybatis/mybatis-config.xml  #全局配置文件位置
  mapper-locations: classpath:mybatis/mapper/*.xml  #sql映射文件位置
  
Mapper接口--->绑定Xml




    

                         7.配置 private Configuration configuration; mybatis.configuration下面的所有,就是相当于改mybatis全局配置文件中的值

# 配置mybatis规则
mybatis:
#  config-location: classpath:mybatis/mybatis-config.xml
  mapper-locations: classpath:mybatis/mapper/*.xml
  configuration:
    map-underscore-to-camel-case: true
    
 可以不写全局;配置文件,所有全局配置文件的配置都放在configuration配置项中即可

                        8.导入mybatis官方starter

                        9.编写mapper接口。标准@Mapper注解

                        10.编写sql映射文件并绑定mapper接口

                        11.在application.yaml中指定Mapper配置文件的位置,以及指定全局配置文件的信息 (建议;配置在mybatis.configuration

                2.注解模式

@Mapper
public interface CityMapper {

    @Select("select * from city where id=#{id}")
    public City getById(Long id);

    public void insert(City city);

}

                3.混合模式

@Mapper
public interface CityMapper {

    @Select("select * from city where id=#{id}")
    public City getById(Long id);

    public void insert(City city);

}

                4.最佳实战

                        1.引入mybatis-starter

                        2.配置application.yaml中,指定mapper-location位置即可

                        3.编写Mapper接口并标注@Mapper注解

                        4.简单方法直接注解方式

                        5.复杂方法编写mapper.xml进行绑定映射

                        6.@MapperScan("com.atguigu.admin.mapper") 简化,其他的接口就可以不用标注@Mapper注解

        4.整合MyBatis-Plus完成CRUD

                1.什么是MyBatis-Plus

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

                        2.mybatis plus 官网

                        3.建议安装 MybatisX 或者 Free Mybatis plugin 插件

                2.整合MyBatis-Plus

        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.1
        

                        1.自动配置

                                1.MybatisPlusAutoConfiguration 配置类,MybatisPlusProperties 配置项绑定。mybatis-plus:xxx 就是对mybatis-plus的定制

                                2.SqlSessionFactory 自动配置好。底层是容器中默认的数据源

​​​​​​​                                3.mapperLocations 自动配置好的。有默认值。classpath*:/mapper/**/*.xml;任意包的类路径下的所有mapper文件夹下任意路径下的所有xml都是sql映射文件。 建议以后sql映射文件,放在 mapper下

                                4.容器中也自动配置好了 SqlSessionTemplate

​​​​​​​                                5.@Mapper 标注的接口也会被自动扫描;建议直接 @MapperScan("com.atguigu.admin.mapper") 批量扫描就行

                        2.优点

                                1.只需要我们的Mapper继承 BaseMapper 就可以拥有crud能力

                3.CRUD功能

 @GetMapping("/user/delete/{id}")
    public String deleteUser(@PathVariable("id") Long id,
                             @RequestParam(value = "pn",defaultValue = "1")Integer pn,
                             RedirectAttributes ra){

        userService.removeById(id);

        ra.addAttribute("pn",pn);
        return "redirect:/dynamic_table";
    }


    @GetMapping("/dynamic_table")
    public String dynamic_table(@RequestParam(value="pn",defaultValue = "1") Integer pn,Model model){
        //表格内容的遍历
//        response.sendError
//     List users = Arrays.asList(new User("zhangsan", "123456"),
//                new User("lisi", "123444"),
//                new User("haha", "aaaaa"),
//                new User("hehe ", "aaddd"));
//        model.addAttribute("users",users);
//
//        if(users.size()>3){
//            throw new UserTooManyException();
//        }
        //从数据库中查出user表中的用户进行展示

        //构造分页参数
        Page page = new Page<>(pn, 2);
        //调用page进行分页
        Page userPage = userService.page(page, null);


//        userPage.getRecords()
//        userPage.getCurrent()
//        userPage.getPages()


        model.addAttribute("users",userPage);

        return "table/dynamic_table";
    }
@Service
public class UserServiceImpl extends ServiceImpl implements UserService {


}

public interface UserService extends IService {

}

2.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)。

        1.Redis自动配置

        
            org.springframework.boot
            spring-boot-starter-data-redis
        

SpringBoot2(五):数据访问_第2张图片 

                1.自动配置

                        1.RedisAutoConfiguration 自动配置类。RedisProperties 属性类 --> spring.redis.xxx是对redis的配置​​​​​​​

                        2.连接工厂是准备好的。LettuceConnectionConfiguration、JedisConnectionConfiguration

                        3.自动注入了RedisTemplate<Object, Object> : xxxTemplate;

                        4.自动注入了StringRedisTemplate;k:v都是String

                        5.key:value6.底层只要我们使用 StringRedisTemplate、RedisTemplate就可以操作redis

                2.redis环境搭建

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

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

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

        2.RedisTemplate与Lettuce

    @Test
    void testRedis(){
        ValueOperations operations = redisTemplate.opsForValue();

        operations.set("hello","world");

        String hello = operations.get("hello");
        System.out.println(hello);
    }

        3.切换至jedis

        
            org.springframework.boot
            spring-boot-starter-data-redis
        


        
            redis.clients
            jedis
        
spring:
  redis:
      host: r-bp1nc7reqesxisgxpipd.redis.rds.aliyuncs.com
      port: 6379
      password: lfy:Lfy123456
      client-type: jedis
      jedis:
        pool:
          max-active: 10

 

你可能感兴趣的:(Java,:,SpringBoot2,p2p,sql,网络协议)