第07章 JdbcTemplate
第07章JdbcTemplate
为了使JDBC更加易于使用,Spring在JDBC API上定义了一个抽象层,以此建立一个JDBC存取框架。
作为Spring JDBC框架的核心,JDBC模板的设计目的是为不同类型的JDBC操作提供模板方法,通过这种方式,可以在尽可能保留灵活性的情况下,将数据库存取的工作量降到最低。
可以将Spring的JdbcTemplate看作是一个小型的轻量级持久化层框架,和我们之前使用过的DBUtils风格非常接近。
①IOC容器所需要的JAR包
commons-logging-1.1.1.jar
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
spring-core-4.0.0.RELEASE.jar
spring-expression-4.0.0.RELEASE.jar
②JdbcTemplate所需要的JAR包
spring-jdbc-4.0.0.RELEASE.jar
spring-orm-4.0.0.RELEASE.jar
spring-tx-4.0.0.RELEASE.jar
③数据库驱动和数据源
c3p0-0.9.1.2.jar
mysql-connector-java-5.1.7-bin.jar
user=root password=root jdbcUrl=jdbc:mysql:///query_data driverClass=com.mysql.jdbc.Driver initialPoolSize=30 minPoolSize=10 maxPoolSize=100 acquireIncrement=5 maxStatements=1000 maxStatementsPerConnection=10 |
①数据源对象
<context:property-placeholder location="classpath:jdbc.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="user" value="${user}"/> <property name="password" value="${password}"/> <property name="jdbcUrl" value="${jdbcUrl}"/> <property name="driverClass" value="${driverClass}"/> <property name="initialPoolSize" value="${initialPoolSize}"/> <property name="minPoolSize" value="${minPoolSize}"/> <property name="maxPoolSize" value="${maxPoolSize}"/> <property name="acquireIncrement" value="${acquireIncrement}"/> <property name="maxStatements" value="${maxStatements}"/> <property name="maxStatementsPerConnection" value="${maxStatementsPerConnection}"/> </bean> |
②JdbcTemplate对象
<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource"/> </bean> |
JdbcTemplate.update(String, Object...)
JdbcTemplate.batchUpdate(String, List<Object[]>)
Object[]封装了SQL语句每一次执行时所需要的参数
List集合封装了SQL语句多次执行时的所有参数
JdbcTemplate.queryForObject(String, RowMapper<Department>, Object...)
JdbcTemplate.query(String, RowMapper<Department>, Object...)
RowMapper对象依然可以使用BeanPropertyRowMapper
3.5 查询单一值
JdbcTemplate.queryForObject(String, Class, Object...)
在Hibernate的HQL查询中我们体验过具名参数的使用,相对于基于位置的参数,具名参数具有更好的可维护性,在SQL语句中参数较多时可以考虑使用具名参数。
在Spring中可以通过NamedParameterJdbcTemplate类的对象使用带有具名参数的SQL语句。
<!-- 配置可以使用具名参数的JDBCTemplate类对象 --> <bean id="namedTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate"> <!-- 没有无参构造器,必须传入数据源或JdbcTemplate对象 --> <constructor-arg ref="dataSource"/> </bean> |
INSERT INTO depts (dept_name) VALUES (:deptName) |
①通过Map对象传入
NamedParameterJdbcTemplate.update(String, Map<String, ?>)
Map的键是参数名,值是参数值
②通过SqlParameterSource对象传入
String sql = "INSERT INTO depts (dept_name) VALUES (:deptName)"; Department department = new Department(null, "YYY", null); SqlParameterSource sqlParameterSource = new BeanPropertySqlParameterSource(department); namedTemplate.update(sql, sqlParameterSource); |
JdbcTemplate类是线程安全的,所以可以在IOC容器中声明它的单个实例,并将这个实例注入到所有的Dao实例中。
@Repository public class EmployeeDao { @Autowired private JdbcTemplate jdbcTemplate; public Employee get(Integer id){ //… } } |
/** * 不推荐 */ @Repository public class DepartmentDao extends JdbcDaoSupport{ @Autowired public void setDataSource2(DataSource dataSource){ //父类提供的setDataSource()方法是final修饰的,不能通过覆盖的方式注入dataSource setDataSource(dataSource); } public Department get(Integer id){ String sql = "SELECT id, dept_name name FROM departments WHERE id = ?"; RowMapper<Department> rowMapper = new BeanPropertyRowMapper<>(Department.class); return getJdbcTemplate().queryForObject(sql, rowMapper, id); } } |
最新文章
- Two Sum (c#)
- Lodop6 以上打印控件使用,详参考自带说明文档,打印样式及文字大小要特殊设置一下
- JavaWeb---总结(十二)Session
- 10个超级有用、必须收藏的PHP代码样例
- C++ STL find
- MVC6与Asp.net5
- disucz!NT 3.5.0 验证码点击不能变化只是样式变化
- openerp经典收藏 OpenERP库存管理的若干概念讲解(新增库存价值)(转载)
- javascript应用:页面解析list和map封装后的json数据
- UVA 10585 Center of symmetry
- 如何让低版本的IE浏览器(IE6/IE7/IE8)支持HTML5 header等新标签
- [转载]你需要知道的 16 个 Linux 服务器监控命令
- iOS开发-使用Storyboard进行界面跳转及传值
- Using Qt to build an Omi App for iOS (and Android)
- CF Round #353 Div.2
- window环境下npm install node-sass报错
- xshell连接虚拟机Ubuntu问题
- SharePoint 2013 图文开发系列之入门教程
- ko.js学习一
- A Nice Paper About Mobile Data Offloading