1,更新操作对象
首先考虑如何将User插入操作建模为一个操作对象,可以扩展SqlUpdate为更新操作创建UserInsertOperation类
public class UserInsertOperation extends SqlUpdate{ public UserInsertOperation(DataSource dataSource){ this.setDataSource(dataSource); this.setSql("insert into user values(?,?)"); this.declareParamter(new SqlParamters(Types.VARCHAR)); this.declareParamter(new SqlParamters(Types.VARCHAR)); compile(); } public void perform(User user){ this.update(new Object[]{user.getUsername,user.getPassword()}); } }
一旦更新操作对象进行了正确的初始化后,就可以调用update()方法,并以对象数组形式传入参数,为了更好地进行封装,避
免无效的参数,可以提供自定义的perform()方法,以便从User对象中提取参数,然后再IOC容器中声明它的实例
<bean id="UserInsertOperation" class="com.kang.fei.dao.UserInsertOperation"> <constructor-arg ref="dataSource"/> </bean>
一下Main类展示了如何用这个操作类插入数据
public class Main{ public static void main(String[] args){ UserInsertOperation operation = new UserInsertOperation(dataSource); User user = new User("kang","fei"); operation.perform(user); } }
2,查询操作对象
对于查询操作对象,可以扩展MappingSqlQuery类,让查询和映射逻辑集中在一个类中,为了更好的进行封装,还应该编写定制的perform()方法,将查询参数打包在一个对象数组中,并强制转换返回类型
public class UserQueryOperation extends MappingSqlQuery{ public UserQueryOperation(DataSource dataSource){ setDataSource(dataSource); setSql("select *from user where id=?"); declareParamter(new SqlParamter(Types.INT)); complie(); } protected Object mapRow(ResultSet rs ,int rowNum)throws SQLException{ User user = new User(); user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); return user; } public User perform(int id){ return (User)findObject(new Object[]{id}); } }
然后在Spring Ioc容器中为这个操作对象声明一个实例
<bean id="userQueryOperaiton" class="com.kang.fei.dao.UserQueryOperation"> <constructor-arg ref="dataSource"/> </bean>
在Main类中,可以用该操作对象按照车牌号来查询车辆
public class Main{ public static void main(String[] args){ UserQueryOperation operation = (UserQueryOperation)context.getBean("userQueryOperation"); User user = operation.perform(2); System.out.println("username: "+user.getUsername()); System.out.println("password: "+user.getPassword()); } }
3,函数操作对象
SqlFunction操作对象类型用于查询单个值,例如User统计操作就可以通过SqlFunction进行建模,run()方法返回的结果类型为整形,如果想返回其他类型就必须调用runGeneric()方法.
public class UserCountOperation extends SqlFunction{ public UserCountOperation(DataSource dataSource){ setDataSource(dataSource); setSql("select count(*) from user"); complie(); } public int perform(){ return run(); } }
然后再spring Ioc容器中为这个操作对象声明一个实例
<bean id="userCountOperaiton" class="com.kang.fei.dao.UserCountOperation"> <constructor-arg ref="dataSource"/> </bean>
以下Main代码测试
public class Main{ public static void main(String[] args){ UserCountOperation operation= (UserCountOperation)context.getBean("userCountOPeration"); int count = operation.perform(); System.out.println("count : "+count); } }