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

转载于:https://www.cnblogs.com/jingLongJun/p/4491057.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值