MyBatis3-SqlSessionDaoSupport的使用


以下內容引用自http://www.yihaomen.com/article/java/336.htm

在MyBatis3中這個Mapper接口貌似充當了以前在iBatis2中的DAO層的作用。但事實上,如果有這個Mapper接口不能完成的工作,或者需要更復雜的擴展的時候,就需要自己的DAO層. 事實上MyBatis3也是支持DAO層設計的,類似於iBatis 2。

在此之前,將使用上一章http://www.cnblogs.com/EasonJim/p/7056270.html使用的例子代碼。

實現步驟如下:

1、首先創建一個com.jsoft.testmybatis.dao的package然后在里面分別創建接口UserDAO,以及實現該接口的UserDAOImpl。

package com.jsoft.testmybatis.dao;

import java.util.List;
import com.jsoft.testmybatis.models.Article;

public interface UserDAO {
    public List<Article> getUserArticles(int userid);
}
package com.jsoft.testmybatis.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;
import com.jsoft.testmybatis.models.Article;

@Repository
public class UserDAOImpl extends SqlSessionDaoSupport implements UserDAO {
    
    @Autowired(required = false)
    @Qualifier("sqlSessionFactory")
    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        super.setSqlSessionFactory(sqlSessionFactory);
    }
    
    @Override
    public List<Article> getUserArticles(int userid) {
        return this.getSqlSession().selectList("com.jsoft.testmybatis.inter.IUserOperation.getUserArticles", userid);
    }
}

執行的SQL語句采用了包名+SQL語句id的方式,后面是參數。

注意繼承了"SqlSessionDaoSupport",利用方法getSqlSession()可以得到SqlSessionTemplate,從而可以執行各種SQL語句,類似於HibernateTemplate一樣,至少思路一樣。

如果與Spring 3 MVC集成要用@Autowire的話,在DAOImpl類上加上注解“@Repository”,另外還需要在Spring配置文件中加入<context:component-scan base-package="com.jsoft.testmybatis.dao" /> 這樣在需要調用的地方,就可以使用@Autowire自動注入。

因此,在spring-mvc-servlet.xml中配置如下:

<?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:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    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/mvc 
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.jsoft.testmybatis.controller" />
    <context:component-scan base-package="com.jsoft.testmybatis.dao" />

    <context:annotation-config />

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/jsp/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>

當然,也可以按一般程序的思路,創建一個service的package, 用service去調用dao層,用類似的方法,注意自動注入時,也要配置<context:component-scan base-package="com.jsoft.testmybatis.service" /> 等這樣的。

2、在controller層中測試,直接調用dao層方法

    @Autowired
    UserDAO userDAO;
    
    @RequestMapping("/daolist")
    public ModelAndView listalldao(HttpServletRequest request,HttpServletResponse response){
        List<Article> articles=userDAO.getUserArticles(1); 
        ModelAndView mav=new ModelAndView("/article/list");
        mav.addObject("articles",articles);
        return mav;
    }

3、整體的項目結構如下:

 

測試工程:https://github.com/easonjim/5_java_example/tree/master/mybatis/test10


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM