博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring整合jdbc(二)
阅读量:6803 次
发布时间:2019-06-26

本文共 4519 字,大约阅读时间需要 15 分钟。

在上次的操作中只是简单的利用了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; }

转载于:https://www.cnblogs.com/jpa2/archive/2011/10/12/2527503.html

你可能感兴趣的文章
find grep wc awk sed sort uniq split指令详解
查看>>
高并发中的卡死状态 -HashMap
查看>>
HTTP State Management Mechanism(HTTP 状态管理机制)
查看>>
绩效管理功能扩展包
查看>>
linux内核之系统启动(二)
查看>>
IBM MQ 7.5开发版安装配置
查看>>
Shell 十三问学习笔记5
查看>>
华为PPP链路认证
查看>>
Zend Server 安装配置
查看>>
wuzhicms后台菜单的添加
查看>>
hadoop搭建
查看>>
修改默认defatu.prop
查看>>
我的友情链接
查看>>
【技术碰撞激情,“博”出精彩人生!】2013年度IT博客大赛开幕
查看>>
我的友情链接
查看>>
数据结构
查看>>
android.support.v4.view.NestedScrollingChild cannot be resolved
查看>>
PHP array_multisort() 函数详解 及 二维数组排序(模拟数据表记录按字段排序)
查看>>
java.util.ConcurrentModificationException异常参考解决方法
查看>>
Linux主机和VirtualBox虚拟机局域网互通
查看>>