MapperScanner

MapperScannerConfigurer 掃描配置
能掃描接口锋玲,基于接口創(chuàng)建一個(gè)代理對(duì)象

public class MapperScannerConfigurer implements BeanDefinitionRegistryPostProcessor, InitializingBean, ApplicationContextAware, BeanNameAware {

  private String basePackage;
}

配置dao接口掃描,底層會(huì)基于dao接口創(chuàng)建這個(gè)接口的代理對(duì)象蜓氨,這個(gè)代理對(duì)象內(nèi)部會(huì)通過mybatis訪問數(shù)據(jù)庫

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="BasePackage" value=".dao"/>
<!--下面這行可以不寫,但是有多個(gè) sqlSessionFactory會(huì)報(bào)錯(cuò) -->
<property name="SqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
掃描
.dao是為了拿到dao接口,底層系統(tǒng)通過jdk的api-(Proxy的newProxyInstance創(chuàng)建代理實(shí)例)為接口創(chuàng)建代理對(duì)象横漏,這個(gè)對(duì)象還需要注入sqlSessionFactory,對(duì)分布式系統(tǒng)sqlSessionFactory對(duì)象可能有多個(gè)
底層在創(chuàng)建dao接口代理對(duì)象的時(shí)候熟掂,在代理類里面要通過
sqlSessionFactory來openSession,通過sqlSession訪問數(shù)據(jù)庫缎浇,最后釋放資源。所以要關(guān)聯(lián)sqlSessionFactory赴肚,掃描dao接口的目的是創(chuàng)建實(shí)現(xiàn)類素跺,創(chuàng)建實(shí)現(xiàn)類的目的是訪問數(shù)據(jù)庫,訪問數(shù)據(jù)庫要通過mybatis,mybatis需要sqlSessionFactory



/spring-ioc-v3/src/main/resources/spring-configs.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd  
       http://www.springframework.org/schema/mvc   
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd   
       http://www.springframework.org/schema/tx   
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd   
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-4.3.xsd
       http://www.springframework.org/schema/data/jpa 
       http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.3.xsd">
    <util:properties id="cfg" location="classpath:config.properties"></util:properties>
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        init-method="init" destroy-method="close" lazy-init="false">
        <property name="driverClassName" value="#{cfg.jdbcDriver}"></property>
        <property name="url" value="#{cfg.jdbcUrl}"></property>
        <property name="username" value="#{cfg.jdbcUsername}"></property>
        <property name="password" value="#{cfg.jdbcPassword}"></property>
        <!-- 配置獲取連接等待超時(shí)的時(shí)間 -->
        <property name="maxWait" value="1800" />
        <property name="MaxActive" value="10" />
    </bean>
    <!--整合SqlSessionFactoryBean對(duì)象(通過此對(duì)象創(chuàng)建SqlSession) -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
        lazy-init="true">
        <property name="dataSource" ref="dataSource"></property>
        <property name="mapperLocations" value="classpath:mapper/sys/*Mapper.xml" />
    </bean>
    <!-- 配置dao接口掃描誉券。底層會(huì)基于接口創(chuàng)建這個(gè)接口的代理對(duì)象指厌,這個(gè)代理對(duì)象的內(nèi)部會(huì)通過mybatis訪問數(shù)據(jù)庫 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="BasePackage" value="**.dao" />
        <!--下面這行可以不寫,但是有多個(gè) sqlSessionFactory會(huì)報(bào)錯(cuò) -->
        <property name="SqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>
</beans>

/spring-ioc-v3/src/main/resources/config.properties

jdbcDriver=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql:///jtsys?useUnicode=true&characterEncoding=utf-8
jdbcUsername=root
jdbcPassword=123456

/spring-ioc-v3/src/main/resources/mapper/sys/SysLogMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.SysLogDao">
    <select id="findPageObjects" resultType="entity.SysLog">
        select * from sys_logs
    </select>
</mapper>

/spring-ioc-v3/src/main/java/dao/SysLogDao.java

package dao;

import java.util.List;

