SpringBoot-23-整合持久层-整合jdbc

8.整合持久层

  • 对于数据访问层,无论是SQL(关系型数据库)还是NOSQL(非关系型数据库),Spring Boot底层都是采用Spring Data的方式进行统一处理,通过大量自动配置,来简化我们对数据访问层的操作,我们只需要进行简单的设置即可实现对数据的访问。。
  • Spring Boot底层都是采用Spring Data的方式进行统一处理各种数据库,Spring Data也是Spring中与Spring Boot、Spring Cloud等齐名的知名项目。
  • Sping Data官网:https://spring.io/projects/spring-data。数据库相关的启动器:可以参考官方文档:https://docs.spring.io/spring-boot/docs/2.1.7.RELEASE/reference/htmlsingle/#using-boot-starter
spring-boot-starter-data-cassandraStarter for using Cassandra distributed database and Spring Data CassandraPom
spring-boot-starter-data-cassandra-reactiveStarter for using Cassandra distributed database and Spring Data Cassandra ReactivePom
spring-boot-starter-data-couchbaseStarter for using Couchbase document-oriented database and Spring Data CouchbasePom
spring-boot-starter-data-couchbase-reactiveStarter for using Couchbase document-oriented database and Spring Data Couchbase ReactivePom
spring-boot-starter-data-elasticsearchStarter for using Elasticsearch search and analytics engine and Spring Data ElasticsearchPom
spring-boot-starter-data-jdbcStarter for using Spring Data JDBCPom
spring-boot-starter-data-jpaStarter for using Spring Data JPA with HibernatePom
spring-boot-starter-data-ldapStarter for using Spring Data LDAPPom
spring-boot-starter-data-mongodbStarter for using MongoDB document-oriented database and Spring Data MongoDBPom
spring-boot-starter-data-mongodb-reactiveStarter for using MongoDB document-oriented database and Spring Data MongoDB ReactivePom
spring-boot-starter-data-neo4jStarter for using Neo4j graph database and Spring Data Neo4jPom
spring-boot-starter-data-redisStarter for using Redis key-value data store with Spring Data Redis and the Lettuce clientPom
spring-boot-starter-data-redis-reactiveStarter for using Redis key-value data store with Spring Data Redis reactive and the Lettuce clientPom
spring-boot-starter-data-restStarter for exposing Spring Data repositories over REST using Spring Data RESTPom
spring-boot-starter-data-solrStarter for using the Apache Solr search platform with Spring Data SolrPom
8.1 整合jdbc使用
  • Spring Boot 将日常企业应用研发中的各种场景都抽取出来,做成一个个的场景启动器(Starter),场景启动器中整合了该场景下各种可能用到的依赖,让用户摆脱了处理各种依赖和配置的困扰。
  • jpa最好不要用,有数据安全问题
  • 新建一个springboot项目,勾选spring Boot DevTools热部署、Lombok、Spring Web、Thymeleaf模板引擎、JDBC API、Spring Data JDBC、MySql Driver等依赖

在这里插入图片描述

JDBC 的场景启动器中并没有导入数据库驱动,我们需要根据自身的需求引入所需的数据库驱动。例如,访问 MySQL 数据库时,需要导入 MySQL 的数据库驱动:mysql-connector-java

Spring Boot 默认为数据库驱动程序做了版本仲裁,所以我们在导入数据库驱动时,可以不再声明版本。需要注意的是,数据库驱动的版本必须与数据库的版本相对应。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
  • 在导入了 JDBC 场景启动器和数据库驱动后,在application.yml配置数据源相关的内容
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/jdbcstudy?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimeZone=UTC
  • 测试一下数据库的默认数据源和数据库链接链接对象版本
@SpringBootTest
class SpringbootData03ApplicationTests {

