Spring之JdbcTemplate

发布时间:2016-12-11 6:36:01 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Spring之JdbcTemplate",主要涉及到Spring之JdbcTemplate方面的内容,对于Spring之JdbcTemplate感兴趣的同学可以参考一下。

Spring提供了一个模板来操作JDBC:JdbcTemplate,这个类中需要提供一个dataSource才能使用。 第一种方式:JdbcTemplate需要手工赋值,这里选择了注入,JdbcTemplate中的dataSource也需要手工赋值,也是用了注入的形式。 Domain: public class Account { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } AccountDao public interface AccountDao { public void addAccount(Account account); public void updateAccount(Account account); public void deleteAccount(Integer id); public List<Account> findAll(); public Account getAccountById(String id); } AccountDaoImpl public class AccountDaoImpl implements AccountDao{ //这个是spring提供的操作jdbc的模板 private JdbcTemplate jdbcTemplate; @Override public void addAccount(Account account) { String sql = "INSERT INTO ACCOUNT(ID,NAME) VALUES(?,?)"; Object[] objs = {account.getId(),account.getName()}; int[] types = {java.sql.Types.INTEGER,java.sql.Types.VARCHAR}; /* * 第一个参数:sql语句 * 第二个参数:参数数组 * 第三个参数:参数类型数组 */ jdbcTemplate.update(sql, objs, types); } @Override public void updateAccount(Account account) { String sql = "UPDATE ACCOUNT SET NAME = ? WHERE ID = ?"; Object[] objs = {account.getName(),account.getId()}; int[] types = {java.sql.Types.VARCHAR,java.sql.Types.INTEGER}; jdbcTemplate.update(sql, objs, types); } @Override public void deleteAccount(Integer id) { String sql = "DELETE FROM ACCOUNT WHERE ID = ?"; Object[] objs = {id}; int[] types = {java.sql.Types.INTEGER}; jdbcTemplate.update(sql, objs, types); } @Override public List<Account> findAll() { /* * ResultSet rs : 当前行的结果集 * int rowNum : 当前行的行号 * 这个方法查询一条结果执行一次 */ RowMapper rowMapper = new RowMapper(){ public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Account a = new Account(); a.setId(rs.getInt(1));//从1开始 a.setName(rs.getString(2)); return a; } }; String sql = "SELECT * FROM ACCOUNT"; List<Account> list = this.jdbcTemplate.query(sql, rowMapper); return list; } @Override public Account getAccountById(String id) { String sql = "SELECT * FROM ACCOUNT WHERE ID = ?"; Object[] objs = {id}; //int[] types = {java.sql.Types.INTEGER}; RowMapper rowMapper = new RowMapper(){ public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Account a = new Account(); a.setId(rs.getInt(1));//从1开始 a.setName(rs.getString(2)); return a; } }; //return (Account)jdbcTemplate.queryForObject(sql, objs,types, rowMapper); return (Account)jdbcTemplate.queryForObject(sql, objs, rowMapper); } public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } } applicationContext.xml: <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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!-- 配置DBCP数据源 --> <bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="xxc"/> <!-- 配置初始化连接数 --> <property name="initialSize" value="5"/> <!-- 配置最大连接数 --> <property name="maxActive" value="20"/> <!-- 配置最大空闲数,防止洪峰退去时,连接池中连接数过多 --> <property name="maxIdle" value="10"/> <!-- 配置最小空闲数,防止洪峰到来时,连接池中连接数过少--> <property name="minIdle" value="5"/> <!-- 设置最大等待事件,如果超过这个时间,连接池将抛出异常,例如:最大连接数是20个,当21个连接来的时候就需要等待--> <property name="maxWait" value="5000"/> </bean> <!-- 配置jdbcTemplate,这个是spring提供的操作jdbc的模板(一个类),里面用到了dataSource,所以这里需要注入数据源 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 注入数据库源 --> <property name="dataSource" ref="dbcpDataSource"></property> </bean> <!-- 配置dao对象 --> <bean id="accountDao" class="com.xxc.jdbc.AccountDaoImpl"> <!-- 注入jdbcTemplate --> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean> </beans> 测试类: public class App { public static void main(String[] args) throws SQLException { ApplicationContext ac = new ClassPathXmlApplicationContext("com/xxc/jdbc/applicationContext.xml"); /**********************************************添加***********************************************************************/ /*AccountDao dao = (AccountDao)ac.getBean("accountDao"); Account a = new Account(); a.setId(1); a.setName("xxc1"); dao.addAccount(a);*/ /**********************************************添加************************************************************************/ /**********************************************修改************************************************************************/ /*AccountDao dao = (AccountDao)ac.getBean("accountDao"); Account a = new Account(); a.setId(1); a.setName("xxc99"); dao.updateAccount(a);*/ /**********************************************修改************************************************************************/ /**********************************************删除************************************************************************/ /*AccountDao dao = (AccountDao)ac.getBean("accountDao"); dao.deleteAccount(1);*/ /**********************************************删除************************************************************************/ /**********************************************查询所有************************************************************************/ /*AccountDao dao = (AccountDao)ac.getBean("accountDao"); List<Account> list = dao.findAll(); for(Account a : list){ System.out.println(a.getId() + "-----" + a.getName()); }*/ /**********************************************查询所有************************************************************************/ /**********************************************查询一个************************************************************************/ AccountDao dao = (AccountDao)ac.getBean("accountDao"); Account a = dao.getAccountById("2"); System.out.println(a.getId()+"----------"+a.getName()); /**********************************************查询一个************************************************************************/ } } 第二种方式:在dao的实现类里不需要get和set   JdbcTemplate。说白了在dao层想使用JdbcTemplate就不需要自己赋值了,而是继承一个JdbcDaoSupport类,这个类中有创建JdbcTemplate的方法,但是JdbcTemplate创建时用到的dataSource还是需要我们自己手动赋值的。 acclicationContext.xml <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-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <bean id="dbcpDataSource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/test"/> <property name="username" value="root"/> <property name="password" value="xxc"/> <!-- 配置初始化连接数 --> <property name="initialSize" value="5"/> <!-- 配置最大连接数 --> <property name="maxActive" value="20"/> <!-- 配置最大空闲数,防止洪峰退去时,连接池中连接数过多 --> <property name="maxIdle" value="10"/> <!-- 配置最小空闲数,防止洪峰到来时,连接池中连接数过少--> <property name="minIdle" value="5"/> <!-- 设置最大等待事件,如果超过这个时间,连接池将抛出异常,例如:最大连接数是20个,当21个连接来的时候就需要等待--> <property name="maxWait" value="5000"/> </bean> <!-- 配置jdbcTemplate,这个是spring提供的操作jdbc的模板,里面用到了dataSource,所以这里需要注入数据源 --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <!-- 注入数据库源 --> <property name="dataSource" ref="dbcpDataSource"></property> </bean> <!-- 配置dao对象 --> <bean id="accountDao" class="com.xxc.jdbc.jdbcDao.AccountDaoImpl"> <!-- 这里给继承的JdbcDaoSupport中的JdbcTemplate类中的DataSource进行注入配置 --> <property name="dataSource" ref="dbcpDataSource"/> </bean> </beans> AccountDaoImpl public class AccountDaoImpl extends JdbcDaoSupport implements AccountDao{ @Override public void addAccount(Account account) { String sql = "INSERT INTO ACCOUNT(ID,NAME) VALUES(?,?)"; Object[] objs = {account.getId(),account.getName()}; int[] types = {java.sql.Types.INTEGER,java.sql.Types.VARCHAR}; /* * 第一个参数:sql语句 * 第二个参数:参数数组 * 第三个参数:参数类型数组 */ //这里直接使用JdbcDaoSupport父类提供的getJdbcTemplate()获取JdbcTemplate即可 super.getJdbcTemplate().update(sql, objs, types); } @Override public void updateAccount(Account account) { String sql = "UPDATE ACCOUNT SET NAME = ? WHERE ID = ?"; Object[] objs = {account.getName(),account.getId()}; int[] types = {java.sql.Types.VARCHAR,java.sql.Types.INTEGER}; super.getJdbcTemplate().update(sql, objs, types); } @Override public void deleteAccount(Integer id) { String sql = "DELETE FROM ACCOUNT WHERE ID = ?"; Object[] objs = {id}; int[] types = {java.sql.Types.INTEGER}; super.getJdbcTemplate().update(sql, objs, types); } @Override public List<Account> findAll() { /* * ResultSet rs : 当前行的结果集 * int rowNum : 当前行的行号 * 这个方法查询一条结果执行一次 */ RowMapper rowMapper = new RowMapper(){ public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Account a = new Account(); a.setId(rs.getInt(1));//从1开始 a.setName(rs.getString(2)); return a; } }; String sql = "SELECT * FROM ACCOUNT"; List<Account> list = super.getJdbcTemplate().query(sql, rowMapper); return list; } @Override public Account getAccountById(String id) { String sql = "SELECT * FROM ACCOUNT WHERE ID = ?"; Object[] objs = {id}; //int[] types = {java.sql.Types.INTEGER}; RowMapper rowMapper = new RowMapper(){ public Object mapRow(ResultSet rs, int rowNum) throws SQLException { Account a = new Account(); a.setId(rs.getInt(1));//从1开始 a.setName(rs.getString(2)); return a; } }; //return (Account)jdbcTemplate.queryForObject(sql, objs,types, rowMapper); return (Account)super.getJdbcTemplate().queryForObject(sql, objs, rowMapper); } }

上一篇:如何成为一个Linux内核开发者(经典)
下一篇:hadoop 检索文件

相关文章

相关评论