• 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);
        }
    }
  • 相关阅读:
    web项目中加斜杠与不加斜杠
    事务是什么,以及事务四个特性
    Java中 a+=b和a=a+b有什么区别?
    JAVA基础15
    JAVA基础13
    JAVA基础12
    JAVA基础11
    JAVA基础10
    DELPHI下的SOCK编程
    设置VSS2005使支持通过Internet访问(转)
  • 原文地址:https://www.cnblogs.com/li-zhi-long/p/9401436.html
Copyright © 2020-2023  润新知