    @Autowired
    DataSource dataSource;
    @Test
    void contextLoads() throws SQLException {
        //查看默认的数据源 com.zaxxer.hikari.HikariDataSource   dbcp/c3p0/druid
        System.out.println(dataSource.getClass());
        //获得数据库链接
        Connection connection = dataSource.getConnection();
        //com.mysql.cj.jdbc.ConnectionImpl@4451f60c
        System.out.println(connection);

        //关闭链接
        connection.close();
    }

}
  • 也可以查看 spring-boot-starter-jdbc 的依赖树,可以看到,该场景启动器默认引入了一个数据源:HikariCP,如下图所示。

在这里插入图片描述

  • HikariDataSource号称Java WEB当前速度最快的数据源,相l比于传统的C3P0、DBCP、Tomcatjdbc等连接池更加优秀;
//静态倒入包,直接用里面的静态方法和属性,而不用调类名,但违反spring原理
import static org.springframework.jdbc.core.JdbcTemplate;

Spring JDBC 提供了多个实用的数据库访问工具,以简化 JDBC 的开发,其中使用最多就是一个名为 JdbcTemplate 的轻量级数据访问工具,它是对 JDBC 的封装.Spring Boot 对 JdbcTemplate 提供了默认自动配置,我们可以直接使用 @Autowired 或构造函数将它注入到 bean 中使用。

跟JdbcTemplate一样XXXXTemplate:SpringBoot已经封装配置好大量的数据库访问模板bean,拿来即用即.如
jdbcTemplate crud
redisTemplate

  • springboot中JdbcTemplate的使用CRUD,同时提供了事务支持
package com.zk.controller;

import org.springframework.beans.factory.annotation.Autowired;
//静态倒入包,直接用里面的静态方法和属性,而不用调类名,但违反spring原理
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author CNCLUKZK
 * @create 2022/8/3-11:14
 */
@RestController
public class JdbcController {
    @Autowired
    JdbcTemplate jdbcTemplate;

    @GetMapping("/userList")
    public List<Map<String, Object>> getUserList(){
        //查询数据库的所有信息
        //没有实体类,数据库中的东西,怎么获取?Map
        String sql = "select * from jdbcstudy.users";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
        return maps;
    }

    @GetMapping("/addUser")
    public String addUser(){
        String sql = "insert into jdbcstudy.users (id,NAME,PASSWORD,email,birthday) values (?,?,?,?,?); ";
        Object[] args = new Object[5];
        args[0]=20;
        args[1]="李云";
        args[2]="123456";
        args[3]="123456@qq.com";
        args[4]= new Date().clone();
        int update = jdbcTemplate.update(sql,args);
        return "addUser-ok";
    }
    @GetMapping("/updUser/{id}")
    public String updUser(@PathVariable("id")Integer id){
        String sql = "update jdbcstudy.users set NAME =?,PASSWORD=?  where id ="+id;
        Object[] args = new Object[2];
        args[0]="Tom";
        args[1]="111111";
        int update = jdbcTemplate.update(sql,args);
        return "updUser-ok";
    }
    @GetMapping("/deleteUser/{id}")
    public String deleteUser(@PathVariable("id")Integer id){
        String sql = "delete from jdbcstudy.users where id =?";
        int update = jdbcTemplate.update(sql,id);
        return "deleteUser-ok";
    }
}
  • 测试结果访问http://127.0.0.1:8080/userList
