使用spring的jdbcTemplate-----将JDBC操作建模为细粒度的对象

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);
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值