spring中JdbcTemplate的使用
2016-03-09 23:03
411 查看
一.首先JdbcTemplate有一个DataSource类型的属性,所以需要在spring的配置文件中为JdbcTemplate的实例配置dataSource属性:
需要注意的是,JdbcTemplate类是spring 的jar包中的类,具体来说是spring-jdbc-xxx.RELEASE.jar包中的类,跟Hibernate没有半毛钱关系(与Hibernate有关系的是HibernateTemplate类,在spring-orm-xxx.RELEASE.jar包中)。从JdbcTemplate的名字中就能看出,这是spring支持的jdbc,是原生的jdbc,做了简单封装而已,并不是orm框架,类似于DBUtils工具类。
二.常用的JdbcTemplate的方法如下:
1. 插入/更新单条数据:
插入/更新单条数据,用update(String sql, Object... args)方法,传入sql语句和参数列表,返回int类型,即操作的数据表的记录数。
如果是插入数据的话,sql语句是insert into...,如果是更新数据的话,sql语句是update... 。
2.批量插入/更新数据
批量插入/更新数据,用batchUpdate(String sql, List<Object[]> batchArgs)方法,传入sql语句和一个元素是Object数组的集合。一个Object数组就代表一条数据,因为插入数据的各个字段的类型可能不一样,而且大部分情况下都不全一样,所以才用Object数组,如果都是string型的话,就用String数组了。
3.查询单条数据,返回值类型为所查的表对应的实体类型
查询单条数据,用queryForObject(String sql, RowMapper<Employee> rowMapper, Object... args) 方法,传入sql语句、RowMapper对象(RowMapper是接口,有一个实现类BeanPropertyRowMapper,我们以此实现类创建RowMapper对象:new BeanPropertyRowMapper(Class<T> mappedClass) )以及参数列表,注意不是queryForObject(String sql, Class<T> requiredType, Object... args)方法,这里比较容易混淆。
4.批量查询多条数据,返回值类型list,元素类型是所查表对应的实体类类型
批量查询多条数据,用query(String sql, RowMapper<T> rowMapper, Object... args),传入sql语句、RowMapper对象及参数列表。
结合查单条数据的方式,可知传入RowMapper对象查询单条或者多条数据的方法需要工程创建实体类来接受方法返回值。
5.批量查询多条数据或查询单条数据,返回值类型list,元素类型Map<String,Object>,键是数据库表中的字段名,可能对应实体类属性名(如果有实体类的话),也可能不对应(实体类属性与数据库表字段可能不是一一对应的,可能有多有少),值是数据库表的字段值。
如果要查询单条数据,则sql语句中id=3即可。这个方法比较特殊,但也很实用,利用此方法查询单条或多条数据不用工程创建实体类,比较轻盈。
6.查询表的记录数
查询表的记录数用的是queryForObject(String sql, Class<T> requiredType),传入sql语句及Integer的类实例即可,返回值的类型是Integer型。如果传入的是Long.class,则返回值的类型是Long类型。事实上,Integer的最大值有21亿多,所以一般传Integer.class就可以了。
7.查询表的某一个字段
查询表的某个字段用的是queryForList(String sql, Class<T> elementType),传入sql语句及所查字段的类型的clazz实例(可能是String.class也可能是integer.class)即可,返回一个List,里面的元素则是各条记录对应的字段值。
<!-- 配置 Spirng 的 JdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean>
需要注意的是,JdbcTemplate类是spring 的jar包中的类,具体来说是spring-jdbc-xxx.RELEASE.jar包中的类,跟Hibernate没有半毛钱关系(与Hibernate有关系的是HibernateTemplate类,在spring-orm-xxx.RELEASE.jar包中)。从JdbcTemplate的名字中就能看出,这是spring支持的jdbc,是原生的jdbc,做了简单封装而已,并不是orm框架,类似于DBUtils工具类。
二.常用的JdbcTemplate的方法如下:
1. 插入/更新单条数据:
@Test public void testUpdate() { String sql = "update employee set name=? ,email=? where id=?"; jdbcTemplate.update(sql, "heisenberg","ksh@126.com",4); }
插入/更新单条数据,用update(String sql, Object... args)方法,传入sql语句和参数列表,返回int类型,即操作的数据表的记录数。
如果是插入数据的话,sql语句是insert into...,如果是更新数据的话,sql语句是update... 。
2.批量插入/更新数据
@Test public void testBatchUpdate() { String sql = "insert into employee (name,salary,email,dept_Id) values (?,?,?,?)"; List<Object[]> batchArgs = new ArrayList<Object[]>(); Object[] a = new Object[] { "aa", 4000, "aa@126.com", 3 };// 创建对象数组 batchArgs.add(a); Object[] b = new Object[] { "bb", 5000, "bb@126.com", 4 }; batchArgs.add(b); Object[] c = new Object[] { "cc", 6000, "cc@126.com", 2 }; batchArgs.add(c); jdbcTemplate.batchUpdate(sql, batchArgs); }
批量插入/更新数据,用batchUpdate(String sql, List<Object[]> batchArgs)方法,传入sql语句和一个元素是Object数组的集合。一个Object数组就代表一条数据,因为插入数据的各个字段的类型可能不一样,而且大部分情况下都不全一样,所以才用Object数组,如果都是string型的话,就用String数组了。
3.查询单条数据,返回值类型为所查的表对应的实体类型
@Test public void testQueryForObject() { String sql = "select * from employee where id=?"; RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class); Employee e = jdbcTemplate.queryForObject(sql, rowMapper, 1); System.out.println(e); }
查询单条数据,用queryForObject(String sql, RowMapper<Employee> rowMapper, Object... args) 方法,传入sql语句、RowMapper对象(RowMapper是接口,有一个实现类BeanPropertyRowMapper,我们以此实现类创建RowMapper对象:new BeanPropertyRowMapper(Class<T> mappedClass) )以及参数列表,注意不是queryForObject(String sql, Class<T> requiredType, Object... args)方法,这里比较容易混淆。
4.批量查询多条数据,返回值类型list,元素类型是所查表对应的实体类类型
@Test public void testQuery() { String sql = "select * from employee where id>?"; RowMapper<Employee> rowMapper = new BeanPropertyRowMapper<>(Employee.class); List<Employee> list = jdbcTemplate.query(sql, rowMapper, 3); System.out.println(list); }
批量查询多条数据,用query(String sql, RowMapper<T> rowMapper, Object... args),传入sql语句、RowMapper对象及参数列表。
结合查单条数据的方式,可知传入RowMapper对象查询单条或者多条数据的方法需要工程创建实体类来接受方法返回值。
5.批量查询多条数据或查询单条数据,返回值类型list,元素类型Map<String,Object>,键是数据库表中的字段名,可能对应实体类属性名(如果有实体类的话),也可能不对应(实体类属性与数据库表字段可能不是一一对应的,可能有多有少),值是数据库表的字段值。
@Test public void testQueryForList() { List<Map<String, Object>> list= jdbcTemplate.queryForList("SELECT * FROM employee where id>?", 3); Map<String, Object> map = list.get(0); System.out.println(map.get("name")); }
如果要查询单条数据,则sql语句中id=3即可。这个方法比较特殊,但也很实用,利用此方法查询单条或多条数据不用工程创建实体类,比较轻盈。
6.查询表的记录数
@Test public void testCount() { String sql = "select count(id) from employee"; Integer count = jdbcTemplate.queryForObject(sql, Integer.class); System.out.println(count); }
查询表的记录数用的是queryForObject(String sql, Class<T> requiredType),传入sql语句及Integer的类实例即可,返回值的类型是Integer型。如果传入的是Long.class,则返回值的类型是Long类型。事实上,Integer的最大值有21亿多,所以一般传Integer.class就可以了。
7.查询表的某一个字段
@Test public void testCount() { String sql = "select name from employee"; List<String> nameList = jdbcTemplate.queryForList(sql, String.class); System.out.println(nameList); }
查询表的某个字段用的是queryForList(String sql, Class<T> elementType),传入sql语句及所查字段的类型的clazz实例(可能是String.class也可能是integer.class)即可,返回一个List,里面的元素则是各条记录对应的字段值。
相关文章推荐
- 1.ioc容器(spring3.2文档第五章)
- 002.Java中有没有goto?
- 001.一个.java源文件中是否可以包含多个类(不是内部类)?有什么限制?
- 用命令行编译运行java文件的乱码问题
- Ubuntu Sun JDK 安装
- 初识Java设计模式之单例设计模式
- 讲故事,学(Java)设计模式—桥接模式
- Ubuntu安装Sun JDK及如何设置默认java JDK
- jdk安装与环境变量的配置
- MyBatis + Spring 整合
- MyBatis + Spring 整合示例代码
- Java基础03-运算符和分支结构
- JAVA 中BIO,NIO,AIO的理解
- leetcode:Remove Duplicates from Sorted List 【Java】
- java.math常用方法
- JAVA中堆和栈的区别
- Spring Cache
- win8下jdk环境变量配置
- Eclipse launch configuration 一
- SpringMVC将数据放到作用域中的方式