Spring JDBC 相关知识

作者: 右耳菌 | 来源:发表于2022-04-14 00:26 被阅读0次

一、数据访问

  • 数据库访问,JDBC
  • 事务管理
  • ORM整合
1.DAO
  • Data Access Object ,即数据访问相关接口
2. ORM
  • Object Relation Mapping,即对象关系映射

二、为什么使用Spring JDBC

1、以往的情况下,如使用原始的JDBC访问数据库,一般都要经过以下几个步骤
  1. 装载驱动
  2. 建立数据库连接
  3. 执行SQL语句
  4. 处理执行结果
  5. 清理环境

但是一般来说,我们需要关心的内容只有

  1. 连接参数
  2. 执行SQL语句
  3. 处理执行结果

其他的次要内容,我们并不是很需要关心,而Spring JDBC 就是为了减少这部分的工作量而产生的,简而言之,Spring JDBC 可以帮我们解决了一些我们不是很关心的内容,我们只需要关心我们的业务代码实现就好了。

三、Spring JDBC 的 DataSource 相关知识

一般来说,DataSource的建立一般包含以下几个内容:

  • 驱动名称
  • 连接地址
  • 用户名
  • 密码

而DataSource一般对于程序而言,只有一个方法是其存在的目的,那就是 getConnection ,即获取数据库连接。

DataSource

三、JdbcTemplate

  • 封装了很多内容,如获取连接,执行SQL,异常处理,关闭连接等。
  • 具体内容可以查看官方文档介绍。

四、一个例子

Tips. 以下内容的参考均可查看官方文档查找
1. 创建一个maven项目
2. 修改 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.lazyfennec</groupId>
    <artifactId>HelloSpringJDBC</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.18</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.18</version>
        </dependency>
        <!-- mysql驱动  -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!-- 数据库连接池  -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-dbcp2</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>
</project>
3. 创建数据库配置文件 db.properties (resources 目录下)
jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/cloud_study?serverTimezone=GMT
jdbc.username=####(请替换成自己的账号)
jdbc.password=####(请替换成自己的密码)
4. 创建application-context.xml (resources 目录下)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 需要添加包扫描, 注意替换成需要扫描包名,这里我的是 cn.lazyfennec -->
    <context:component-scan base-package="cn.lazyfennec"/>
    
    <!-- 数据源配置 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>
    
    <context:property-placeholder location="db.properties"/>
</beans>
5. 创建JdbcTemplateDao.java
package cn.lazyfennec;
import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class JdbcTemplateDao {
    
    private JdbcTemplate jdbcTemplate;
    
    @Autowired
    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }
    
    public void createTable() {
        jdbcTemplate.execute(
                "create table jdbc_tmp_user (id integer, first_name varchar(64), last_name varchar(64))"
        );
    }
}
6. 创建程序执行类HelloSpringJDBC.java,然后执行文件
package cn.lazyfennec;

import org.springframework.context.ApplicationContext;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class HelloSpringJDBC {
    public static void main(String[] args) {
        
        ApplicationContext context = new ClassPathXmlApplicationContext("application-context.xml");

        JdbcTemplateDao dao = context.getBean("jdbcTemplateDao", JdbcTemplateDao.class);
        dao.createTable();

        ((ConfigurableApplicationContext) context).close();
    }
}
7. 查看数据库可以看到已经创建成功了表 jdbc_tmp_user
mysql> show tables;
+-----------------------+
| Tables_in_cloud_study |
+-----------------------+
| course                |
| jdbc_tmp_user         |   // 这个是新创建的表
| teacher               |
| user                  |
| usercourse            |
+-----------------------+

五、额外知识

在使用JdbcTemplate的时候可以使用 " ? "占位,具体一个例子如下:

  this.jdbcTemplate.update("insert into user values (1, ?, ?)", "Lei", 'Li');

六、NamedParameterJdbcTemplate

NamedParameterJdbcTemplate

七、SqlParameterSource

SqlParameterSource

八、异常处理

对于触发的异常,Spring JDBC 会抛出DataAccessException 异常,其下又有很多具体的异常继承了DataAccessException,程序可以借助不同的异常类型判断具体触发该异常的问题是什么。

DataAccessException

相关文章

网友评论

    本文标题:Spring JDBC 相关知识

    本文链接:https://www.haomeiwen.com/subject/eflzsrtx.html