[{"id":1,"NAME":"zhansan","PASSWORD":"123456","email":"zs@sina.com","birthday":"2022-05-03"},{"id":2,"NAME":"lisi","PASSWORD":"123456","email":"lisi@sina.com","birthday":"2022-05-03"},{"id":3,"NAME":"wangwu","PASSWORD":"123456","email":"wangwu@sina.com","birthday":"2022-05-03"},{"id":4,"NAME":"张三","PASSWORD":"123456","email":"123456789@163.com","birthday":"2022-05-03"},{"id":5,"NAME":"李四","PASSWORD":"123456","email":"123456789@163.com","birthday":"2022-05-03"},{"id":8,"NAME":"王五","PASSWORD":"123456","email":"123456789@163.com","birthday":"2022-05-03"},{"id":9,"NAME":"王五","PASSWORD":"111111","email":"123456789@163.com","birthday":"2022-05-03"},{"id":10,"NAME":"王五","PASSWORD":"111111","email":"123456789@163.com","birthday":"2022-05-03"},{"id":11,"NAME":"王五","PASSWORD":"111111","email":"123456789@163.com","birthday":"2022-05-03"},{"id":13,"NAME":"ll","PASSWORD":"477777","email":"tryrtyry@qq.com","birthday":"2022-05-03"},{"id":14,"NAME":"王路","PASSWORD":"123456","email":"123456789@163.com","birthday":"2022-05-04"},{"id":16,"NAME":"王路","PASSWORD":"123456","email":"123456789@163.com","birthday":"2022-05-04"},{"id":18,"NAME":"华安","PASSWORD":"9527","email":"123456789@163.com","birthday":"2022-05-04"}]

insert into formname values后面可以插入多条数据value不行

  • 测试可以访问http://127.0.0.1:8080/addUser、http://127.0.0.1:8080/updUser/3、http://127.0.0.1:8080/deleteUser/2等链接使用jdbcTemplate对数据表进行CRUD
  • 注意sql预编译中参数的传递
 String sql = "insert into jdbcstudy.users (id,NAME,PASSWORD,email,birthday) values (?,?,?,?,?); ";
 Object[] args = new Object[5];
 args[0]=19;
 args[1]="mary";
 args[2]="123456";
 args[3]="123456@qq.com";
 args[4]= new Date().clone();
 int update = jdbcTemplate.update(sql,args);
  • 数据源自动配置类DataSourceAutoConfiguration
@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 {

	}
  • 只有一个DataSourceConfiguration.Hikari.class生效了
