SpringJdbc简介

Spring对持久层的支持是SpringJdbc。尽管在实际开发中Hibernate是使用较多的持久层技术。

但是,我个人还是喜欢“原始”技术,尽管SpringJdbc我在实际开发中用的不多,呵呵...

 

开始吧。。。

1.创建数据库脚本db.sql

drop table emp;
create table emp
(	
	id		integer		primary	key		auto_increment,
	name	varchar(20),
	password	varchar(20),
	email	varchar(20),
	birthday	date,
	info	varchar(100)
);


 

2.床架一个JavaWeb项目,添加相应的的Jar文件。(我用的Spring2.5+MySQL5.1)

 -->Spring依赖的 Jar文件

spring.jar

commons-logging-api-1.1.jar

-->数据库驱动

mysql-connector-java-5.1.7-bin.jar

3.创建实体类Emp.java

package cdl;
import java.util.Date;
public class Emp {
	private int id;
	private String name;
	private String password;
	private String email;
	private Date birthday;
	private String info;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
	@Override
	public String toString() {
		return "Emp [id=" + id + ", name=" + name + ", password=" + password
				+ ", email=" + email + ", birthday=" + birthday + ", info="
				+ info + "]";
	}
}


 

4.编写MyJdbc.java(里面包行了介绍的方法,不是全部,只是常用的一些方法)

package cdl;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
/**
 *  SpringJdbc详解
 *  @author Root
 */
public class MyJdbc extends JdbcDaoSupport { //JdbcDaoSupport是Spring提供的JDBC支持
	
	/**
	 * 获取数据源
	 * @return 已经获取的数据源
	 * @throws Exception
	 */
	public DataSource getMyDataSource()throws Exception{
		return this.getDataSource();
		//return this.getJdbcTemplate().getDataSource();
	}
	
	/**
	 * 获取连接
	 * @return 已经获取的连接
	 * @throws Exception
	 */
	public Connection getMyConnection()throws Exception{
		return this.getConnection();
		//return this.getJdbcTemplate().getDataSource().getConnection();
	}
	
	/**
	 * 添加对象
	 * @param emp 要添加的对象
	 * @throws Exception
	 */
	public void save(Emp emp)throws Exception{
		//要执行的SQL语句
		String sql="insert into emp(name,password,email,birthday,info)values(?,?,?,?,?)";
		//SQL语句中的参数
		Object args[]={emp.getName(),emp.getPassword(),emp.getEmail(),emp.getBirthday(),emp.getInfo()};
		//SQL语句中的参数类型
		int argTypes[]={Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.DATE,Types.VARCHAR};
		//执行添加操作,返回影响行数
		//this.getJdbcTemplate().update(sql); //直接操作SQL语句
		//this.getJdbcTemplate().update(sql, args); //操作SQL语句+参数
		this.getJdbcTemplate().update(sql, args, argTypes); //操作SQL语句+参数+参数类型
	}
	
	/**
	 * 修改对象
	 * @param emp 要修改的对象
	 * @throws Exception
	 */
	public void update(Emp emp)throws Exception{
		//要执行的SQL语句
		String sql="update emp set name=?,password=?,email=?,birthday=?,info=? where id=?";
		//SQL语句中的参数
		Object args[]={emp.getName(),emp.getPassword(),emp.getEmail(),emp.getBirthday(),emp.getInfo(),emp.getId()};
		//SQL语句中的参数类型
		int argTypes[]={Types.VARCHAR,Types.VARCHAR,Types.VARCHAR,Types.DATE,Types.VARCHAR,Types.INTEGER};
		//执行修改操作,返回影响行数
		//this.getJdbcTemplate().update(sql); //直接操作SQL语句
		//this.getJdbcTemplate().update(sql, args); //操作SQL语句+参数
		this.getJdbcTemplate().update(sql, args, argTypes); //操作SQL语句+参数+参数类型
	}
	
	/**
	 * 删除对象
	 * @param id 要删除对象的id
	 * @throws Exception
	 */
	public void delete(int id)throws Exception{
		//要执行的SQL语句
		String sql="delete from emp where id=?";
		//SQL语句中的参数
		Object args[]={id};
		//SQL语句中的参数类型
		int argTypes[]={Types.INTEGER};
		//执行删除操作,返回影响行数
		//this.getJdbcTemplate().update(sql); //直接操作SQL语句
		//this.getJdbcTemplate().update(sql, args); //操作SQL语句+参数
		this.getJdbcTemplate().update(sql, args, argTypes); //操作SQL语句+参数+参数类型
	}
	
