Spring JDBC学习笔记(1):查询数据库数据之JdbcTemplate的使用
2016-03-28 22:55
483 查看
今天搬代码的时候遇到一个需求,要获取数据库的表和列的元信息,包括数据类型、约束、索引等的信息,因为之前使用JDBC实现过,但是当前在一个spring管理的工程中,觉得直接用JDBC怪怪的(其实是感觉有点low......),spring一定提供了这方面的封装,不出我所料,找到了JdbcTemplate这个spring对JDBC提供支持的类。
jdbc.properties文件如下:
spring配置文件如下:
还有一个问题,就是它毕竟不是ORM框架,做不到那么智能,如果在User中出现一个自定义的类,再进行查询时也是不会成功返回值的,即不支持级联操作,所以如果使用这个,你只能忍受她的这种任性,感觉是个鸡肋啊!!
针对其他类型数据的查询,使用queryForList()这个API来完成,其中需要你提供一个Class类型的参数来标明要查询的哪种类型的数据。
具体的使用方式如下:
建立一个XXXDao的类,如下
一、准备工作
Spring封装了底层数据库的访问,它通过增加一个抽象层来使对数据库访问变得更加容易,所以我们首先需要一个数据源来管理与数据库的连接,这里选择c3p0数据源,另外JDBC驱动文件必不可少,还有其他spring的必须依赖库,看如下maven配置信息:<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>SpringJdbc</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>SpringJdbc</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.2.2.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!-- database connection pool --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> </dependencies> </project>然后完成spring的配置文件,在这之前我们可以先把有关数据库的连接信息配置到一个jdbc.properties文件中。
jdbc.properties文件如下:
jdbc.url=jdbc:mysql://localhost:3306/springtutorial jdbc.username=abc jdbc.password=123 jdbc.drive_class=com.mysql.jdbc.Driver initialPoolSize=10 maxPoolSize=15
spring配置文件如下:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd"> <context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> <property name="driverClass" value="${jdbc.drive_class}"></property> <property name="jdbcUrl" value="${jdbc.url}"></property> <property name="initialPoolSize" value="${initialPoolSize}"></property> <property name="maxPoolSize" value="${maxPoolSize}"></property> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"></property> </bean> </beans>配置JdbcTemplate时,需要指定其中的dataSource属性,这样关于数据库连接和查询数据的所有前期准备都已经完成。下面我们就使用这个类来完成对数据库的操作。
二、 查询数据库数据
我们声明一个简单的实体类User作为被操作的对象:package com.demo.SpringJdbc.entity; public class User { private String name; private String address; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User [name=" + name + ", address=" + address + ", age=" + age + "]"; } }
1、针对修改单条数据
针对单条数据的操作,可以使用update方法,这个方法是用来支持insert,update,delete操作的,实例如下:jdbcTemplate.update("insert into user(username, address, age) values(?,?,?)", "abc", "hz", 21); jdbcTemplate.update("update user set username = ? where age = ? ", "lmy", "21");"?"为SQL语句中参数占位符,后面的参数与占位符是一一对应的。
2、针对修改多条数据
List<Object[]> args = new ArrayList<>(); Object[] arg1 = new Object[]{"lmw", "hz", "19"}; Object[] arg2 = new Object[]{"lmr", "hz", "16"}; args.add(arg1); args.add(arg2); jdbcTemplate.batchUpdate("insert into user(username, address, age) values(?, ?, ?)", args);除了在传递参数的时候提供一个list,别的方面的使用方式和update的是相同的。
3、针对查询一个对象
让人感到奇怪的是,JdbcTemplate尽然还提供了简单的ORM的功能。使用实例如下:RowMapper<User> mapper = new BeanPropertyRowMapper<>(User.class); User user = jdbcTemplate.queryForObject("select username name, address, age from user where age = ?", mapper, 16);对User这个实体类进行查询,它通过使用RowMapper来映射数据库中的一行数据和实体类的一个实例。注意上述API只能放回一个对象,如果结果有多个就会报错。在进行映射时,通过将实体类的字段名作为要查的数据库中的字段的别名来完成映射。
还有一个问题,就是它毕竟不是ORM框架,做不到那么智能,如果在User中出现一个自定义的类,再进行查询时也是不会成功返回值的,即不支持级联操作,所以如果使用这个,你只能忍受她的这种任性,感觉是个鸡肋啊!!
4、针对查询多个对象
RowMapper<User> mapper = new BeanPropertyRowMapper<>(User.class); List<User> users = jdbcTemplate.query("select * from user where age = ?", mapper, 21);使用方法同上,只不过是返回一个list。
5、针对其他类型数据的查询
List<Long> ages = jdbcTemplate.queryForList("select age from user where username = ?", Long.class, "lmy"); Long count = jdbcTemplate.queryForObject("select count(*) from user ", Long.class);
针对其他类型数据的查询,使用queryForList()这个API来完成,其中需要你提供一个Class类型的参数来标明要查询的哪种类型的数据。
6. 针对任何操作
其中还有一个进行DDL操作的API,可以用来改变数据库的表的结构信息等。execute(String sql)这个就不举例了,直接将DDL语句传进去就好了。
三、 实际开发应用
在实际使用的时候可以在DAO层中使用该对象。具体的使用方式如下:
建立一个XXXDao的类,如下
public class PersonDao { <span style="white-space:pre"> </span>private JdbcTemplate jdbcTemplate; }然后在spring的配置文件中配置上述的Bean:
<bean id="personDao" class="com.demo.SpringJdbc.dao.PersonDao"> <property name="jdbcTemplate" ref="jdbcTemplate"></property> </bean>然后即可使用该personDao提供的API去访问数据库了。其实spring还提供了一个JdbcDaoSupport的类用于支持Dao,只不过是约束太多,不常用罢了。
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 第三章 数据库备份和还原
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案