spring整合jdbc(二)

在上次的操作中只是简单的利用了spring容器中注入dataSource元素来建立数据库的连接,而没有发挥出spring框架的核心作用。这里在继续对spring进行深入的理解:

在进行数据库操作时,我们每次都要进行一次链接,一来很费时费力,二来对以后的开发起不到很好的作用。

因此这里我们借助spring对JDBC的强大支持利用JDBCTemplate类来对JDBC的控制(调用、执行、查询、更新),JDBCTemplate的操作步骤如下:

  • 打开数据库连接。
  • 指定在连接上执行的语句。
  • 设置要求的参数并执行语句。
  • 如需求,可以得到Reslutset,迭代返回结果,接着不管任何异常关闭Reslutset。
  • 运行每次迭代的代码,若没有要求迭代,只返回单个值。
  • 处理SQLException事例。
  • 处理所有活动的事物(判断是否提交,回滚)。
  • 关闭链接

这里我们用到的JDBCTemplate的类函数:

query方法:查询存数据的方法,一大堆的函数啊。我们只用到了(ArrayList<Student>) jdbcTemplate.query("select * from student", new StudentRowMapper());

update方法:一般是修改啊更新啊删除啊操作,int update(string ,Object[],int[])string则是我们写的sql语句了,object[]是我们在javabean中的定义的类型参数,int[]类型参数的类型。例如:jdbcTemplate.update("delete from student where id=?",new Object[]{id}, newint[]{java.sql.Types.INTEGER});

execute方法:没有来得及看呢。

这里是现实类StudentServiceImpl方法体

public class StudentServiceImpl implements StudentService {
	private JdbcTemplate jdbcTemplate;

	/**
	 * @param jdbcTemplate the jdbcTemplate to set
	 */
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
	}
	/* (non-Javadoc)
	 * @see com.ncut.service.StudentService#queryStudent()
	 */
	public ArrayList<Student> queryStudent() {
		
		//List query(String sql,Ojbect[] args,RowMapper rowMapper)
	    // 说明:常用的查询,sql待执行的sql语句,args是sql语句的参数,rowMapper负责将每一行记录转化为java对象存放在list,并最终返回

		return (ArrayList<Student>) jdbcTemplate.query("select * from student", new StudentRowMapper());  
	}
	
	public void delete(Integer id) throws Exception{
           jdbcTemplate.update("delete from student where id=?", new Object[]{id},
           new int[]{java.sql.Types.INTEGER});

	public Student getStudent(Integer id) {    
          return (Student)jdbcTemplate.queryForObject("select * from student where id=?", new Object[]{id},
          new int[]{java.sql.Types.INTEGER}, new StudentRowMapper());
 	 }

	public void save(Student student) {
         jdbcTemplate.update("insert into student(username) values(?)", new Object[]{student.getUsername()},
         new int[]{java.sql.Types.VARCHAR});
  }

	
  }

其中StudentRowMapper是按照重载函数RowMapper的要求写的:

public class StudentRowMapper implements RowMapper {

	public Object mapRow(ResultSet rs,int index) throws SQLException {
		Student student=new Student();
		student.setUsername(rs.getString("username"));
		student.setPassword(rs.getString("password"));
		return student;
		
	}
}


最后的测试方法SpringJDBC:

public class SpringJDBC {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
		StudentService studentService=(StudentService) ctx.getBean("studentService");
		ArrayList<Student> list=studentService.queryStudent();
		for(Student student:list){
			System.out.println("您的用户名是:"+student.getUsername());
			System.out.println("您的年龄是"+student.getAge());
		}
	}

}

其中为了测试重载函数的作用,加了一条语句System.out.println("您的年龄是"+student.getAge());

结果没有取到age的值,证明了RowMapper的作用RowMapper.mapRow(ResultSet,int)方法返回的对象曾加到list上,并将List返回给调用者

 

public Item insert(Item item) {  
  String sql = "INSERT INTO items(user_id,name,phone,email) VALUES(?,?,?,?)";  
  Object[] params = new Object[]{item.getUserId(),item.getName(),item.getPhone(),item.getEmail()};  
  int[] types = new int[]{Types.INTEGER,Types.VARCHAR,Types.CHAR,Types.VARCHAR};  
  jdbcTemplate.update(sql,params,types);  
  return item;  
 }  
  
 public Item update(Item item) {  
  String sql = "UPDATE items SET name = ?, phone = ?, email = ? WHERE id = ?";  
  Object[] params = new Object[] {item.getName(),item.getPhone(),item.getEmail(),item.getId()};  
  int[] types = new int[] {Types.VARCHAR,Types.CHAR,Types.VARCHAR,Types.VARCHAR,Types.INTEGER};  
  jdbcTemplate.update(sql,params,types);  
  
  return item;  
 }  
  
 public void delete(Item item) {  
  String sql = "DELETE FROM items WHERE id = ?";  
  Object[] params = new Object[] {item.getId()};  
  int[] types = new int[]{Types.INTEGER};  
  jdbcTemplate.update(sql,params,types);  
 }  
  
 public Item findById(int id) {  
  String sql = "SELECT * FROM items WHERE id = ?";  
  Object[] params = new Object[] {id};  
  int[] types = new int[] {Types.INTEGER};  
  List items = jdbcTemplate.query(sql,params,types,new ItemMapper());  
  if(items.isEmpty()){  
   return null;  
  }  
  return (Item)items.get(0);  
 }  
  
 public List<Item> findAll() {  
  String sql = "SELECT * FROM items";  
  return jdbcTemplate.query(sql,new ItemMapper());  
 }  
  
  
 public List<Item> findAllByUser(int user_id) {  
  String sql = "SELECT * FROM items WHERE user_id = ?";  
  Object[] params = new Object[]{user_id};  
  int[] types = new int[]{Types.INTEGER};  
  List items = jdbcTemplate.query(sql,params,types,new ItemMapper());  
  return items;  
 }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值