1. 程式人生 > >dao層不寫實現類容易出現的錯誤及解決方法

dao層不寫實現類容易出現的錯誤及解決方法

        這次碰到這個問題費了一番功夫,就想記下來,為以後提個醒,也希望大家能夠看後少走彎路。

        我配置的是spring+springMVC+mybatis框架,開始也是借鑑別人的程式碼,看到人家dao層不用寫實現類就能直接對映mapper裡的方法,我也想試試,可是一直報錯,org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userService': Unsatisfied dependency expressed through field 'userMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.dao.UserMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)},一直找不到原因。

        接下來先把部分程式碼和配置檔案粘出來,

        首先是spring-mybatis.xml檔案:

<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="url" value="${mysql.url}"></property>
    <property name="username" value="${mysql.username}"></property>
<property name="password" value="${mysql.password}"></property> <property name="driverClassName" value="${mysql.driverClassName}"></property> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource"
ref="ds"></property> <property name="mapperLocations" value="classpath:mybatis/userMapper.xml"></property> <property name="typeAliasesPackage" value="com.entity"></property> </bean> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="ds"></property> </bean> <tx:annotation-driven transaction-manager="txManager"/>
 接下來是dao層介面:
public interface UserMapper {

    /**
     * 判斷使用者登入
     * @param userName 登入名
     * @return usr 查詢到的使用者
     */
User selectUserByName(String userName);
}
 再下來就是userMapper.xml檔案了:
<mapper namespace="com.dao.UserMapper">
    <resultMap type="User" id="userResultMap">
        <id property="userId" column="id"/>
        <result property="userName" column="name"/>
        <result property="password" column="password"/>
        <result property="mail" column="mail"/>
    </resultMap>
    <select id="selectUserByName" parameterType="java.lang.String" resultType="User">
SELECT id AS userId,name AS userName,password,mail
     FROM user
     WHERE name = #{userName}
    </select>
</mapper>
  最後是UserServiceImpl檔案:
@Service("userService")
public class UserServiceImpl implements IUserService {

    private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class);
@Autowired
private UserMapper userMapper;
/**
     * 驗證使用者登入
     *
     * @param userName 登入名
     * @param password 登入密碼
     * @return code為1,message為"賬戶或密碼不正確,請重新輸入"
     * code為2,message為"輸入正確,請等待跳轉"
     * code為3,message為"密碼不正確,請重新輸入"
     */
public ResultMessage checkUserLogin(String userName, String password) {
       ...
}
    其實看到這好多大神應該就能找到問題所在了,是的,就是spring-mybatis.xml中出現的問題,我也是後來才知道的,如果mybtis中不寫dao層的實現類,spring如何為service層注入dao的例項呢,找到兩種方法可以解決。

    一種是在spring-mybatis.xml中加入

<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="mapperInterface" value="com.dao.UserMapper" />
    <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
     還有一種是在spring-mybatis.xml中加入
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.dao"></property>
</bean>
     兩種方法其實差不多,第一種是隻能在單個介面的時候使用,如果對映介面很多的話,就需要使用第二種了,這個大家試一下就知道了。

     第一次寫部落格,有什麼問題請大家見諒!

相關推薦

dao實現容易出現錯誤解決方法

        這次碰到這個問題費了一番功夫,就想記下來,為以後提個醒,也希望大家能夠看後少走彎路。         我配置的是spring+springMVC+mybatis框架,開始也是借鑑別人的程式碼,看到人家dao層不用寫實現類就能直接對映mapper裡的方法,我也

使用Junit單元測試操作MySQL數據庫時出現錯誤解決方法

靜態 方法 簡單 註解 info 正常 mage 返回 基本上 在一次看Mybatis視頻學習過程中,教學視頻中用到了Junit單元測試,因為剛開始學習,會出現許多錯誤,每次出現錯誤都會上網搜索,但是發現基本上錯誤都是這麽幾種: 1、沒有@Test註解 2、測試方法用s

ubuntu安裝g2o時出現錯誤解決方法

安裝G2O可以用高翔在git上的包,一可以從這裡clone下來git clone https://github.com/RainerKuemmerle/g2o.git 然後進入g2o資料夾,執行cmake編譯 mkdir build cd build

框架學習(1)——servicedao和service實現進行資料庫操作

最近也是比較忙,也只能忙裡偷閒地抓緊時間接著學習一下技術,自從上次學習了maven之後,越來越對框架產生了興趣,下了好多的spring視屏,聽著老師的建議,最近也萌生了看別人的程式碼進行學習的想法,然後就上了知乎搜了搜優秀的java框架,發現了一個比較感興趣的,

mybatis原始碼學習--spring+mybatis註解方式為什麼mybatis的dao介面需要實現

          相信大家在剛開始學習mybatis註解方式,或者spring+mybatis註解方式的時候,一定會有一個疑問,為什麼mybatis的dao介面只需要一個介面,不需要實現類,就可以正常使用,筆者最開始的時候也會有這種疑問,當時在網上查了很多資料,也問過公

