文檔版本 | 開發工具 | 測試平臺 | 工程名字 | 日期 | 作者 | 備註 |
---|---|---|---|---|---|---|
V1.0 | 2016.06.23 | lutianfei | none |
Spring JdbcTemplate
- JdbcTemplate模板與DbUtils工具類比較類似
Spring對持久層技術支持
- 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入門
第一步:引入相應jar包:
- spring-tx-3.2.0.RELEASE.jar
- spring-jdbc-3.2.0.RELEASE.jar
- mysql驅動.
第二步:創建applicationContext.xml
- 第三步:編寫一個測試類
@Autowired
@Qualifier("jdbcTemplate")
private JdbcTemplate jdbcTemplate;
@Test
public void demo2(){
jdbcTemplate.execute("create table user (id int primary key auto_increment,name varchar(20))");
}
配置連接池
- 在實際開發中,通過Spring配置文件來配置JdbcTemplate
- 常用數據源
- Spring 數據源實現類 DriverManagerDataSource
- DBCP 數據源 BasicDataSource
- C3P0 數據源 ComboPooledDataSource
Spring默認的連接池
<!-- 配置Spring默認的連接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///spring3_day02"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
DBCP連接池
- 導入jar包:
- com.springsource.org.apache.commons.dbcp-1.2.2.osgi.jar
- com.springsource.org.apache.commons.pool-1.5.3.jar
<!-- 配置DBCP連接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///spring3_day02"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</bean>
C3P0連接池
- 導入jar包:
- com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar
<!-- 配置c3p0連接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql:///spring3_day02"/>
<property name="user" value="root"/>
<property name="password" value="123"/>
</bean>
使用properties文件配置數據庫連接基本參數
- 在src下創建jdbc.properties
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql:///spring3_day02
jdbc.user = root
jdbc.password = 123
- 在applicationContext.xml 中使用屬性文件配置的內容
- 第一種寫法:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"></property>
</bean>
- 第二種寫法: 先引入Context標籤頭
<context:property-placeholder location="classpath:jdbc.properties"/>
JdbcTemplate的CRUD的操作
- 爲了方便DAO中注入JdbcTemplate,Spring爲每一個持久化技術都提供了支持類
- JDBC : org.springframework.jdbc.core.support.JdbcDaoSupport
- Hibernate 3.0 : org.springframework.orm.hibernate3.support.HibernateDaoSupport
- MyBatis : org.springframework.orm.ibatis.support.SqlMapClientDaoSupport
基本增刪改操作
- 插入操作
- String sql = “insert into customers values(null,?)”;
- jdbcTemplate.update(sql, “小麗”);
- 修改操作
- String sql = “update customers set name= ? where id =?”;
- jdbcTemplate.update(sql, “小明”, 1);
- 刪除操作
- String sql = “delete from customers where id =?”;
- jdbcTemplate.update(sql, 1);
查詢操作
簡單查詢:
- 例一 : queryForInt 查詢int類型
- String sql = “select count(*) from customers”;
- int count = jdbcTemplate.queryForInt(sql);
- 例二 : queryForObject 查詢對象類型
- String sql = “select name from customers where id = ?”;
- String name = jdbcTemplate.queryForObject(sql, String.class, 2);
- 這裏String.class是返回類型 , 2是customer的id參數
- 例一 : queryForInt 查詢int類型
複雜查詢:(返回對象,和對象集合)
查詢單個對象 :
queryForObjectString sql,RowMapper<T> rowMapper,Object... args);
查詢多個對象的集合:
query(String sql,RowMapper<T> rowMapper,Object... args);
eg:使用匿名內部類來處理的方式:
public User findById(int id){
String sql = "select * from user where id = ?";
User user = this.getJdbcTemplate().queryForObject(sql, new UserRowMapper(), id);
return user;
}
public List<User> findAll(){
String sql = "select * from user";
return this.getJdbcTemplate().query(sql, new UserRowMapper());
}
class UserRowMapper implements RowMapper<User>{
/**
* rs:結果集.
* rowNum:行號
*/
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
return user;
}