SpringJdbc访问数据库

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实现



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荒--

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值