[偶爾遇到]找到mysql.sock的出現原因解決方案和mysql 預設mysql.sock位置預設問題探討 指定

背景:(1)偶爾會出現mysql的server和mysql的client預設的socke檔案不在一個地方,我們用mysql時會出現一個找不到mysql.sock的情況。(2)因非正常關機出現:/tmp/mysql.sock 不見了,找不到了,如何連線上去的問題?(其他機器通過

Windows7 Python-3.6 安裝PyCrypto(pycrypto 2.6.1)出現錯誤以及解決方法

windows python pycrypto 今天準備在Windows系統上基於python3.6安裝一個pycrypto 2.6.1模塊,很不幸的報了一堆錯誤,如下所示:running installrunning buildrunning build_pyrunning build_extw

eclipse中的出現在打包一次後,後面新建的項目都出錯了,出現support_v7下面出現紅線解決方法為什麽eclipse中項目繼承ActionBarActivity解決方法一樣

style 寫博客 引用 image back 你在 發現 想法 cti 第一次寫博客,有什麽問題或者想法的希望各位可以進行評論交流,望大家多多包涵! 遇到的問題是在新建的項目都出錯了,出現support_v7下面出現紅線及解決方法及為什麽eclipse中項目繼承Acti

C#Datetimepicker出現問題解決方法

前幾天公司用的物料管理系統出現了一個很奇怪的問題,具體的現象是:10月31號的那天,物流部的人因為之前的問題,需要將之前已經結轉的9月份取消結轉。 ,當操作人員將10改變為9的時候,出現問題了。程式直接崩潰,並且報了“年、月和日引數描述無法表示的 DateTime” 這個錯誤。經過一系列的除錯 與查資

ssh連接出現錯誤解決方法!!!!!!!

1,ssh: connect to host 192.168.1.108 port 22: Connection refused 2,ssh_exchange_identification: read: Connection reset by peer 用ssh相連的兩臺電腦:伺服器ubuntu

java中在使用時的一些常見錯誤解決方法

關於java中類的一些常見錯誤及解決方法 1.定義了一個主類,如 public class TestCircle{//此時這裡會顯示“class TestCircle”has never been used“ public void main(String[] args){…}; class

【MongoDB】MongoDb的“not master and slaveok=false”錯誤解決方法 mongo連線從庫出現問題

連結mongodb報錯如下 2016-03-14T16:26:00.912+0800 E QUERY [thread1] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "not master and slaveOk=false", "cod

ubuntu16.04安裝網易雲音樂方法出現問題解決方法

  關於Ubuntu系統常用軟體安裝我建立一個分類,用來記錄菜鳥揪心的安裝歷程。。。 1、首先去網易雲官網去下載網易雲音樂。下載連結 開啟連結,如下圖,點選Ubuntu16.04下載。  下載到Home下的下載資料夾。如下圖所示。 2、 安裝

採用Anaconda平臺呼叫pymc3時出現錯誤解決方法

提示:(1)module 'theano' has no attribute 'gof',c++編輯出現錯誤    (2)stdio.h file not found 解決方法:(1)在終端中輸入 xcode-select --install,按提示安裝完成後,重啟終端即可    

Composer instll 命令出現錯誤解決方法

[Composer\Downloader\TransportException] Invalid credentials for 'https://packagist.phpcomposer.com/p/slimkit/plus%247bb5334d424a092dde686

關於Ubuntu下gcc編譯帶-lsqlite3出現錯誤解決方法

如下錯誤: /usr/bin/ld: 找不到 -lsqlite3 collect2: error: ld returned 1 exit status Makefile:16: recipe for target 'FrontServer' failed make: ***

執行Double DQN程式出現錯誤解決辦法

出現錯誤: ValueError: Variable Natural_DQN/eval_net/l1/w1 already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarSc

AspMVC -EF 使用過程中出現錯誤解決

在.Net 使用EF如果不正確,可能會出現異常錯誤。一般而言,有可能以下錯誤場景1,在程式集“XXX”中未找到遷移配置型別“XXX.Migrations.Configuration”。這種錯誤出現在定義的DBContext 類與定義的web.config 資料連線串名稱不一致

myEclipse 專案有紅感嘆號問題出現原因解決方法

【問題原因】:工程中classpath中指向的包路徑錯誤 【解決辦法】:右鍵專案名稱 BuildPath —> Configure Build Paht…中,然後上面有幾個選項卡找到 Libraries中出現紅色叉號的包為路徑錯誤的包。到classpath中修改相應包

maven managed dependencies找到maven管理依賴的原因解決方法

圖一 圖二 選擇圖二maven managed dependencies之後在圖一那裡沒顯示 原因:工程不是maven工程。 解決方法1:重新用ecplise建個maven工程,然後把你的程式碼匯入新工程,執行ok。 解決方法2:新增maven支援。如下圖:選擇”E