	/**
	 * 根据id查询
	 * @param id 要查询对象的id
	 * @return 此id对应的对象
	 * @throws Exception
	 */
	public Emp findById(int id)throws Exception{
		//要执行的SQL语句
		String sql="select * from emp where id=?";
		//SQL语句中的参数
		Object args[]={id};
		//使用RowMapper封装查询对象
		RowMapper rowMapper=new RowMapper(){
			public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
				Emp emp=new Emp();
				emp.setId(rs.getInt("id"));
				emp.setName(rs.getString("name"));
				emp.setPassword(rs.getString("password"));
				emp.setEmail(rs.getString("email"));
				emp.setBirthday(rs.getDate("birthday"));
				emp.setInfo(rs.getString("info"));
				return emp;
			}
		};
		//执行查询操作,返回List集合
		List list=this.getJdbcTemplate().query(sql, args, rowMapper);
		return list.size()>0?(Emp)list.get(0):null;
	}
	
	/**
	 * 查询全部记录
	 * @return 查询到的记录集合
	 * @throws Exception
	 */
	public List findAll()throws Exception{
		//要执行的SQL语句
		String sql="select * from emp";
		//使用RowMapper封装查询对象
		RowMapper rowMapper=new RowMapper(){
			public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
				Emp emp=new Emp();
				emp.setId(rs.getInt("id"));
				emp.setName(rs.getString("name"));
				emp.setPassword(rs.getString("password"));
				emp.setEmail(rs.getString("email"));
				emp.setBirthday(rs.getDate("birthday"));
				emp.setInfo(rs.getString("info"));
				return emp;
			}
		};
		//执行查询操作,返回List集合
		List list=this.getJdbcTemplate().query(sql, rowMapper);
		return list.size()>0?list:null;
	}
	
	/**
	 * 查询总记录数
	 * @return 查询到总记录数
	 * @throws Exception
	 */
	public int findTotalCount()throws Exception{
		//要执行的SQL语句
		String sql="select count(id) from emp";
		//执行查询操作,返回int类型(forInt)
		return this.getJdbcTemplate().queryForInt(sql);   //直接操作SQL语句
		//this.getJdbcTemplate().queryForInt(sql, args);  //操作SQL语句+参数
		//this.getJdbcTemplate().queryForInt(sql, args, argTypes);   //操作SQL语句+参数+参数类型
	}
	
	/**
	 * 无查询条件的分页
	 * @param page 页数
	 * @param line 每页显示的行数
	 * @return 查询到的结果集
	 * @throws Exception
	 */
	public List findByPage(int page,int line)throws Exception{
		//要执行的SQL语句
		String sql="select * from emp limit ?,?";
		//SQL语句中的参数
		Object args[]={(page-1)*line,line};
		//使用RowMapper封装查询对象
		RowMapper rowMapper=new RowMapper(){
			public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
				Emp emp=new Emp();
				emp.setId(rs.getInt("id"));
				emp.setName(rs.getString("name"));
				emp.setPassword(rs.getString("password"));
				emp.setEmail(rs.getString("email"));
				emp.setBirthday(rs.getDate("birthday"));
				emp.setInfo(rs.getString("info"));
				return emp;
			}
		};
		//执行查询操作,返回List集合
		List list=this.getJdbcTemplate().query(sql, args, rowMapper);
		return list.size()>0?list:null;
	}
	
	/**
	 * 有查询条件的分页
	 * @param page 页数
	 * @param line 每页显示的行数
	 * @param emp 用对象封装查询条件
	 * @return 查询到的结果集
	 * @throws Exception
	 */
	public List findByPage(int page,int line,Emp emp)throws Exception{
		//要执行的SQL语句
		StringBuilder sql=new StringBuilder(" select * from emp as e where 1=1 ");
		if(emp!=null){
			if(emp.getName()!=null){
				sql.append(" and e.name='"+emp.getName()+"'");
			}
			if(emp.getPassword()!=null){
				sql.append(" and e.password='"+emp.getPassword()+"'");
			}
			if(emp.getEmail()!=null){
				sql.append(" and e.email='"+emp.getEmail()+"'");
			}
			if(emp.getBirthday()!=null){
				sql.append(" and e.birthday='"+emp.getBirthday()+"'");
			}
			if(emp.getInfo()!=null){
				sql.append(" and e.info='"+emp.getInfo()+"'");
			}
		}
		sql.append(" limit ?,? ");
		//输出SQL到控制台
		System.out.println("sql:"+sql);
		//SQL语句中的参数
		Object args[]={(page-1)*line,line};
		//使用RowMapper封装查询对象
		RowMapper rowMapper=new RowMapper(){
			public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
				Emp emp=new Emp();
				emp.setId(rs.getInt("id"));
				emp.setName(rs.getString("name"));
				emp.setPassword(rs.getString("password"));
				emp.setEmail(rs.getString("email"));
				emp.setBirthday(rs.getDate("birthday"));
				emp.setInfo(rs.getString("info"));
				return emp;
			}
		};
		//执行查询操作,返回List集合
		List list=this.getJdbcTemplate().query(sql.toString(), args, rowMapper); //sql.toString()要转型
		return list.size()>0?list:null;
	}
}


 

