Spring JdbcTemplate 和 NamedParameterJdbcTemplate 使用

1.简单介绍

DAO层 的一般使用常见的是MyBatis 和 Hibernate,但是Hibernate是重量级的,而且学习成本较高,Mybatis 需要编写大量配置文件及接口文件,对于简单的项目应用和特殊情况,我们就可以选用 Spring 为我们提供的 JdbcTemplate ,或者考虑JPA。

JdbcTemplate 和 NamedParameterJdbcTemplate 的区别在于后者具有命名参数,使用更加灵活。JdbcTemplate 在使用是sql语句中的变量用?替代,然后参数按照顺序一一对应,而NamedParameterJdbcTemplate 使用:加变量名,然后参数名和变量名去对应,这就叫命名参数(有名字的参数,不再是个?)

2.使用

首先必须引入spring-jdbc jar包

 <dependency>  
           <groupId>org.springframework</groupId>  
           <artifactId>spring-jdbc</artifactId>  
           <version>${spring.version}</version>  
 </dependency>

其次在spring 的配置文件中将JdbcTemplate 或者 NamedParameterJdbcTemplate 注入

<!--jdbcTemplate  -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    
    <!--NamedParameterJdbcTemplate-->
    <bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
        <constructor-arg ref="dataSource"></constructor-arg>
    </bean>

然后就可以在DAO层使用了

package com.lzl.dao;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowCallbackHandler;
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Repository;

import com.lzl.entity.UserInfo;
@Repository
public class UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;
    
    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
    
    //使用JdbcTemplate
    public List<UserInfo> getAllUser(){
        String sql = "select * from user_info";
        final List<UserInfo> list = new ArrayList<UserInfo>();
        
         jdbcTemplate.query(sql, new RowCallbackHandler(){

            @Override
            public void processRow(ResultSet rs) throws SQLException {
                UserInfo user = new UserInfo();
                user.setID(rs.getInt("id"));
                user.setUserName(rs.getString("user_name"));
                user.setAge(rs.getInt("age"));
                user.setSex(rs.getString("sex"));
                list.add(user);
            }
             
         });
        return list;
    }
    
    //使用JdbcTemplate
    public Integer InsertUser(UserInfo user){
        String sql = "INSERT INTO user_info (id, user_name, age, sex) VALUES"+
                     "(null, ?, ?, ?)  ";
        Object [] param = new Object[]{user.getUserName(),user.getAge(),user.getSex()};
        return jdbcTemplate.update(sql,param);
    }
    
    //使用NamedParameterJdbcTemplate
    public Integer InserUserByNamed(UserInfo user){
        String sql = "INSERT INTO user_info (id, user_name, age, sex) VALUES"+
                "(null, :name, :age, :sex)  ";
        MapSqlParameterSource para = new MapSqlParameterSource();
        para.addValue("name", user.getUserName());
        para.addValue("age", user.getAge());
        para.addValue("sex", user.getAge());
        return  namedParameterJdbcTemplate.update(sql, para);
    }
}
原文地址:https://www.cnblogs.com/li-zhi-long/p/9401436.html