zoukankan      html  css  js  c++  java
  • Spring JdbcTemplate的使用

     Spring对JDBC进行了封装,降低了JDBC的使用难度。

    Spring JDBC的核心类是JdbcTemplate。


    Spring JDBC的使用步骤

    1、添加需要的jar包

    • spring-jdbc.RELEASE.jar、spring-tx.RELEASE.jar     

    即使我们不手动管理事务,也需要添加spring-tx.RELEASE.jar,因为spring-jdbc.RELEASE.jar的源码中要使用spring-tx.RELEASE.jar的事务管理,

    • 数据库驱动
    • 如果要使用c3p0连接池 ,需添加c3p0的2个jar包(如果是oracle,需添加3个jar包)。

    • 如果要使用dbcp连接池,需添加commons-dbcp.jar(dbcp本身的jar包)、commons-pool.jar(dbcp的依赖包)。

    2、在xml中配置数据源、JdbcTemplate

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <!-- 配置数据源 -->
    
        <!-- 不使用连接池 -->
        <bean name="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://127.0.0.1/my_db?serverTimezone=GMT" />
            <property name="username" value="chy" />
            <property name="password" value="abcd" />
        </bean>
    
        <!-- 使用数据库驱动自带的连接池-->
        <!-- 此处使用的是mysql自带的连接池,使用的自然是mysql的驱动类,所以不配置driverClassName属性-->
        <bean name="mysqlConnectionPool" class="com.mysql.cj.jdbc.MysqlConnectionPoolDataSource">
            <property name="url" value="jdbc:mysql://127.0.0.1/my_db?serverTimezone=GMT" />
            <property name="user" value="chy" />
            <property name="password" value="abcd" />
            <property name="maxReconnects" value="30" />
        </bean>
    
        <!-- 使用dbcp -->
        <bean name="dbcpDataSource" class="org.apache.commons.dbcp2.BasicDataSource">
            <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
            <property name="url" value="jdbc:mysql://127.0.0.1/my_db?serverTimezone=GMT" />
            <property name="username" value="chy" />
            <property name="password" value="abcd" />
            <property name="initialSize" value="15" />
            <property name="maxTotal" value="30" />
            <property name="minIdle" value="2" />
            <property name="maxIdle" value="10" />
        </bean>
    
        <!-- 使用c3p0 -->
        <bean name="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.cj.jdbc.Driver" />
            <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/my_db?serverTimezone=GMT" />
            <property name="user" value="chy" />
            <property name="password" value="abcd" />
            <property name="maxPoolSize" value="30" />
            <property name="initialPoolSize" value="15" />
            <property name="minPoolSize" value="8" />
        </bean>
    
        <!--配置JdbcTemplate-->
        <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!--注入数据源-->
            <property name="dataSource" ref="c3p0DataSource" />
        </bean>
    </beans>

    可以使用<property>注入,也可以用<constructor-arg>注入。

    3、使用JdbcTemplate

        ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring-config.xml");
            //获取JdbcTemplate
            JdbcTemplate jdbcTemplate=applicationContext.getBean("jdbcTemplate", JdbcTemplate.class);
            String sql="select name from student_tb where id = 1";
            String name=jdbcTemplate.queryForObject(sql,String.class);
            System.out.println(name);

    从properties文件读取数据库配置

    把数据库的连接信息写在spring配置文件中,修改起来很麻烦。

    通常把数据库的配置信息单独写在一个properties文件中,然后在xml中引入properties配置文件

    src下新建db.properties:

    #dbcp数据源配置
    dbcp_driverClassName=com.mysql.cj.jdbc.Driver
    dbcp_url=jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT
    dbcp_username=chy
    dbcp_password=abcd
    dbcp_initialSize=15
    dbcp_maxTotal=30
    dbcp_minIdle=2
    dbcp_maxIdle=10
    
    #c3p0数据源配置
    #......

    注意key不能使用关键字。

    xml配置:

    <?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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util https://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    
        <!-- 引入properties配置文件 -->
        <context:property-placeholder location="db.properties" />
        
        <!-- dbcp -->
        <bean name="dbcpDataSource" class="org.apache.commons.dbcp2.BasicDataSource">
            <property name="driverClassName" value="${dbcp_driverClassName}" />
            <property name="url" value="${dbcp_url}" />
            <property name="username" value="${dbcp_username}" />
            <property name="password" value="${dbcp_password}" />
            <property name="initialSize" value="${dbcp_initialSize}" />
            <property name="maxTotal" value="${dbcp_maxTotal}" />
            <property name="minIdle" value="${dbcp_minIdle}" />
            <property name="maxIdle" value="${dbcp_maxIdle}" />
        </bean>
        
        <!--配置JdbcTemplate-->
        <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!--注入数据源-->
            <property name="dataSource" ref="dbcpDataSource" />
        </bean>
    </beans>

    以${key}的方式引用对应的value。


    引入properties配置文件的2种方式

    • 方式一(推荐)

       <context:property-placeholder location="db.properties" />
        <!-- 有多个properties文件时,逗号分隔即可-->
        <context:property-placeholder location="1.properties,2.properties" />
    • 方式二

        <!-- bean的name不是必需的 -->
        <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
            <property name="location" value="db.properties" />
        </bean>
        <!-- 引入多个properties文件 -->
        <bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
            <property name="locations">
                    <list>
                        <value>db1.properties</value>
                        <value>db2.properties</value>
                    </list>
            </property>
        </bean>

    使用JdbcTemplate构建dao层

    接口:

    public interface UserDao {
        public String queryNameById(int id);
        //其它方法
        //.....
    }

    方式一

    将JdbcTemplate作为成员变量,并提供对应的setter方法用于注入依赖:

    @Repository("userDaoImpl")
    public class UserDaoImpl implements UserDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
        @Override
        public String queryNameById(int id) {
            String sql = "select name from user_tb where id=?";
            String name = jdbcTemplate.queryForObject(sql, String.class, id);
            return name;
        }
    
        //其它方法的实现
        //......
    }

    JdbcTemplate要作为依赖注入,需要在xml中配置JdbcTemplate:

    <bean name="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
            <!--注入数据源-->
            <property name="dataSource" ref="dbcpDataSource" />
    </bean>

    方式二

    继承JdbcDaoSupport:

    public class UserDaoImpl extends JdbcDaoSupport implements UserDao {
        @Override
        public String queryNameById(int id) {
            String sql = "select name from user_tb where id=?";
            //调用基类JdbcDaoSupport中的方法获取JdbcTemplate
            JdbcTemplate jdbcTemplate = super.getJdbcTemplate();
            String name = jdbcTemplate.queryForObject(sql, String.class, id);
            return name;
        }
    
        //其它方法的实现
        //......
    }

    JdbcDaoSupport类需要注入一个DataSource类型的依赖,继承了JdbcDaoSupport自然也需要在xml中注入依赖:

    <bean name="userDaoImpl" class="com.chy.dao.UserDaoImpl">
            <!--注入数据源-->
            <property name="dataSource" ref="dbcpDataSource" />
    </bean>

    注入数据源后,JdbcDaoSupport会自动创建JdbcTemplate的实例,我们直接  super.getJdbcTemplate()  获取JdbcTemplate即可,不用在xml中配置JdbcTemplate

  • 相关阅读:
    初涉SQL Server性能问题(2/4):列出等待资源的会话
    初涉SQL Server性能问题(1/4):服务器概况
    分享
    React Native 自定义radio 单选or多选
    css之定位
    小小小小小小之新闻案例
    paddingmargin的属性与连写
    css标准流和浮动
    css 伪类
    css元素的显示方式
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/11148958.html
Copyright © 2011-2022 走看看