以下內容引用自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