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()); } } }
附: