JdbcTemplate的模板第二种方式

Spring的JdbcTemplate的模板第二种方式

通过继承JdbcDaoSupport来JdbcTemplate模板对象

JdbcDaoSupport 是 spring 框架为我们提供的一个类,该类中定义了一个 JdbcTemplate 对象,我们可
以直接获取使用,但是要想创建该对象,需要为其提供一个数据源

public abstract class JdbcDaoSupport extends DaoSupport {

    private JdbcTemplate jdbcTemplate;

    /**
     * Set the JDBC DataSource to be used by this DAO.
     */
    public final void setDataSource(DataSource dataSource) {
        if (this.jdbcTemplate == null || dataSource != this.jdbcTemplate.getDataSource()) {
            this.jdbcTemplate = createJdbcTemplate(dataSource);
            initTemplateConfig();
        }
    }

    ......

}

代码演示

package com.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import com.dao.IUserDao;
import com.entity.User;

public class UserDaoImplSupport extends JdbcDaoSupport implements IUserDao{

    /**
     * 增
     */
    @Override
    public void save(User user) {
        String sql = "insert into t_user values(null,?)";
        super.getJdbcTemplate().update(sql, user.getT_name());
    }

    /**
     * 删
     */
    @Override
    public void delete(int id) {
        String sql = "delete from t_user where t_id = ?";
        super.getJdbcTemplate().update(sql, id);
    }

    /**
     * 改
     */
    @Override
    public void update(User user) {
        String sql = "update t_user set t_name = ? where t_id = ?";
        super.getJdbcTemplate().update(sql, user.getT_name() , user.getT_id());
    }

    /**
     * 查询一个
     * public <T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
     *      RowMapper: 里面书写的mapRow方法就是把ResultSet返回的结果集遍历封装到对象中
     */
    @Override
    public User find(int id) {
        String sql = "select * from t_user where t_id = ?";
        User user = super.getJdbcTemplate().queryForObject(sql, new RowMapper<User>() {

            @Override
            public User mapRow(ResultSet rs, int index) throws SQLException {

                User u = new User();
                u.setT_id(rs.getInt("t_id"));
                u.setT_name(rs.getString("t_name"));
                return u;
            }
        }, id);

        //判断
        if(user==null){
            return null;
        }
        return user;
    }

    /**
     * 使用聚合函数
     * public <T> T queryForObject(String sql, Class<T> requiredType)
     *      requiredType : 直接返回值的字节码
     */
    @Override
    public int count() {
        String sql= "select count(*) from t_user";
        return super.getJdbcTemplate().queryForObject(sql,Integer.class);
    }

    /**
     * 查询所有
     * public <T> List<T> query(String sql, RowMapper<T> rowMapper)
     */
    @Override
    public List<User> findAll() {
        String sql = "select * from t_user";
        List<User> query = super.getJdbcTemplate().query(sql, new RowMapper<User>() {

            @Override
            public User mapRow(ResultSet rs, int arg1) throws SQLException {

                User u = new User();
                u.setT_id(rs.getInt("t_id"));
                u.setT_name(rs.getString("t_name"));
                return u;
            }
        });

        //判断
        if(query.isEmpty()){
            return null;
        }
        return query;
    }

}

配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd ">

    <!-- 
        把UserDaoImpl对象放进容器中
        并且把数据源放进UserDaoImpl中,因为继承了JdbcDaoSupport, 里面需要dataSource
     -->
    <bean id="userDaoImpl" class="com.dao.impl.UserDaoImplSupport">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 把连接池放进容器中 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="org.gjt.mm.mysql.Driver"></property>
        <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/hibernate_crm"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
</beans>

思考:

两版 Dao 有什么区别呢?

答案:

  1. 第一种在 Dao类中定义 JdbcTemplate 的方式,适用于所有配置方式(xml 和注解都可以)。
  2. 第二种让 Dao继承 JdbcDaoSupport 的方式,只能用于基于 XML的方式,**注解用不了==

猜你喜欢

转载自blog.csdn.net/kato_op/article/details/80247819