Spring实战读书笔记 第五章 征服数据库
1,Spring DAO类模板负责通用访问数据库功能:
-1,准备资源。
-2,开始事务。
-3,在事务中执行。
-4,返回数据。
-5,提交、回滚事务
-6,关闭资源和处理错误。
2,使用JDBC
-1,Spring提供三类JDBC模板
JdbcTemplate:最基本的Spring JDBC模板,这个模板支持最简单的JDBC数据库访问功能以及简单的索引参数查询。
NamedParameterJdbcTemplate:使用该模板类查询时,可以将查询值以命名参数的形式绑定到SQL中,而不是简单的使用索引参数。
SimpleJdbcTempleate:该模板利用Java 5的一些特性,如自动装箱、泛型以及可变参数来简化JDBC模板的使用。
3,配置JDBC
<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"value="oracle.jdbc.driver.OracleDriver" /><property name="url"value="jdbc:oracle:thin:@ip:1521:xxxxx" /><property name="username" value="xxxxx" /><property name="password" value="xxxxxx" /></bean>
public class JDBCTest {public static void main(String[] args) throws Exception {ApplicationContext ctx = new ClassPathXmlApplicationContext("chp05/dao/spring.xml");DataSource ds = (DataSource) ctx.getBean("dataSource");System.out.println(ds.getConnection().toString());}}
4,使用SimpleJdbcTempleate访问数据库
配置XML文件
<bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName"value="oracle.jdbc.driver.OracleDriver" /><property name="url"value="jdbc:oracle:thin:@172.19.188.163:1521:isqcdev" /><property name="username" value="isqc" /><property name="password" value="isqc" /></bean><bean id="jdbcTemplate"class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"><constructor-arg ref="dataSource" /></bean>
Dao
package chp05.dao;import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;/*** 类描述:JDBC连接测试类** @author: Jing* History: Jan 12, 2015 1:54:47 PM Jing Created.**/@SuppressWarnings("deprecation")public class JdbcDao {private SimpleJdbcTemplate jdbcTemplate;public void setJdbcTemplate(SimpleJdbcTemplate jdbcTemplate) {this.jdbcTemplate = jdbcTemplate;}/**** 方法说明:新增学生** Author: Jing* Create Date: Jan 12, 2015 2:01:31 PM*/public int addStudent(Student s){String sql = "INSERT INTO student (s_name, s_age) VALUES(?, ?)";int result = jdbcTemplate.update(sql, s.getSName(), s.getAge());return result;}}
<bean id="jdbcDao" class="chp05.dao.JdbcDao"><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean>
单元测试:
package chp05.dao;import org.junit.Assert;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/*** 类描述:** @author: Jing* History: Jan 12, 2015 2:01:54 PM Jing Created.**/public class JdbcDaoTest {@Testpublic void testAddStudet(){ApplicationContext ctx = new ClassPathXmlApplicationContext("chp05/dao/spring.xml");JdbcDao dao = (JdbcDao) ctx.getBean("jdbcDao");Student s = new Student();s.setAge(1);s.setSName("Lisi");int result = dao.addStudent(s);Assert.assertEquals(1, result);}}
查询方法模拟:
public class JdbcDao {private SimpleJdbcTemplate jdbcTemplate;/*** ResultSet和Student匹配对象*/private ParameterizedRowMapper<Student> rowMapper = new ParameterizedRowMapper<Student>() {@Overridepublic Student mapRow(ResultSet rs, int arg1) throws SQLException {Student s = new Student();s.setSName(rs.getString(1));s.setAge(rs.getInt(2));return s;}};
/**** 方法说明:根据学生姓名查询学生信息** Author: Jing Create Date: Jan 12, 2015 2:19:30 PM*/public Student getStudentByName(Student s) {String sql = "SELECT s_name,s_age from student WHERE s_name = ? and rownum = 1";s = jdbcTemplate.queryForObject(sql, rowMapper, s.getSName());return s;}
@Testpublic void testGetStudentByName(){ApplicationContext ctx = new ClassPathXmlApplicationContext("chp05/dao/spring.xml");JdbcDao dao = (JdbcDao) ctx.getBean("jdbcDao");Student s = new Student();//Student类重写equals方法s.setSName("Lisi");s.setAge(1);Student sTemp = dao.getStudentByName(s);Assert.assertEquals(s, sTemp);}
5,使用命名参数
/**** 方法说明:通过命名参数增加学生信息** Author: Jing Create Date: Jan 12, 2015 3:58:06 PM*/public int addStudentbyNameParameter(Student s) {String sql = "INSERT INTO student (s_name, s_age) VALUES(:username, :age)";Map<String, Object> params = new HashMap<String, Object>();params.put("username", s.getSName());params.put("age", s.getAge());return jdbcTemplate.update(sql, params);}
欢迎转载,但转载请注明原文链接[博客园: http://www.cnblogs.com/jingLongJun/]
[CSDN博客:http://blog.csdn.net/mergades]。
如相关博文涉及到版权问题,请联系本人。
[CSDN博客:http://blog.csdn.net/mergades]。
如相关博文涉及到版权问题,请联系本人。

浙公网安备 33010602011771号