import entity.SysLog;

/**
 * DAO:數(shù)據(jù)訪問對(duì)象
 * 定義訪問數(shù)據(jù)庫的相關(guān)方法
 */
public interface SysLogDao {
    List<SysLog>findPageObjects();
}

/spring-ioc-v3/src/main/java/entity/SysLog.java

package entity;

import java.io.Serializable;
import java.util.Date;

/**
 * POJO:日志實(shí)體對(duì)象 封裝系統(tǒng)的日志信息 實(shí)現(xiàn)序列化接口横朋,便于網(wǎng)絡(luò)傳輸
 */
public class SysLog implements Serializable {
    private static final long serialVersionUID = -496934815638734874L;
    private Integer id;
    /**
     * 操作用戶
     */
    private String username;
    /**
     * 執(zhí)行的操作
     */
    private String operation;
    /**
     * 執(zhí)行這個(gè)操作的方法
     */
    private String method;
    /**
     * 調(diào)用方法傳入的參數(shù)
     */
    private String params;
    /**
     * 方法的執(zhí)行時(shí)間
     */
    private Long time;
    /**
     * 用戶的ip地址
     */
    private String ip;
    /**
     * 這個(gè)日志的創(chuàng)建時(shí)間
     */
    private Date createdTime;

    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 getOperation() {
        return operation;
    }

    public void setOperation(String operation) {
        this.operation = operation;
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getParams() {
        return params;
    }

    public void setParams(String params) {
        this.params = params;
    }

    public Long getTime() {
        return time;
    }

    public void setTime(Long time) {
        this.time = time;
    }

    public String getIp() {
        return ip;
    }

    public void setIp(String ip) {
        this.ip = ip;
    }



    public Date getCreatedTime() {
        return createdTime;
    }

    public void setCreatedTime(Date createdTime) {
        this.createdTime = createdTime;
    }

    @Override
    public String toString() {
        return "SysLog [id=" + id + ", username=" + username + ", operation=" + operation + ", method=" + method
                + ", params=" + params + ", time=" + time + ", ip=" + ip + ", createdTime=" + createdTime + "]";
    }


}
package test;

import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBase {
    protected ClassPathXmlApplicationContext ctx;
    @Before
    public void init(){
        ctx=new ClassPathXmlApplicationContext("spring-configs.xml");
    }
    @After
    public void close(){
        ctx.close();
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仑乌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晰甚,老刑警劉巖衙传,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異厕九,居然都是意外死亡蓖捶,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門扁远,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俊鱼,“玉大人,你說我怎么就攤上這事畅买〔⑾校” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵谷羞,是天一觀的道長帝火。 經(jīng)常有香客問我,道長湃缎,這世上最難降的妖魔是什么犀填? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮嗓违,結(jié)果婚禮上九巡,老公的妹妹穿的比我還像新娘。我一直安慰自己蹂季,他們只是感情好冕广,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乏盐,像睡著了一般佳窑。 火紅的嫁衣襯著肌膚如雪制恍。 梳的紋絲不亂的頭發(fā)上父能,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音净神,去河邊找鬼何吝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鹃唯,可吹牛的內(nèi)容都是我干的爱榕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼坡慌,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼黔酥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤跪者,失蹤者是張志新(化名)和其女友劉穎棵帽,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體渣玲,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡逗概,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忘衍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逾苫。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枚钓,靈堂內(nèi)的尸體忽然破棺而出铅搓,到底是詐尸還是另有隱情,我是刑警寧澤搀捷,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布狸吞,位于F島的核電站,受9級(jí)特大地震影響指煎,放射性物質(zhì)發(fā)生泄漏蹋偏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一至壤、第九天 我趴在偏房一處隱蔽的房頂上張望威始。 院中可真熱鬧,春花似錦像街、人聲如沸黎棠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脓斩。三九已至,卻和暖如春畴栖,著一層夾襖步出監(jiān)牢的瞬間随静,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工吗讶, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留燎猛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓照皆,卻偏偏與公主長得像重绷,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子膜毁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360