Spring的JdbcTemplate
2017-12-03 21:25
274 查看
Spring对持久层框架的支持
Spring为各种支持的持久化技术都提供了简单操作的模板和回调。ORM持久化技术 | 提供的模板类 |
---|---|
JDBC | org.springframework.jdbc.core.JdbcTemplate |
Hibernate3.0 | org.springframework.orm.hibernate3.HibernateTemplate |
MyBatis | org.springframework.orm.ibatis.SqlMapClientTemplate |
JPA | org.springframework.orm.jpa.JpaTemplate |
使用JdbcTemplate创建数据表
除了Spring的核心包外,引入额外jar包:spring-tx-3.2.0.RELEASE.jar
spring-jdbc-3.2.0.RELEASE.jar
当然还有mysql驱动:
mysql-connector-java-5.0.8-bin.jar
创建applicationContext.xml:
<?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:jdbc="http://www.springframework.org/schema/jdbc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd"> <!-- bean definitions here --> </beans>
配置连接池
1、Spring默认的连接池配置applicationContext.xml:
<!-- 配置Spring默认的连接池 --> <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///SpringJdbcTemplate"/> <property name="username" value="root"/> <property name="password" value="***************"/> </bean> <!-- 定义jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="datasource"/> </bean>
测试单元中:
@Autowired @Qualifier("jdbcTemplate") private JdbcTemplate jdbcTemplate; @Test public void test() { String sql = "CREATE TABLE test1(id INT PRIMARY KEY,stuName VARCHAR(20))"; jdbcTemplate.execute(sql); }
结果:
DBCP连接池和C3P0连接池的配置和上面几乎相同,仅仅需要导入相应jar包和更改class,并且注意property属性的值有些不同即可:
DBCP连接池:
导入jar包:
com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar
com.springsource.org.apache.commons.pool-1.5.3.jar
类名:org.apache.commons.dbcp.BasicDataSource
<!-- 配置DBCP连接池 --> <bean id="datasource" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql:///SpringJdbcTemplate"/> <property name="username" value="root"/> <property name="password" value="***************"/> </bean> <!-- 定义jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="datasource"/> </bean>
C3P0连接池:
导入jar包:
com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
类名:com.mchange.v2.c3p0.ComboPooledDataSource
<!-- 配置C3P0连接池 --> <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="com.mysql.jdbc.Driver"/> <property name="jdbcUrl" value="jdbc:mysql:///SpringJdbcTemplate"/> <property name="user" value="root"/> <property name="password" value="***************"/> </bean> <!-- 定义jdbcTemplate --> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="datasource"/> </bean>
通过属性文件配置连接池
一般我们并不会将连接数据库的参数直接设置在xml文件中,而是将参数填写在属性文件中。jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///SpringJdbcTemplate jdbc.user=root jdbc.password=###########
在applicationContext.xml文件中使用属性文件配置的内容:
两种方法
第一种:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties"/> </bean> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean>
第二种:
<context:property-placeholder location="classpath:jdbc.properties"/> <!-- 配置C3P0连接池 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="driverClass" value="${jdbc.driver}"/> <property name="jdbcUrl" value="${jdbc.url}"/> <property name="user" value="${jdbc.user}"/> <property name="password" value="${jdbc.password}"/> </bean>
JdbcTemplate的CRUD操作
创建StuDao:public class StuDao{ private JdbcTemplate jdbcTemplate; public void setJdbcTemplate(JdbcTemplate jdbcTemplate){ this.jdbcTemplate = jdbcTemplate; } public void InsertStu(String name){ String sql = "INSERT into test1 VALUES(NULL,?)"; this.getJdbcTemplate().update(sql, name); } public void DeleteStu(String name){ String sql = "delete from test1 where stuName=?"; this.getJdbcTemplate().update(sql, name); } public void UpdateStu(int id,String name){ String sql = "UPDATE test1 set stuName=? where id=?"; this.getJdbcTemplate().update(sql, name,id); } }
配置文件:
<bean id="stuDao" class="dao.StuDao"> <property name="jdbcTemplate" ref="jdbcTemplate"/> </bean>
这是一种创建dao并且获取JdbcTemplate的方法,其实我们使用以下方式:
public class StuDao extends JdbcDaoSupport{ public void InsertStu(String name){ String sql = "INSERT into test1 VALUES(NULL,?)"; this.getJdbcTemplate().update(sql, name); } public void DeleteStu(String name){ String sql = "delete from test1 where stuName=?"; this.getJdbcTemplate().update(sql, name); } public void UpdateStu(int id,String name){ String sql = "UPDATE test1 set stuName=? where id=?"; this.getJdbcTemplate().update(sql, name,id); } }
继承JdbcDaoSupport类,其实它的内部有jdbctemplate和setter/getter方法。
实现查询操作:
简单查询:
select count(*) from test1;–>queryForInt(String sql)
select name from test1 where id=?–>queryForObject(String sql,Class clazz,Object… args)
public int GetCount(){ String sql = "select count(*) from test1"; return this.getJdbcTemplate().queryForInt(sql); } public String getNameById(int id){ String sql = "select stuName from test1 where id=?"; return this.getJdbcTemplate().queryForObject(sql, String.class, id); }
复杂查询:
select * from test1 where id=?–>queryForObject(String sql,RowMapper<T> rowMapper,Object… args)
select * from test1;–>query(String sql,RowMapper<T> rowMapper,Object… args)
public Student findById(int id){ String sql = "select * from test1 where id=?"; return this.getJdbcTemplate().queryForObject(sql, new StuRowMapper(),id); } public List<Student> findAll(){ String sql = "select * from test1"; return this.getJdbcTemplate().query(sql, new StuRowMapper()); } //创建一个内部类实现RowMapper接口 class StuRowMapper implements RowMapper<Student>{ @Override public Student mapRow(ResultSet rs, int rowNum) throws SQLException { Student stu = new Student(); stu.setId(rs.getInt("id")); stu.setName(rs.getString("stuName")); return stu; } }
相关文章推荐
- Spring的JdbcTemplate使用update或insert操作的三种使用例子
- Spring--JdbcTemplate
- Spring中jdbcTemplate
- 在Spring中JdbcTemplate中使用RowMapper
- Spring+JDBC组合开发 - 使用JdbcTemplate进行insert/update/delete/query操作
- Spring | JdbcTemplate & Mysql
- Spring + JdbcTemplate + JdbcDaoSupport + HibernateDaoSupport examples
- Spring中jdbcTemplate的用法实例(一)
- Spring No qualifying bean of type [org.springframework.jdbc.core.JdbcTemplate] found for dependency
- Spring + Jta +JDBCTemplate 分布式事物实现方式
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- 使用Spring的jdbcTemplate进一步简化JDBC操作
- spring boot(二): spring boot+jdbctemplate+sql server
- spring的HibernateDaoSupport以及HibernateTemplate和jdbcTemplate的选择问题
- Spring使用JdbcTemplate实现对数据库操作
- Spring NamedParameterJdbcTemplate 详解
- Spring使用JdbcTemplate操作数据库---使用RowCallbackHander读数据篇
- 【转】Spring中JdbcTemplate的实例用法
- Spring中JdbcTemplate 和DataSource的联系
- SpringBoot(四):SpringBoot整合JdbcTemplate