zoukankan      html  css  js  c++  java
  • Springboot原生JDBC操作数据库

      Spring提供了spring-jdbc: 对jdbc的轻量级的封装, 提供一个一个JdbcTemplate类操作数据

    1、导入jdbc启动器 starter

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <!--springBoot父项目中, 设置一个Mysql的版本: <mysql.version>8.0.20</mysql.version>
     <version>5.1.43</version>自定义版本  --> 
    <dependency>
         <groupId>mysql</groupId>
         <artifactId>mysql-connector-java</artifactId>
         <version>5.1.43</version> 
    </dependency>

    2、springBoot的配置文件中配置数据库四大参数

    #mysql数据库四大参数
    spring:
      datasource:
        #driver-class-name: com.mysql.jdbc.Driver  // 如果使用mysql 5.1.43
        driver-class-name: com.mysql.cj.jdbc.Driver  //如果使用mysql 8.0.20 需要指定时区
        url: jdbc:mysql://localhost:3306/house?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
        username: root
        password: root

    3、springBoot: 配置好 DataSource,  使用哪一个连接池的技术

      通过测试DataSource:   默认: Hikari的数据源

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringBootJdbcApplicationTests {
        @Autowired
        private DataSource ds;
    
        // 测试jdbc数据源是否更换成功
        @Test
        public void test1() {
            System.out.println(ds.getClass().getName());
        }

    打印默认数据源为:

    com.zaxxer.hikari.HikariDataSource

    SpringBoot 默认支持数据源:

    //查看DataSourceAutoConfiguration中的方法
        @Configuration
        @Conditional(PooledDataSourceCondition.class)
        @ConditionalOnMissingBean({ DataSource.class, XADataSource.class })
        @Import({ DataSourceConfiguration.Hikari.class, DataSourceConfiguration.Tomcat.class,
                DataSourceConfiguration.Dbcp2.class, DataSourceConfiguration.Generic.class,
                DataSourceJmxConfiguration.class })
        protected static class PooledDataSourceConfiguration {
        }

    更改SpringBoot使用某种数据源:  在默认支持的数据源选一个:

    1) 第一种方式:  在pom文件, 排除Hikari的依赖, 添加其他(dbcp2)数据源, (不推荐)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
        <!-- 排除HikariCP依赖传递 -->
         <exclusions> 
            <exclusion>
                <groupId>com.zaxxer</groupId>
                <artifactId>HikariCP</artifactId> 
            </exclusion>
        </exclusions>
    </dependency>   

    添加某个数据源:

    <!-- 添加dbcp2的连接池 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-dbcp2</artifactId>
    </dependency>

    2)  第二种方式:  不在pom文件中排除hikari依赖, 在springboot配置文件中指定使用哪个数据源(DataSource) 推荐

    #mysql数据库四大参数
    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver  // 如果使用mysql 5.1.43
        url: jdbc:mysql://localhost:3306/house?useUnicode=true&characterEncoding=UTF-8
        username: root
        password: root
       #指定使用哪个数据源 ***
        type: org.apache.commons.dbcp2.BasicDataSource

    如果需要添加其他数据源比如(C3P0, druid)使用的数据源不是SpringBoot默认支持的

    导入druid / C3P0 的依赖:

    <!--添加的druid的连接池 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.1.3</version>
    </dependency>
    ...

    在springBoot配置文件中指定数据源

    #mysql数据库四大参数
    spring:
      datasource:
        driver-class-name: com.mysql.jdbc.Driver  // 如果使用mysql 5.1.43
        url: jdbc:mysql://localhost:3306/house?useUnicode=true&characterEncoding=UTF-8
        username: root
        password: root
       #指定使用哪个数据源
        #type: org.apache.commons.dbcp2.BasicDataSource
        type: com.alibaba.druid.pool.DruidDataSource   //或者添加C3p0的数据源

    3)第三种方式: 编写一个DataSource的配置类, 覆盖SpringBoot的DataSourceAutoConfiguration

    @Configuration
    public class DruidConfig {
        @Autowired
        // springBoot的运行环境类, 获取到springBoot配置文件中内容
        private Environment environment;
    
        // 配置一个DataSource
        @Bean
        public DataSource createDataSource() { // 创建一个Druid的数据源 DruidDataSource
            DruidDataSource druidDataSource = new DruidDataSource();
            druidDataSource.setDriverClassName(environment.getProperty("spring.datasource.driver-class-name"));
            druidDataSource.setUrl(environment.getProperty("spring.datasource.url"));
            druidDataSource.setUsername(environment.getProperty("spring.datasource.username"));
            druidDataSource.setPassword(environment.getProperty("spring.datasource.password")); // 初始连接数
            druidDataSource.setInitialSize(Integer.parseInt(environment.getProperty("spring.datasource.druid.initSize"))); // 最大连接数
            druidDataSource.setMaxActive(Integer.parseInt(environment.getProperty("spring.datasource.druid.maxSize"))); // 最小连接数
            druidDataSource.setMinIdle(Integer.parseInt(environment.getProperty("spring.datasource.druid.minSize")));
    
            return druidDataSource;
        }

    可以配置连接参数

    #mysql数据库四大参数
    spring:
      datasource:
        #driver-class-name: com.mysql.jdbc.Driver
        driver-class-name: com.mysql.cj.jdbc.Driver
        url: jdbc:mysql://localhost:3306/house?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
        username: root
        password: root
        #指定使用哪个数据源
        #type: org.apache.commons.dbcp2.BasicDataSource
        #type: com.alibaba.druid.pool.DruidDataSource
        druid: 
           initSize: 10
           maxSize: 100
           minSize: 10
      profiles:
        active: dev

    使用Spring-jdbc提供的JdbcTemplate操作数据库:

    Employee.java实体类:

    @Data
    public class Employee {
        private Integer empno;
        private String ename;
        private String job;
        private Integer mgr;
        private Date hiredate;
        private Double comm;
        private Double sal;
        private Integer deptno;
    }

    EmployeeDao.java接口

    public interface EmployeeDao {
       //根据id查询
        public Employee  queryById(int empno) throws Exception;
       //查询指定页数据
        public List<Employee>  queryByPage(int pageIndex, int pageSize) throws Exception;
       //添加员工
       public void insert(Employee emp) throws Exception;
    }

    EmployeeDaoImpl.java实现类

    @Repository
    public class EmployeeDaoImpl implements EmployeeDao {
        //注入JdbcTemplate
        @Autowired
        private JdbcTemplate jdbcTemplate;
        
        @Override
        public Employee queryById(int empno) throws Exception {
            String sql ="select * from emp where empno = ?";
            // queryForObject( xxx.class) 使用的基本数据类型,要求查询的结果只能一列
            //  BeanPropertyRowMapper()  把行记录转换为一个java对象
            return jdbcTemplate.queryForObject(sql,new Object[] {empno},new BeanPropertyRowMapper<Employee>(Employee.class));
        }
        @Override
        public List<Employee> queryByPage(int pageIndex, int pageSize) throws Exception {
            String sql ="select * from emp limit ? , ? ";
            return jdbcTemplate.query(sql,
                                new Object[] {(pageIndex-1)*pageSize,pageSize},
                                new BeanPropertyRowMapper<Employee>(Employee.class) );
            
        }
        @Override
        public void insert(Employee emp) throws Exception {
            String sql ="INSERT INTO `emp` (`empno`,`ename`,`job`,`mgr`,`hiredate`,`sal`,`comm`,`deptno`) VALUES (?,?,?,?,?,?,?,?)";
            //update() 执行增删改sql
            jdbcTemplate.update(sql, emp.getEmpno(),
                                     emp.getEname(),emp.getJob(),
                                     emp.getMgr(),emp.getHiredate(),
                                     emp.getSal(),emp.getComm(),
                                     emp.getDeptno());
        }
  • 相关阅读:
    企业远程视频会议云服务EasyRTC-SFU版本支持 https 功能设计逻辑
    企业视频远程办公会议通话系统EasyRTC在Windows2012部署运行出现“计算机中丢失VCRUNTIME140.dll”如何解决?
    IP摄像头RTSP协议客户端EasyNVR视频平台提示加密机授权异常原因分析
    【方案搭建】多个工程如何做监控视频的集中管控?EasyNVR视频平台打造智慧工厂新方向
    IP摄像头RTSP协议客户端EasyNVR视频平台如何调用主码流和子码流?
    如何通过私有化部署自建一套基于RTSP协议的视频流媒体边缘计算系统EasyNVR视频平台来实现网络摄像头的实时直播回看?
    IP网络摄像机RTMP协议互联网直播/点播平台EasyDSS直播间录像录制机制说明
    视频上云网关/网络穿透设备EasyNTS下载表格时后端打印报错信息,但是又不影响下载的问题如何解决
    视频高速上云网关EasyNTS组网服务2.1.1新版本无法兼容低版数据库问题解析
    视频上云/网络穿透/网络映射服务EasyNTS前端组织添加页面出现Vue冲突怎么解决?
  • 原文地址:https://www.cnblogs.com/64Byte/p/13261579.html
Copyright © 2011-2022 走看看