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); } }