|
一、簡(jiǎn)介
SimpleJdbcTemplate內(nèi)部包含了一個(gè)NamedParameterJdbcTemplate,所以NamedParameterJdbcTemplate 能做的事情SimpleJdbcTemplate都能干,SimpleJdbcTemplate相對(duì)于NamedParameterJdbcTemplate主要 增加了JDK5.0的泛型技術(shù)和可變長(zhǎng)度參數(shù)支持。
增加知識(shí):(NameParameterJdbcTemplate內(nèi)部包含了一個(gè)JdbcTemplate,所以JdbcTemplate能做的事情它都能做.NameParameterJdbcTemplate相對(duì)于JdbcTemplate主要增加了參數(shù)可以命名的功能)
simpleJdbcTemplate中有些方法不全,比如拿到主鍵的方法就沒(méi)有,可以獲取到NamedParameterJdbcTemplate 調(diào)用它里面的方法 getNamedParameterJdbcOperations()返回的是NamedParameterJdbcOperations其實(shí)現(xiàn)就是NamedParameterJdbcTemplate這個(gè)類 getJdbcOperations()返回的是JdbcOperation其實(shí)現(xiàn)就是JdbcTemplate SqlParameterSource的兩個(gè)主要實(shí)現(xiàn)MapSqlParameterSource和BeanPropertyParameterSource類,它的作用是將實(shí)例中的屬性對(duì)應(yīng)到sql中的命名參數(shù)上去;而ParameterizedBeanPropertyRowMapper做查詢出來(lái)的結(jié)果映射到j(luò)ava類實(shí)例上去;
二、配置
和JdbcTemplate一樣,SimpleJdbcTemplate也有3中配置方式:
第一種方式:我們可以在自己定義的DAO 實(shí)現(xiàn)類中注入一個(gè)DataSource 引用來(lái)完 成SimpleJdbcTemplate的實(shí)例化。也就是它是從外部“注入” DataSource 到DAO 中,然后 自己實(shí)例化SimpleJdbcTemplate,然后將DataSource 設(shè)置到SimpleJdbcTemplate對(duì)象中。 第二種方式: 在 Spring 的 IoC 容器中配置一個(gè) SimpleJdbcTemplate的 bean,將 DataSource 注入進(jìn)來(lái),然后再把SimpleJdbcTemplate注入到自定義DAO 中。 第三種方式: Spring 提供了 org.springframework.jdbc.core.simple.SimpleJdbcDaoSupport類 , 這 個(gè) 類 中 定 義 了 NamedParameterJdbcTemplate 屬性,也定義了DataSource 屬性,當(dāng)設(shè)置DataSource 屬性的時(shí)候,會(huì)創(chuàng) 建SimpleJdbcDaoSupport的實(shí)例,所以我們自己編寫(xiě)的DAO 只需要繼承SimpleJdbcDaoSupport類, 然后注入DataSource 即可。提倡采用第三種方法。雖然下面的用法中采用了前兩種方法
配置方法有3種:
1、
- public class UserServiceImpl implements UserService {
-
- private SimpleJdbcTemplate simpleJdbcTemplate;
-
- public SimpleJdbcTemplate getSimpleJdbcTemplate () {
- return simpleJdbcTemplate;
- }
-
- //注入方法1
- public void setSimpleJdbcTemplate (SimpleJdbcTemplate simpleJdbcTemplate) {
- this.simpleJdbcTemplate= simpleJdbcTemplate;
- }
-
- //其它方法這里省略……
- }
spring配置文件為:
- <bean id="simpleJdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
- <property name = "dataSource" ref="dataSource">
- </bean>
- <bean id="userService" class="com.hxzy.account.simpleJdbcTemplate.UserServiceImpl">
- <property name="simpleJdbcTemplate" ref="simpleJdbcTemplate"/>
- </bean>
方法2、
- public class UserServiceImpl implements UserService {
-
- private SimpleJdbcTemplate simpleJdbcTemplate;
-
- //注入方法2
- public void setDataSource(DataSource dataSource) {
- this.simpleJdbcTemplate= new JdbcTemplate(dataSource);
- }
-
- //其它方法省略……
- }
spring配置文件為:
- <bean id="userService" class="com.hxzy.account.jdbcTemplate.UserServiceImpl">
- <property name="dataSource" ref="dataSource"/>
- </bean>
方法3:繼承SimpleJdbcDaoSupport,其內(nèi)部有個(gè)namedParamterJdbcTemplate ,需要注入DataSource 屬性來(lái)實(shí)例化。
- public class UserDaoImpl extends SimpleJdbcDaoSupport implements UserDao {
-
- @Override
- public void save(User user) {
- String sql = null;
- this.getSimpleJdbcDaoSupport().update(sql);
- }
- //其它方法省略……
- }
spring配置文件:
- <bean id="userDao" class="com.hxzy.account.jdbcTemplate.UserDaoImpl">
- <property name="dataSource" ref="dataSource"/>
- </bean>
三、使用
- @Override
- public void save(User user) {
- String sql = "insert into tb_test1(id,username,password,sex) "
- + "values (:id,:username,:password,:sex)";
- this.simpleJdbcTemplate.getNamedParameterJdbcOperations().update(sql,
- new BeanPropertySqlParameterSource(user));
- }
-
- @Override
- public void update(User user) {
- String sql = "update tb_test1 set username=:username,password=:password,sex=:sex where id=:id";
- this.simpleJdbcTemplate.update(sql,
- new BeanPropertySqlParameterSource(user));
- }
-
- public void deleteById(String id) {
- String sql = "delete from tb_test1 where id=?";
- this.simpleJdbcTemplate.update(sql, id);
- }
-
- public Object queryById(String id) {
- String sql = "select * from tb_test1 where id=?";
- return simpleJdbcTemplate.queryForObject(sql,
- ParameterizedBeanPropertyRowMapper.newInstance(User.class), id);
- }
-
- public List<?> queryAll() {
- String sql = "select * from tb_test1" ;
- return this.simpleJdbcTemplate.query(sql,
- ParameterizedBeanPropertyRowMapper.newInstance(clazz));
- }
-
- private List<User> queryEntityByExample(User user) {
- String sql = "select * from tb_test1 where (username=:username or :username IS NULL) and (password=:password or :password IS NULL)";
- return this.simpleJdbcTemplate.query(sql, ParameterizedBeanPropertyRowMapper.newInstance(User.class), new BeanPropertySqlParameterSource(user));
- }
|