Spring Dao

案例鏈接:鏈接: https://pan.baidu.com/s/1kPzTOknuRK6a8tPqT54REg
提取碼: szr6

步驟1:

在src下新建一個(gè)applicationContext.xml文件辣吃,有幾種配置數(shù)據(jù)庫連接池的方式邑茄,以下有幾種連接池可選擇:Spring自帶的連接池遵岩、DBCP 連接池以及C3P0 連接池,我們以C3P0連接池為例案狠。
具體配置如下:

<?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:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!-- 注解掃描 -->
    <context:component-scan base-package="com.hello"/>

    <!-- Spring 自帶的連接池 
        DriverClassName 用來配置驅(qū)動(dòng)名字
        Url  數(shù)據(jù)庫
        Username 用戶名
        Password 密碼
    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://10.25.161.7:3306/jss"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    -->
    
    <!-- 使用 DBCP 連接池 
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://10.25.161.7:3306/jss"></property>
        <property name="username" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    -->

    <!-- 使用 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/cz3"></property>
        <property name="user" value="root"></property>
        <property name="password" value="root"></property>
    </bean>
    
    <!-- 配置 JDBC 模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

</beans>

步驟2:

在com.hello.pojo包下新建User類剖淀,字段和數(shù)據(jù)庫表中的字段一樣

package com.hello.pojo;

public class User {
    private Integer id;
    private String username;
    private String password;
    
    public User() {
        super();
    }
    public User(Integer id, String username, String password) {
        super();
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
    }
}

步驟3:

在com.hello.mapper包下新建MyRowMapper類實(shí)現(xiàn)RowMapper接口纲堵,重寫mapRow方法,指定返回User對(duì)象棍辕,這個(gè)在Dao層的時(shí)候查詢返回對(duì)象或者對(duì)象集合需要用到暮现。

package com.hello.Mapper;

import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.jdbc.core.RowMapper;

import com.hello.pojo.User;

public class MyRowMapper implements RowMapper<User>{

    @Override
    public User mapRow(ResultSet resultSet, int i) throws SQLException {
        //獲取結(jié)果集中的數(shù)據(jù)
        int id = resultSet.getInt("id");
        String username = resultSet.getString("username");
        String password = resultSet.getString("password");
        //把數(shù)據(jù)封裝成User對(duì)象
        User user = new User();
        user.setId(id);
        user.setUsername(username);
        user.setPassword(password);
        return user;
    }
}

步驟4:

在com.hello.dao包下新建一個(gè)UserDao接口以及實(shí)現(xiàn)類UserDaoImpl
UserDao接口代碼:

package com.hello.dao;

import java.util.List;

import com.hello.pojo.User;

public interface UserDao {
    //通過id查找User
    public User findUserById(Integer id);
    //查詢?nèi)縐ser
    public List<User> selectAllUser();
    //通過id查找username
    public String findNameById(Integer id);
}

UserDaoImpl實(shí)現(xiàn)類代碼:
(里面舉例了查詢返回結(jié)果的3種情況:返回某個(gè)值、返回某個(gè)對(duì)象楚昭、返回某個(gè)對(duì)象集合)

package com.hello.dao;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Component;

import com.hello.Mapper.MyRowMapper;
import com.hello.pojo.User;

@Component("UserDao")
public class UserDaoImpl implements UserDao {
    @Autowired
    private JdbcTemplate jdbcTemplate;

    /* 查詢返回某一個(gè)值!! */
    // 通過id查找username
    @Override
    public String findNameById(Integer id) {
        String sql = "select username from user where id = ?";
        String name = jdbcTemplate.queryForObject(sql, String.class, id);
        return name;
    }

    /* 查詢返回單個(gè)對(duì)象F艽! */
    // 通過id查找User
    @Override
    public User findUserById(Integer id) {
        String sql = "select * from user where id = ?";
        User user = jdbcTemplate.queryForObject(sql, new MyRowMapper(), id);
        return user;
    }

    /* 查詢返回對(duì)象集合8塘幅! */
    // 查詢?nèi)縐ser
    @Override
    public List<User> selectAllUser() {
        String sql = "select * from user";
        List<User> userList = jdbcTemplate.query(sql, new MyRowMapper());
        return userList;
    }
}

上面的出現(xiàn)的
@Autowired
private JdbcTemplate jdbcTemplate;
是自動(dòng)裝載xml文件中的bean類昔案,得到一個(gè)Spring的JdbcTemplate對(duì)象,通過這個(gè)對(duì)象可以調(diào)用函數(shù)進(jìn)行增刪改查等操作晌块。

步驟5:

完成以上步驟就可以進(jìn)行測(cè)試了爱沟,新建測(cè)試類SpringTest,分別對(duì)Dao層的三個(gè)方法進(jìn)行測(cè)試

package com.hello.test;

import java.util.List;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.hello.dao.UserDao;
import com.hello.pojo.User;

@ContextConfiguration("classpath:applicationContext.xml")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringTest {
    
    @Autowired
    private UserDao userDao;
    //通過id查找User
    @Test
    public void findUserById() {
        User user = userDao.findUserById(1);
        System.out.println(user);
    }
    //查詢?nèi)縐ser
    @Test
    public void selectAllUser(){
        List<User> userList = userDao.selectAllUser();
        for (User user : userList) {
            System.out.println(user);
        }
    }
    //通過id查找username
    @Test
    public void findNameById(){
        String name = userDao.findNameById(1);
        System.out.println(name);
    }
}

測(cè)試運(yùn)行findUserById()方法,運(yùn)行結(jié)果:


測(cè)試結(jié)果.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末匆背,一起剝皮案震驚了整個(gè)濱河市呼伸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钝尸,老刑警劉巖括享,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異珍促,居然都是意外死亡铃辖,警方通過查閱死者的電腦和手機(jī)柏副,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門捺典,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纵刘,你說我怎么就攤上這事穴翩∪冢” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵芒帕,是天一觀的道長(zhǎng)歉嗓。 經(jīng)常有香客問我,道長(zhǎng)背蟆,這世上最難降的妖魔是什么鉴分? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮带膀,結(jié)果婚禮上志珍,老公的妹妹穿的比我還像新娘。我一直安慰自己垛叨,他們只是感情好碴裙,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著点额,像睡著了一般舔株。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上还棱,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天载慈,我揣著相機(jī)與錄音,去河邊找鬼珍手。 笑死办铡,一個(gè)胖子當(dāng)著我的面吹牛辞做,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寡具,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼秤茅,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了童叠?” 一聲冷哼從身側(cè)響起框喳,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厦坛,沒想到半個(gè)月后五垮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杜秸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年放仗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撬碟。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诞挨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呢蛤,到底是詐尸還是另有隱情亭姥,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布顾稀,位于F島的核電站,受9級(jí)特大地震影響坝撑,放射性物質(zhì)發(fā)生泄漏静秆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一巡李、第九天 我趴在偏房一處隱蔽的房頂上張望抚笔。 院中可真熱鬧,春花似錦侨拦、人聲如沸殊橙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膨蛮。三九已至,卻和暖如春季研,著一層夾襖步出監(jiān)牢的瞬間敞葛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工与涡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惹谐,地道東北人持偏。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像氨肌,于是被迫代替她去往敵國(guó)和親鸿秆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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