下一篇:SpringBoot-24-整合持久层-整合DruidDataSource数据源
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sharing-jdbc是一个基于Java的开源数据库中间件,提供了对数据库连接池、数据库读写分离、分库分表等功能的支持。使用sharing-jdbc可以简化我们对数据库的操作,提高系统的性能和可扩展性。 MyBatis是一个持久层框架,它提供了对数据库的操作方法和SQL语句的映射。在使用MyBatis时,我们可以配置数据源和数据库连接信息。将sharing-jdbc与MyBatis结合使用,可以实现对数据库的读写分离和分库分表功能。 Spring Boot是一个快速开发Spring应用的框架,它提供了简化配置和集成的功能。在Spring Boot应用中,我们可以使用YAML文件(.yml)来配置应用的各种参数和组件。通过在YAML配置文件中添加相应的配置信息,可以实现sharing-jdbc、MyBatis和Spring Boot的集成和配置。 在YAML配置文件中,我们需要配置数据库连接信息、数据源、MyBatis的相关配置和sharing-jdbc的相关配置。例如,我们可以配置数据库的URL、用户名和密码,指定MyBatis的映射文件路径和配置文件路径,以及指定sharing-jdbc的相关信息。 配置sharing-jdbc的方式如下: ```yaml sharing-jdbc: dataSources: - name: dataSource1 dataSourceClassName: com.mysql.jdbc.Driver jdbcUrl: jdbc:mysql://localhost:3306/db1 username: root password: password1 shardingRuleConfigs: - defaultDataSourceName: dataSource1 defaultDatabaseStrategy: inline: algorithmExpression: ds_${user_id % 2} defaultTableStrategy: standard: algorithmExpression: t_${user_id % 16} bindingTables: - table_patterns: user_${0..15} actualDataNodes: dataSource1.user_${0..15} ``` 在以上示例中,我们配置了一个数据库连接池(dataSource1),并指定了数据源的相关信息。然后,我们配置了分库分表的规则,根据用户ID分配数据库和数据表,并将其与数据源绑定。 通过这样的配置,我们可以在Spring Boot应用中方便地使用sharing-jdbc和MyBatis操作数据库,并利用分库分表功能提高应用的性能和扩展性。 ### 回答2: 在使用Spring Boot整合Sharing-JDBC和MyBatis时,我们可以使用yml配置文件来配置相关信息。 首先,我们需要在yml配置文件中设置Sharing-JDBC的数据源配置。具体配置内容如下: ``` # Sharing-JDBC 数据源配置 sharing: shardingsphere: datasource: name: # 数据源名称 url: # 数据库连接地址 username: # 数据库用户名 password: # 数据库密码 driver-class-name: # 数据库驱动类名 ``` 其中,name表示数据源的名称,url表示数据库连接地址,username表示数据库用户名,password表示数据库密码,driver-class-name表示数据库驱动类名。 接下来,我们需要配置MyBatis的相关信息。具体配置内容如下: ``` # MyBatis配置 mybatis: mapper-locations: classpath:mapper/*.xml # MyBatis Mapper文件的存放位置 type-aliases-package: com.example.model # 实体类的包名 ``` 其中,mapper-locations表示Mapper文件的存放位置,type-aliases-package表示实体类的包名。 然后,我们需要在Spring Boot的主配置类中使用@MapperScan注解来扫描Mapper接口所在的包,并将其注册为Spring Bean。具体配置内容如下: ```java @Configuration @MapperScan("com.example.mapper") // Mapper接口所在的包 public class MybatisConfig { } ``` 在以上配置完成之后,我们可以在项目中使用Sharing-JDBC和MyBatis进行数据库访问。比如,创建一个Mapper接口和对应的Mapper XML文件,进行SQL的编写和数据库操作。 以上就是使用Sharing-JDBC、MyBatis和Spring Boot整合的yml配置方式。通过配置yml文件,我们可以方便地配置数据源、MyBatis等相关信息,简化项目的配置和管理。 ### 回答3: sharing-jdbc是一个基于Java的数据库中间件,可以方便地支持数据库的分库分表操作。而MyBatis是一个优秀的持久层框架,与数据库之间的关系映射由它负责。Spring Boot是一个快速开发框架,可以简化Java应用程序的配置和部署。 在Spring Boot中,可以使用YAML(又称为YML)文件来进行配置。YAML是一种人类可读的数据序列化格式,与JSON类似,但语法更加简洁。使用YAML配置文件,可以将各种配置信息以键值对的形式存储在一个文件中。 当使用sharing-jdbc、MyBatis和Spring Boot一起使用时,我们需要在YAML配置文件中进行相应的配置。首先,需要配置数据库连接信息,包括数据库URL、用户名和密码等。其次,需要配置MyBatis的相关信息,如Mapper的路径、扫描的包等。最后,还需要配置sharing-jdbc的相关信息,包括分库分表的策略、数据库的数据源等。 下面是一个示例的YAML配置文件: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 mybatis: mapper-locations: classpath:mapper/*.xml sharing-jdbc: data-sources: ds_0: jdbc-url: jdbc:mysql://localhost:3306/db_0?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 ds_1: jdbc-url: jdbc:mysql://localhost:3306/db_1?useUnicode=true&characterEncoding=utf-8&useSSL=false username: root password: 123456 sharding-rule-config-file: classpath:sharding-jdbc.yml ``` 在这个示例中,我们配置了一个主数据库(test)和两个分库(db_0和db_1)。分别使用了不同的数据源(ds_0和ds_1)进行连接。同时,我们还指定了MyBatis的Mapper文件路径和sharing-jdbc的分库分表策略文件路径。 通过这样的配置,我们可以在Spring Boot应用中方便地使用sharing-jdbc和MyBatis来实现数据库的分库分表操作。这种配置方式简洁明了,提高了开发效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值