返回首页 Mybatis 实战教程

SqlSessionDaoSupport 的使用

前面的系列 Mybatis 文章,已经基本讲到了 Mybatis 的操作,但都是基于 mapper 隐射操作的,在 Mybatis 3 中这个 mapper 接口貌似充当了以前在 ibatis 2 中的 DAO 层的作用。但事实上,如果有这个 mapper 接口不能完成的工作,或者需要更复杂的扩展的时候,你就需要自己的 DAO 层. 事实上 Mybatis 3 也是支持 DAO 层设计的,类似于 ibatis 2 。

下面介绍下。

首先创建一个 com.yihaomen.dao的package。然后在里面分别创建接口 UserDAO,以及实现该接口的 UserDAOImpl。

package com.yihaomen.dao;
import java.util.List;
import com.yihaomen.model.Article;
public interface UserDAO {
    public List<Article> getUserArticles(int userid);
}
package com.yihaomen.dao;
import java.util.List;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;
import com.yihaomen.model.Article;

@Repository
public class UserDAOImpl extends SqlSessionDaoSupport implements UserDAO {
    @Override
    public List<Article> getUserArticles(int userid) {        
        return this.getSqlSession().selectList("com.yihaomen.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.yihaomen.dao"/>这样在需要调用的地方,就可以使用 autowire 自动注入了。

当然,你也可以按一般程序的思路,创建一个 service 的 package, 用 service 去调用 dao 层,我这里就没有做了,因为比较简单,用类似的方法,也机注意自动注入时,也要配置 <context:component-scan base-package="com.yihaomen.service" />等这样的。

在 controller 层中测试,直接调用 dao 层方法

在 controller 中加入方法:

@Autowired
    UserDAO userDAO;

        .......

    @RequestMapping("/daolist")
    public ModelAndView listalldao(HttpServletRequest request,HttpServletResponse response){
        List<Article> articles=userDAO.getUserArticles(1);
        //制定视图,也就是list.jsp
        ModelAndView mav=new ModelAndView("list");
        mav.addObject("articles",articles);
        return mav;
    }

这样可以得到同样的结果,而且满足了一般程序的设计方法.代码结构如下: