SpringJdbc
(1)SpringJdbc是什么?
是spring框架中的一个模块,对jdbc api做了封装,简化了 jdbc的代码(比如,不用考虑获取连接与关闭连接了)
(2)编程步骤
step1. 导包。
step2. 添加spring配置文件。
step3. 添加JdbcTemplate配置。
注:JdbcTemplate对jdbc的api做了封装。
step4. 调用JdbcTemplate提供的方法。
注:通常将JdbcTemplate注入到DAO。
利用springJdbc访问数据库--插入 删除 修改 查询 --代码如下:
spring配置文件
<!-- 组件扫描 -->
<context:component-scan base-package="dao"/>
<!-- db.properties -->
<util:properties id="config" location="classpath:db.properties" />
<!-- 连接池 -->
<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="#{config.driver}"/>
<property name="url" value="#{config.url}"/>
<property name="username" value="#{config.username}"></property>
<property name="password" value="#{config.password}"></property>
</bean>
<!-- JdbcTemplate利用jdbc访问数据库 -->
<bean id="jt" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="ds"></property>
</bean>
DAO:
package dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import entity.Emp;
@Repository("empDAO")
public class EmpDAO {
@Resource(name="jt")
private JdbcTemplate template;
//插入一条记录
//连接的获取、关闭、异常的处理、statement都不用写
public void save(Emp emp){
String sql = "INSERT INTO wq VALUES (wq_seq.nextval,?,?)";
//对象数组用于给?赋值
Object[] args = new Object[]{emp.getName(),emp.getAge()};
template.update(sql, args);
}
//查找所有
public List<Emp> findAll(){
List<Emp> list = new ArrayList<Emp>();
String sql = "SELECT id,name,age FROM wq ORDER BY id";
list = template.query(sql, new EmpRowMapper());
return list;
}
//内部类,此类需要实现接口RowMapper
//告诉JdbcTemplate如何将ResultSet中的一条记录转换为实体对象
class EmpRowMapper implements RowMapper<Emp>{
//rs:要处理的结果集
//index:当前正在处理的记录的下标(从0开始)
public Emp mapRow(ResultSet rs, int index) throws SQLException {
Emp emp = new Emp();
emp.setId(rs.getInt("id"));
emp.setName(rs.getString("name"));
emp.setAge(rs.getDouble("age"));
return emp;
}
}
//根据id查询记录(查询单条记录)
public Emp findById(int id){
Emp emp = null;
String sql = "SELECT * FROM wq WHERE id=?";
Object[] obj = new Object[]{id};
//找不到时候会抛异常,可以try{}catch()返回null
emp = template.queryForObject(sql, obj, new EmpRowMapper());
return emp;
}
//根据id查询记录(查询单条记录)-方法二
public Emp findById2(int id){
String sql = "SELECT * FROM wq WHERE id=?";
Object[] obj = new Object[]{id};
List<Emp> list = template.query(sql, obj,new EmpRowMapper());
if(list != null && list.size()>0){
return list.get(0);
}
return null;
}
//修改某条数据
public void modify(Emp emp){
String sql = "UPDATE wq SET name=?,age=? WHERE id=?";
Object[] obj = new Object[]{emp.getName(),emp.getAge(),emp.getId()};
template.update(sql, obj);
}
//删除某条记录
public void delete(int id){
String sql = "DELETE FROM wq WHERE id=?";
Object[] obj = new Object[]{id};
template.update(sql, obj);
}
}
测试代码:
package test;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import dao.EmpDAO;
import entity.Emp;
public class TestCase {
private EmpDAO dao;
@Before
public void init(){
ApplicationContext ac =
new ClassPathXmlApplicationContext("springmvc.xml");
dao = ac.getBean("empDAO",EmpDAO.class);
}
@Test
//测试插入一条记录
public void test1(){
//构造一个员工对象
Emp emp = new Emp();
emp.setName("Han Mei");
emp.setAge(new Double(19));
dao.save(emp);
}
@Test
//测试查询所有
public void test2(){
List<Emp> list = dao.findAll();
for(Emp e : list){
System.out.println(e);
}
}
@Test
//根据id查询--此方法若找不到数据则会抛出异常
public void test3(){
Emp emp = dao.findById(11);
System.out.println(emp);
}
@Test
//根据id查询--此方法若找不到数据则返回null
public void test4(){
Emp emp = dao.findById2(11);
System.out.println(emp);
}
@Test
//修改某条数据
public void test5(){
Emp emp = dao.findById2(3);//找出一个Emp
emp.setAge(emp.getAge()*2);//年龄翻倍
dao.modify(emp);
}
@Test
public void test6(){
dao.delete(3);
}
}
示例演示-登录-使用spring-jdbc实现:
spring配置文件略
package com.tarena.netctoss.dao;
import com.tarena.netctoss.entity.Admin;
/**
* 持久层接口
*/
public interface AdminDAO {
public Admin findByAdminCode(String adminCode);
}
持久层的实现类:
package com.tarena.netctoss.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.tarena.netctoss.entity.Admin;
/**
* 利用JdbcTemplate实现持久层
*/
@Repository("JdbcadminDAO")
public class AdminDAOJbcpTemplate implements AdminDAO {
@Resource(name="jt")
private JdbcTemplate template;
@Override
public Admin findByAdminCode(String adminCode) {
String sql = "SELECT * FROM admin_info WHERE admin_code=?";
Object[] obj = new Object[]{adminCode};
List<Admin> list = template.query(sql, obj,new AdminRowMapper());
if(list != null && list.size()>0){
return list.get(0);
}
return null;
}
//内部类
class AdminRowMapper implements RowMapper<Admin>{
@Override
public Admin mapRow(ResultSet rs, int rowNum) throws SQLException {
Admin admin = new Admin();
admin.setAdminId(rs.getInt("admin_id"));
admin.setAdminCode(rs.getString("admin_code"));
admin.setPassword(rs.getString("password"));
admin.setName(rs.getString("name"));
admin.setTelephone(rs.getString("telephone"));
admin.setEmail(rs.getString("email"));
admin.setEnrolldate(rs.getTimestamp("enrolldate"));
return admin;
}
}
}
测试代码:
package test1;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.tarena.netctoss.dao.AdminDAO;
import com.tarena.netctoss.entity.Admin;
public class TestCase {
private AdminDAO dao;
@Before
public void init(){
ApplicationContext ac =
new ClassPathXmlApplicationContext("springmvc.xml");
dao = ac.getBean("JdbcadminDAO",AdminDAO.class);
}
//测试获取Admin
@Test
public void test1(){
Admin admin = dao.findByAdminCode("caocao");
System.out.println(admin);
}
}
在service层中注入该DAO
@Resource(name="JdbcadminDAO")//利用spring-jdbc实现