SqlUpdate是Spring提供的一个工具类,使用它我们可以完成Spring和JDBC的集成封装,更方便的进行数据库操作
数据库SQL
CREATE TABLE `test` ( `testid` varchar ( 10 ) default NULL , `testname` varchar ( 10 ) default NULL ) ENGINE= InnoDB DEFAULT CHARSET = gb2312; 表中数据为: 1 name1 2 name2 3 name3 4 name4 5 name5
DAO接口:
package ch8.sqlUpdate; import java.sql.Types; import javax.sql.DataSource; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.SqlUpdate; // 继承SqlUpdate,完成sql update操作 public class Update extends SqlUpdate ... { public Update(DataSource dataSource,String sql) ... { super (dataSource,sql); this .declareParameter( new SqlParameter(Types.VARCHAR)); this .declareParameter( new SqlParameter(Types.VARCHAR)); } }package ch8.sqlUpdate; import java.sql.Types; import javax.sql.DataSource; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.SqlUpdate; // 继承SqlUpdate,完成sql delete操作 public class Delete extends SqlUpdate ... { public Delete(DataSource dataSource,String sql) ... { super (dataSource,sql); this .declareParameter( new SqlParameter(Types.VARCHAR)); } }
package ch8.sqlUpdate; import java.util.List; public interface ITestDAO ... { public void updateUserByName(String newName,String oldName); public void deleteUserByName(String name); public List getAll(); }
SqlUpdate子类实现
package ch8.sqlUpdate; import java.sql.Types; import javax.sql.DataSource; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.SqlUpdate; // 继承SqlUpdate,完成sql delete操作 public class Delete extends SqlUpdate ... { public Delete(DataSource dataSource,String sql) ... { super (dataSource,sql); this .declareParameter( new SqlParameter(Types.VARCHAR)); } }package ch8.sqlUpdate; import java.sql.Types; import javax.sql.DataSource; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.SqlUpdate; // 继承SqlUpdate,完成sql update操作 public class Update extends SqlUpdate ... { public Update(DataSource dataSource,String sql) ... { super (dataSource,sql); this .declareParameter( new SqlParameter(Types.VARCHAR)); this .declareParameter( new SqlParameter(Types.VARCHAR)); } }
DAO实现类:
package ch8.sqlUpdate; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.core.PreparedStatementCallback; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.core.support.JdbcDaoSupport; import org.springframework.jdbc.object.SqlUpdate; import ch8.sqlUpdate.User; public class TestDAOImpl extends JdbcDaoSupport implements ITestDAO ... { private Update sqlUpdate; private Delete sqlDelete; private final String sql = " update test set testname=? where testname=? " ; // update SQL private final String delSql = " delete from test where testname=? " ; // 根据name把对应的数据记录删除 public void deleteUserByName(String name) ... { sqlDelete = new Delete(getDataSource(),delSql); sqlDelete.compile(); sqlDelete.update( new Object[] ... {name} ); } // 根据oldName把名称改为newName public void updateUserByName(String newName,String oldName) ... { sqlUpdate = new Update(getDataSource(),sql); // 构造SqlUpdate对象 sqlUpdate.compile(); sqlUpdate.update( new Object[] ... {newName,oldName} ); } // 获得所有用户列表,以检查update和delete操作效果 public List getAll() ... { return (List) this .getJdbcTemplate().execute( new PreparedStatementCreator() ... { public PreparedStatement createPreparedStatement(Connection connection) throws SQLException ... { return connection.prepareStatement( " select * from test " ); } }, new PreparedStatementCallback() ... { public Object doInPreparedStatement(PreparedStatement ps) throws SQLException,DataAccessException ... { List result = new ArrayList(); ResultSet rs = ps.executeQuery(); User t = null ; while (rs.next()) ... { t = new User(rs.getString( " testid " ),rs.getString( " testname " )); result.add(t); } return result; } } ); } }
Domain对象
package ch8.sqlUpdate; public class User ... { private String name; private String id; public User(String name, String id) ... { this .name = name; this .id = id; } public String getId() ... { return id; } public void setId(String id) ... { this .id = id; } public String getName() ... { return name; } public void setName(String name) ... { this .name = name; } public String toString() ... { return this .id + " -- " + this .name; } }
测试代码:
package ch8.sqlUpdate; import java.util.Iterator; import java.util.List; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test ... { /** */ /** * @param args */ public static void main(String[] args) ... { ApplicationContext context = new ClassPathXmlApplicationContext( " ch8/sqlUpdate/applicationContext.xml " ); TestDAOImpl testDAOImpl = (TestDAOImpl)context.getBean( " testDAO " ); List result = null ; result = testDAOImpl.getAll(); System.out.println( " old value " ); for (Iterator iter = result.iterator(); iter.hasNext();) ... { User element = (User) iter.next(); System.out.println(element); } testDAOImpl.updateUserByName( " name11 " , " name1 " ); // 执行update(set testname=name11) System.out.println( " new value " ); result = testDAOImpl.getAll(); for (Iterator iter = result.iterator(); iter.hasNext();) ... { User element = (User) iter.next(); System.out.println(element); } testDAOImpl.deleteUserByName(" name11 " ); // 执行deltet(testname=name11) System.out.println( " value after delete " ); result = testDAOImpl.getAll(); for (Iterator iter = result.iterator(); iter.hasNext();) ... { User element = (User) iter.next(); System.out.println(element); } } }
测试结果:
old value name2--2 name3--3 name4--4 name5--5 name1--1 new value name2--2 name3--3 name4--4 name5--5name11--1 value after delete name2--2 name3--3 name4--4 name5--5