5.编写Spring的配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
	http://www.springframework.org/schema/tx 
	http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
	http://www.springframework.org/schema/aop 
	http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
	<!-- 配置数据源 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
		<property name="url" value="jdbc:mysql://localhost:3306/cdl"/>
		<property name="username" value="root"/>
		<property name="password" value="root"/>
	</bean>
	
	<!-- 配置myJdbc -->
	<bean id="myJdbc" class="cdl.MyJdbc">
		<property name="dataSource" ref="dataSource"/>
	</bean>
</beans>


 

6.编写测试类Test.java

package cdl;
import java.util.List;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
	public static void main(String[] args) throws Exception {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
		MyJdbc SpringJdbc = (MyJdbc) ctx.getBean("myJdbc");
		
		// 获取数据源
		System.out.println(SpringJdbc.getMyDataSource());
		// 获取数据库连接
		System.out.println(SpringJdbc.getMyConnection());
		
		//添加对象
//		Emp emp=new Emp();
//		emp.setName("spring");
//		emp.setPassword("jdbc");
//		emp.setEmail("[email protected]");
//		emp.setBirthday(new Date());
//		emp.setInfo("I love spring");
//		SpringJdbc.save(emp);
		
		//修改对象
//		Emp emp=new Emp();
//		emp.setId(7);
//		emp.setName("spring3.0");
//		emp.setPassword("jdbc3.0");
//		emp.setEmail("[email protected]");
//		emp.setBirthday(new Date());
//		emp.setInfo("I love spring3.0");
//		SpringJdbc.update(emp);
		
		//删除对象
//		SpringJdbc.delete(7);
		
		//根据id查询
//		System.out.println(SpringJdbc.findById(8).toString());
		
		//查询全部记录集合
//		List list=SpringJdbc.findAll();
//		for(int i=0;i<list.size();i++){
//			Emp emp=(Emp)list.get(i);
//			System.out.println(emp.toString());
//		}
		
		//查询全部记录数
//		System.out.println(SpringJdbc.findTotalCount());
		
		//分页查询(无查询条件)
//		List list=SpringJdbc.findByPage(2, 2);
//		for(int i=0;i<list.size();i++){
//			Emp emp=(Emp)list.get(i);
//			System.out.println(emp.toString());
//		}
		
		//分页查询(有查询条件)
		Emp emp = new Emp();
		emp.setName("spring");
		emp.setPassword("jdbc");
		emp.setEmail("[email protected]");
		emp.setBirthday(java.sql.Date.valueOf("2011-02-27")); //日期输入的是String,需要转型
		emp.setInfo("I love spring");
		
		List list = SpringJdbc.findByPage(1, 2, emp);
		for (int i = 0; i < list.size(); i++) {
			Emp e = (Emp) list.get(i);
			System.out.println(e.toString());
		}
	}
}


 

附:


 

你可能感兴趣的:(spring,sql,exception,String,list,object)