<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫故知新:spring_08整合JDBC

    spring整合JDBC的詳細內(nèi)容需要參閱github上的spring相關文檔,傳送門:http://docs.spring.io/spring-framework/docs/,這里記錄一個spring和JDBC整合的常用案例

    搭建測試環(huán)境前,首先添加相關的maven依賴
     1         <dependency>
     2             <groupId>org.springframework</groupId>
     3             <artifactId>spring-core</artifactId>
     4             <version>3.0.5.RELEASE</version>
     5         </dependency>
     6 
     7         <dependency>
     8             <groupId>org.springframework</groupId>
     9             <artifactId>spring-context</artifactId>
    10             <version>3.0.5.RELEASE</version>
    11         </dependency>
    12 
    13         <dependency>
    14             <groupId>javax.annotation</groupId>
    15             <artifactId>javax.annotation-api</artifactId>
    16             <version>1.2</version>
    17         </dependency>
    18 
    19         <dependency>
    20             <groupId>org.springframework</groupId>
    21             <artifactId>spring-aop</artifactId>
    22             <version>3.0.5.RELEASE</version>
    23         </dependency>
    24 
    25         <!-- spring AOP -->
    26         <dependency>
    27             <groupId>org.aspectj</groupId>
    28             <artifactId>aspectjweaver</artifactId>
    29             <version>1.5.4</version>
    30         </dependency>
    31 
    32         <!-- Mysql驅(qū)動依賴 -->
    33         <dependency>
    34             <groupId>mysql</groupId>
    35             <artifactId>mysql-connector-java</artifactId>
    36             <version>5.1.6</version>
    37         </dependency>
    38 
    39         <!-- 數(shù)據(jù)庫連接池 -->
    40         <dependency>
    41             <groupId>commons-dbcp</groupId>
    42             <artifactId>commons-dbcp</artifactId>
    43             <version>1.3</version>
    44         </dependency>
    45 
    46         <!-- Spring JDBC -->
    47         <dependency>
    48             <groupId>org.springframework</groupId>
    49             <artifactId>spring-jdbc</artifactId>
    50             <version>3.2.3.RELEASE</version>
    51         </dependency>
    52 
    53         <!-- spring測試相關包 -->
    54         <dependency>
    55             <groupId>org.springframework</groupId>
    56             <artifactId>spring-test</artifactId>
    57             <version>3.0.5.RELEASE</version>
    58         </dependency>
    添加之后,順著使用JDBC的思路,創(chuàng)建數(shù)據(jù)源,獲取連接,創(chuàng)建preparedstatement,resultset等,然后依次關閉。如今,這些通用的操作全都交由spring去做。在beans.xml中創(chuàng)建datasource
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
     4     xmlns:aop="http://www.springframework.org/schema/aop"
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     6                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     7                         http://www.springframework.org/schema/context
     8                         http://www.springframework.org/schema/context/spring-context-3.0.xsd
     9                         http://www.springframework.org/schema/aop
    10                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
    11 
    12     <!-- 開啟注解 -->
    13     <context:annotation-config/>
    14     <!-- 指定需要掃描的包路徑 -->
    15     <context:component-scan base-package="org.duyt"/>
    16 
    17     <!-- 數(shù)據(jù)源配置 -->
    18     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    19         <property name="driverClassName" value="${jdbc.driverClassName}"/>
    20         <property name="url" value="${jdbc.url}"/>
    21         <property name="username" value="${jdbc.username}"/>
    22         <property name="password" value="${jdbc.password}"/>
    23     </bean>
    24     <!-- 數(shù)據(jù)源配置文件 -->
    25     <context:property-placeholder location="jdbc.properties"/>
    26 
    27 </beans>
    jdbc.properties內(nèi)容
    1 jdbc.driverClassName=com.mysql.jdbc.Driver
    2 jdbc.url=jdbc:mysql://localhost:3306/shop
    3 jdbc.username=root
    4 jdbc.password=root
    數(shù)據(jù)源至此就配置完畢了,spring對JDBC進行了簡易的封裝,通過使用Spring提供的JdbcTemplate來對數(shù)據(jù)庫進行操作,創(chuàng)建DAO的接口和實現(xiàn)類,在DAO的接口中,通過注入datasource來獲取JdbcTemplate的實例,通過JdbcTemplate實例實現(xiàn)CURD操作。
    實體類
     1 package org.duyt.domain;
     2 
     3 public class User {
     4     private int id;
     5     private String name;
     6     public User() {
     7         super();
     8     }
     9     public User(int id, String name) {
    10         super();
    11         this.id = id;
    12         this.name = name;
    13     }
    14         //get/set略
    15 }
    16 
    IUserDao
     1 package org.duyt.dao;
     2 
     3 import java.util.List;
     4 
     5 import org.duyt.domain.User;
     6 
     7 public interface IUserDao {
     8 
     9     public int add(User user);
    10     public void delete(int id);
    11     public void update(User user);
    12     public User load(int id);
    13     public int count();
    14     public List<User> list();
    15     public List<String> listAllUserName();
    16     
    17 }
    18 
    UserDao
      1 package org.duyt.dao.impl;
      2 
      3 import java.sql.Connection;
      4 import java.sql.PreparedStatement;
      5 import java.sql.ResultSet;
      6 import java.sql.SQLException;
      7 import java.util.List;
      8 
      9 import javax.annotation.Resource;
     10 import javax.sql.DataSource;
     11 
     12 import org.duyt.dao.IUserDao;
     13 import org.duyt.domain.User;
     14 import org.springframework.jdbc.core.JdbcTemplate;
     15 import org.springframework.jdbc.core.PreparedStatementCreator;
     16 import org.springframework.jdbc.core.RowMapper;
     17 import org.springframework.jdbc.support.GeneratedKeyHolder;
     18 import org.springframework.stereotype.Repository;
     19 
     20 @Repository("userJdbcDao")
     21 public class UserDao implements IUserDao {
     22 
     23     private JdbcTemplate jdbcTemplate;
     24 
     25     //在此注入datasource創(chuàng)建jdbcTemplate
     26     @Resource
     27     public void setDataSource(DataSource dataSource) {
     28         this.jdbcTemplate = new JdbcTemplate(dataSource);
     29     }
     30 
     31     /**
     32      * 添加方法一般需要返回新增的對象,或者ID,在一個事務中經(jīng)常會有一次性添加多個有關聯(lián)的對象 的情況,這里寫出一個新增對象之后同時返回生成的ID的方法
     33      */
     34     public int add(final User user) {
     35         GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();
     36         // 返回自動生成的id
     37         jdbcTemplate.update(new PreparedStatementCreator() {
     38             public PreparedStatement createPreparedStatement(Connection con)
     39                     throws SQLException {
     40                 // 可以指定返回哪些想返回的字段值
     41                 PreparedStatement ps = con.prepareStatement("insert into"
     42                         + " t_user(username) values(?)", new String[] { "id" });
     43                 ps.setString(1, user.getName());
     44                 return ps;
     45             }
     46         }, generatedKeyHolder);
     47         return generatedKeyHolder.getKey().intValue();
     48     }
     49 
     50     /**
     51      * 刪除
     52      */
     53     public void delete(int id) {
     54         jdbcTemplate.update("delete from t_user where id = ?", id);
     55     }
     56 
     57     /**
     58      * 更新
     59      */
     60     public void update(User user) {
     61         jdbcTemplate.update("update t_user set name = ? where id = ?",
     62                 user.getName(), user.getId());
     63     }
     64 
     65     /**
     66      * 查詢并返回一條記錄,返回一個對象
     67      */
     68     public User load(int id) {
     69         String selAllSql = "select * from t_user where id = ?";
     70         return jdbcTemplate.queryForObject(selAllSql, new Object[] { id },
     71                 new UserMapper());
     72     }
     73 
     74     /**
     75      * 查詢并返回一條記錄,返回一個數(shù)值
     76      */
     77     public int count() {
     78         String selCoutSql = "select count(*) from t_user";
     79         return jdbcTemplate.queryForObject(selCoutSql, Integer.class);
     80     }
     81 
     82     /**
     83      * 查詢并返回一組記錄
     84      * *倘若selAllSql = "select id,username from t_user";
     85      * 選取一個以上的字段返回的時候,不會返回List<Object[]>,仍需要自己定義RowMapper去完成映射
     86      * 
     87      * @return
     88      */
     89     public List<String> listAllUserName(){
     90         String selAllSql = "select username from t_user";
     91         return jdbcTemplate.queryForList(selAllSql, String.class);
     92     }
     93 
     94     /**
     95      * 查詢用戶列表
     96      * @return
     97      */
     98     public List<User> list() {
     99         String selAllSql = "select * from t_user";
    100         return jdbcTemplate.query(selAllSql, new UserMapper());
    101     }
    102 
    103     /**
    104      * UserMapper復用內(nèi)部類
    105      * @author Administrator
    106      * 
    107      */
    108     private class UserMapper implements RowMapper<User> {
    109         public User mapRow(ResultSet rs, int rowNum) throws SQLException {
    110             User user = new User();
    111             user.setName(rs.getString("username"));
    112             return user;
    113         }
    114     }
    115 }
    116 
    測試類
     1 package org.duyt.test;
     2 
     3 
     4 import java.util.List;
     5 
     6 import org.duyt.dao.IUserDao;
     7 import org.duyt.domain.User;
     8 import org.junit.Test;
     9 import org.springframework.beans.factory.BeanFactory;
    10 import org.springframework.context.support.ClassPathXmlApplicationContext;
    11 
    12 public class TestDemo {
    13     
    14     private BeanFactory factory = new ClassPathXmlApplicationContext("beans.xml");
    15     
    16     @Test
    17     public void testSimpleJDBC(){
    18         //新增一個用戶
    19         IUserDao dao = (IUserDao) factory.getBean("userJdbcDao");
    20         User u = new User();
    21         u.setName("duyt");
    22         dao.add(u);
    23         
    24         //指定對象查詢,但會單個對象
    25         u = dao.load(23);
    26         System.out.println(u.getName());
    27         
    28         //查詢記錄數(shù),返回一個數(shù)值
    29         System.out.println(dao.count());
    30         
    31         //返回一個對象集合
    32         List<User> users = dao.list();
    33         for (User user : users) {
    34             System.out.println("username:" + user.getName());
    35         }
    36         
    37         //返回用戶名列表
    38         List<String> names = dao.listAllUserName();
    39         for (String str: names) {
    40             System.out.println("username:" + str);
    41         }
    42     }
    43 
    44 }
    45 
    可以看出JdbcTemplate在傳遞參數(shù)的時候是順序設置的,spring還提供了一個基于參數(shù)名的傳參方式NamedParameterJdbcTemplate,和JdbcTemplate的使用方式基本一致
    在DAO實現(xiàn)類中同樣注入datasource,創(chuàng)建NamedParameterJdbcTemplate,其他操作大致相同,不再贅述
     1 ......
     2     private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
     3     @Resource
     4     public void setDataSource(DataSource dataSource) {
     5         this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(
     6                 dataSource);
     7     }
     8     
     9     public int add(User user) {
    10         String insertSql = "insert into t_user(username) value(:username)";
    11         Map<String, Object> params = new HashMap<String, Object>();
    12         params.put("username", user.getName());
    13         return namedParameterJdbcTemplate.update(insertSql,params);
    14     }
    15 ......

    posted on 2014-11-07 21:44 都較瘦 閱讀(97) 評論(0)  編輯  收藏 所屬分類: containerFramework

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統(tǒng)計

    公告

    博客定位:囿于目前的水平,博客定位在記錄自己的學習心得和隨手的練習

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产免费观看青青草原网站| 久久久久亚洲AV综合波多野结衣| 亚洲欧美日韩中文二区| 日本一道一区二区免费看 | 免费无码午夜福利片| 亚洲中文字幕在线第六区| 久久午夜羞羞影院免费观看| 亚洲av午夜电影在线观看| 亚洲AV永久无码区成人网站 | 亚洲第一成人影院| 97在线视频免费公开观看| 亚洲av成人一区二区三区观看在线 | 亚洲午夜国产精品| 中文字幕在亚洲第一在线| 1000部啪啪未满十八勿入免费| 亚洲AV色无码乱码在线观看| 久久精品国产精品亚洲艾草网| 在线免费视频一区| 久久这里只精品99re免费| 亚洲av永久无码一区二区三区 | 亚洲人成色77777在线观看| 亚洲欧洲成人精品香蕉网| 拍拍拍又黄又爽无挡视频免费| 丝袜足液精子免费视频| 自拍偷区亚洲国内自拍| 久久精品国产亚洲AV麻豆不卡| 日日操夜夜操免费视频| 四虎精品视频在线永久免费观看| 一个人免费观看日本www视频 | 亚洲AV无码码潮喷在线观看| 日韩中文字幕在线免费观看| 一级做a爰全过程免费视频| 青青视频免费在线| 亚洲成A人片在线播放器| 亚洲色图古典武侠| 亚洲色偷拍另类无码专区| 国产真人无遮挡作爱免费视频| 131美女爱做免费毛片| 大地资源中文在线观看免费版| 粉色视频在线观看www免费| 亚洲AV无码国产精品色|