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 {
@Test
public 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>() {
 
@Override
public 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;
}
 
@Test
public 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);
}
posted @ 2015-01-14 11:24  梅尔加德斯  阅读(143)  评论(0编辑  收藏  举报