2020-03-17SpringJDBC

SpringJDBC模板的使用

spring對持久層也提供了解決方案
spring提供了很多的模板用于簡化開發(fā)

JDBC模板的簡單使用

1.導(dǎo)包
spring依賴文件+spring輔助文件+mysql相關(guān)+jdbc相關(guān)

<!-- spring依賴的核心文件 -->
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>
        <!-- spring的輔助文件 -->
        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.15</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.2.2.RELEASE</version>
        </dependency>

2.測試

public class Jdbcdemo1 {
    @Test
    public void demo1(){
        //創(chuàng)建連接詞
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
        dataSource.setUsername("root");
        dataSource.setPassword("root");
        //創(chuàng)建JDBC模板
        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
        jdbcTemplate.update("insert into users values(?,?,?)","10","dff","asd");    
    }
}

將連接池交給spring管理

在上文的基礎(chǔ)上進(jìn)行改進(jìn)呜达,將數(shù)據(jù)庫的連接交給spring管理
1.新建xml文件

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!-- 屬性注入  8.幾的版本 com.mysql.cj.jdbc.Driver-->
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    <!-- 配置Spring的JDBC的模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

2.測試

//將jdbc注入到數(shù)據(jù)中,也可以再xml文件里用bean配置 但是要有jdbcTemplate的set方法
@Resource(name="jdbcTemplate")
    private JdbcTemplate jdbcTemplate;
    @Test
    public void demo1(){
             //update執(zhí)行增刪改
        jdbcTemplate.update("insert into users values(?,?,?)","11","11","11");
    }

使用開源的數(shù)據(jù)庫連接池

DBCP連接池

1.引入jar包

<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-dbcp2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
    <version>2.1.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.4.2</version>
</dependency>

2.配置XML文件

<!-- 配置DBCP的連接池 -->
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://localhost:3306/test"></property>
        <property name="username" value="root"></property>
        <property name="password" value="ro"></property>
    </bean>

C3P0連接池

1.引入jar包

<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

2.在XML文件中配置

<!-- 配置c3p0連接池 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
            <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"></property>
            <property name="user" value="root"></property>
            <property name="password" value="root"></property>
        </bean>

將參數(shù)配置到屬性文件

以C3P0連接池為例
1.新建一個文件(jdbc.properties) 配置

jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=ro

2.文件引入到xml文件中
第一種方式(較少)

<!-- 第一種方式 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="classpath:jdbc.properties"></property>
</bean>

第二種方式:

<!-- 第二種豌蟋,通過context標(biāo)簽 -->
<context:property-placeholder location="classpath:jdbc.properties"/>    
<!-- 配置c3p0連接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driverClass}"></property>
    <property name="jdbcUrl" value="${jdbc.url}"></property>
    <property name="user" value="${jdbc.username}"></property>
    <property name="password" value="${jdbc.password}"></property>
</bean>

對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行操作

以C3P0連接池為例

根據(jù)數(shù)據(jù)查詢

@Test
public void demo2() {
    String name=jdbcTemplate.queryForObject("select name from users where id= ? ", String.class,10);
    System.out.println(name);
}

查詢總數(shù)

@Test
public void demo3() {
    Long count = jdbcTemplate.queryForObject("select count(*) from users", Long.class);
    System.out.println(count);
}

單個查詢

在返回值是自定義實體類時愉棱,需要使用RowMapper<自定義實體類>接口
1.編寫對應(yīng)實體類
2.在測試類中

class MyRowMapper implements RowMapper<Users>{
    @Override
    public Users mapRow(ResultSet rs, int arg1rowNum) throws SQLException {
        // TODO 自動生成的方法存根
        Users user = new Users();
        user.setId(rs.getString("id"));
        user.setName(rs.getString("name"));
        user.setPassword(rs.getString("password"));
        return user;
    }
}

3.測試

@Test
public void demo4() {
    Users user = jdbcTemplate.queryForObject("select * from users where id= ?",new MyRowMapper(),10);
    System.out.println(user);
}

如果不想采用上文接口的方式,可以在測試類中:

@Test
public void demo4() {
    RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.calss);
    Users user = jdbcTemplate.queryForObject("select * from users where id= ?",new MyRowMapper(),10);
    System.out.println(user);
}

全部查詢

@Test
    public void demo5() {
        List<Users> list = jdbcTemplate.query("select * from users", new MyRowMapper());
        for(Users user:list) {
            System.out.println(user);
        }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吕粹,一起剝皮案震驚了整個濱河市庭敦,隨后出現(xiàn)的幾起案子历涝,更是在濱河造成了極大的恐慌扭倾,老刑警劉巖淀零,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異膛壹,居然都是意外死亡驾中,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進(jìn)店門模聋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來肩民,“玉大人,你說我怎么就攤上這事链方〕痔担” “怎么了?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵祟蚀,是天一觀的道長工窍。 經(jīng)常有香客問我占调,道長,這世上最難降的妖魔是什么移剪? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮薪者,結(jié)果婚禮上纵苛,老公的妹妹穿的比我還像新娘。我一直安慰自己言津,他們只是感情好攻人,可當(dāng)我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悬槽,像睡著了一般怀吻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上初婆,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天蓬坡,我揣著相機與錄音,去河邊找鬼磅叛。 笑死屑咳,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的弊琴。 我是一名探鬼主播兆龙,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼敲董!你這毒婦竟也來了紫皇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤腋寨,失蹤者是張志新(化名)和其女友劉穎聪铺,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體精置,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡计寇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了脂倦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片番宁。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赖阻,靈堂內(nèi)的尸體忽然破棺而出蝶押,到底是詐尸還是另有隱情,我是刑警寧澤火欧,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布棋电,位于F島的核電站茎截,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏赶盔。R本人自食惡果不足惜企锌,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望于未。 院中可真熱鬧撕攒,春花似錦、人聲如沸烘浦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闷叉。三九已至擦俐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間握侧,已是汗流浹背蚯瞧。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留品擎,地道東北人状知。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像孽查,于是被迫代替她去往敵國和親饥悴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,922評論 2 361

推薦閱讀更多精彩內(nèi)容