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

  • 相关阅读:
    gitblit安装使用
    谷歌AMP和百度MIP是什么鬼?
    微信小程序开发体验
    设计模式之策略模式
    【前端安全】JavaScript防XSS攻击
    【前端安全】JavaScript防流量劫持
    设计模式之“中间件模式”
    设计模式之Mixin模式
    设计模式之观察者模式
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/EasonJim/p/7065330.html
Copyright © 2011-2022 走看看