您的位置:首页 > 编程语言 > Java开发

Spring的JdbcTemplate

2017-12-03 21:25 274 查看

Spring对持久层框架的支持

Spring为各种支持的持久化技术都提供了简单操作的模板和回调。

ORM持久化技术提供的模板类
JDBCorg.springframework.jdbc.core.JdbcTemplate
Hibernate3.0org.springframework.orm.hibernate3.HibernateTemplate
MyBatisorg.springframework.orm.ibatis.SqlMapClientTemplate
JPAorg.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 jdbc模板