zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7065330.html
Copyright © 2011-2022 走看看