springMVC+mybatis 之借助SqlSessionTemplate 实现Dao层通用写法

springMVC+mybatis 之借助SqlSessionTemplate 实现Dao层通用写法在springMVC+mybatis框架开发时,通常我们会写多的dao,如userDao,roleDao,departDao等等,这样开发效果就很慢,不是很好,所以编写个通用dao.1.编写dao接口[java]viewplaincopypublicinterfaceDAO{/***保存对象*@paramstr*@paramobj*@retu…

大家好,又见面了,我是你们的朋友全栈君。

在springMVC+mybatis框架开发时,通常我们会写多的dao,如userDao,roleDao,departDao等等,这样开发效果就很慢,不是很好,所以编写个通用dao.

SqlSessionTemplate是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。SqlSessionTemplate是线程安全的,可以被多个DAO所共享使用。

当调用SQL方法时,包含从映射器getMapper()方法返回的方法,SqlSessionTemplate将会保证使用的SqlSession是和当前Spring的事务相关的。此外,它管理session的生命周期,包含必要的关闭,提交或回滚操作。

SqlSessionTemplate实现了SqlSession,这就是说要对MyBatis的SqlSession进行简易替换。

SqlSessionTemplate通常是被用来替代默认的MyBatis实现的DefaultSqlSession,因为它不能参与到Spring的事务中也不能被注入,因为它是线程不安全的。相同应用程序中两个类之间的转换可能会引起数据一致性的问题。

SqlSessionTemplate对象可以使用SqlSessionFactory作为构造方法的参数来创建。
例如:

<!-- 创建sqlSessionFactoryBean -->
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="classpath:mybatis-config.xml" p:mapperLocations="classpath:com/mf/*/entity/mapper/*.xml" p:plugins-ref="pagePlugin" />

 <!-- 配置sqlSessionTemplate -->
 <bean class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory" />
 </bean>

编写步骤:

1.编写dao接口

public interface DAO { 
     
      
    /** * 保存对象 * @param str * @param obj * @return * @throws Exception */  
    public Object save(String str, Object obj) throws Exception;  
      
    /** * 修改对象 * @param str * @param obj * @return * @throws Exception */  
    public Object update(String str, Object obj) throws Exception;  
      
    /** * 删除对象 * @param str * @param obj * @return * @throws Exception */  
    public Object delete(String str, Object obj) throws Exception;  
  
    /** * 查找对象 * @param str * @param obj * @return * @throws Exception */  
    public Object findForObject(String str, Object obj) throws Exception;  
  
    /** * 查找对象 * @param str * @param obj * @return * @throws Exception */  
    public Object findForList(String str, Object obj) throws Exception;  
      
    /** * 查找对象封装成Map * @param s * @param obj * @return * @throws Exception */  
    public Object findForMap(String sql, Object obj, String key , String value) throws Exception;  
      
}  

2.编写dao 实现类

public class DaoSupport implements DAO { 
     
  
    @Resource(name = "sqlSessionTemplate")  
    private SqlSessionTemplate sqlSessionTemplate;  
      
    /** * 保存对象 * @param str * @param obj * @return * @throws Exception */  
    public Object save(String str, Object obj) throws Exception { 
     
        return sqlSessionTemplate.insert(str, obj);  
    }  
      
    /** * 批量更新 * @param str * @param obj * @return * @throws Exception */  
    public Object batchSave(String str, List objs )throws Exception{ 
     
        return sqlSessionTemplate.insert(str, objs);  
    }  
      
    /** * 修改对象 * @param str * @param obj * @return * @throws Exception */  
    public Object update(String str, Object obj) throws Exception { 
     
        return sqlSessionTemplate.update(str, obj);  
    }  
  
    /** * 批量更新 * @param str * @param obj * @return * @throws Exception */  
    public void batchUpdate(String str, List objs )throws Exception{ 
     
        SqlSessionFactory sqlSessionFactory = sqlSessionTemplate.getSqlSessionFactory();  
        //批量执行器 
        SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);  
        try{ 
     
            if(objs!=null){ 
     
                for(int i=0,size=objs.size();i<size;i++){ 
     
                    sqlSession.update(str, objs.get(i));  
                }  
                sqlSession.flushStatements();  
                sqlSession.commit();  
                sqlSession.clearCache();  
            }  
        }finally{ 
     
            sqlSession.close();  
        }  
    }  
      
    /** * 批量更新 * @param str * @param obj * @return * @throws Exception */  
    public Object batchDelete(String str, List objs )throws Exception{ 
     
        return sqlSessionTemplate.delete(str, objs);  
    }  
      
    /** * 删除对象 * @param str * @param obj * @return * @throws Exception */  
    public Object delete(String str, Object obj) throws Exception { 
     
        return sqlSessionTemplate.delete(str, obj);  
    }  
       
    /** * 查找对象 * @param str * @param obj * @return * @throws Exception */  
    public Object findForObject(String str, Object obj) throws Exception { 
     
        return sqlSessionTemplate.selectOne(str, obj);  
    }  
  
    /** * 查找对象 * @param str * @param obj * @return * @throws Exception */  
    public Object findForList(String str, Object obj) throws Exception { 
     
        return sqlSessionTemplate.selectList(str, obj);  
    }  
      
    public Object findForMap(String str, Object obj, String key, String value) throws Exception { 
     
        return sqlSessionTemplate.selectMap(str, obj, key);  
    }  
      
}  

3.那么怎么使用呢?

public class UserService { 
     
  
    @Resource(name = "daoSupport")  
    private DaoSupport dao;  
  
    /* *通过id获取数据 */  
    public User getUserAndRoleById(String userid) throws Exception { 
     
        return (User) dao.findForObject("UserMapper.getUserAndRoleById", <span style="font-family: Arial, Helvetica, sans-serif;">userid</span>);  
    }   
}  

4. UserMapper.xml中的配置

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
<mapper namespace="UserMapper">  
<select id="getUserById" parameterType="String" resultType="User">  
    select  * from SYS_USER where userId=#{userId}  
</select>  
lt;/mapper>  

namespqce:是随意起的 不是规定必须叫 userNamespace

5.mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">  
<mapper namespace="Test">  
  
    <select id="queryDataCount" parameterType="com.mybatis.Test" resultType="int">  
        SELECT COUNT(1) FROM INF_CONSUMER T WHERE T.UUID = #{uuid}  
    </select>  
      
</mapper>  

6.具体DAO配置

package com.dwr;  
  
import org.springframework.stereotype.Repository;  
  
import com.mybatis.Test;  
  
@Repository  
public class TestDAO extends MyBatisDAO { 
     
  
    public int getCount(Test test) { 
     
        return (Integer) this.getObject("Test.queryDataCount", test);  
    }  
}  

这样一个通用的Dao解决了。

转载:https://blog.csdn.net/hellolovelife/article/details/78476099

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138389.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 在 docker 之间导出导入镜像「建议收藏」

    在 docker 之间导出导入镜像「建议收藏」很喜欢玩docker,但最新遇到一个问题,公司给的新机器的dns有问题,导致pull不下来镜像。没办法了,没有镜像什么神马都干不了,又不能花很多时间去搭建私有的镜像库,只有另寻办法了。废话少说,经过探究,发现docker提供把镜像导出export(保存save)为文件的机制,这样就可以把镜像copy到任意地方了。1.导…

    2025年9月19日
    8
  • usb转rs485 linux驱动下载,USB转485万能驱动下载

    usb转rs485 linux驱动下载,USB转485万能驱动下载USB转RS485串口驱动是一款非常专业的USB转RS485驱动安装程序。这款软件适合WIN7/WINXP/LINUX等系统,能够帮助用户一键解决USB无法转换成RS485的问题,需要的小伙伴可下载体验。【安装方法】1、在安装前可以先看看使用说明再安装。将USB转换线插入电脑的USB接口中,系统会提示检测到新设备并出现新硬件添加向导,选择从列表或指定的位置安装,手动安装,找到刚刚驱动的解压目录,…

    2022年6月12日
    61
  • python贪吃蛇代码_python 贪吃蛇

    python贪吃蛇代码_python 贪吃蛇importpygamefrompygame.localsimport*fromsysimportexitfrompygame.colorimportTHECOLORSimportrandomcellsize=20width=640height=480cellw=int(width/cellsize)cellh=int(height/ce…

    2022年8月10日
    14
  • 模型调参:分步骤的提升模型的精度

    模型调参:分步骤的提升模型的精度

    2021年11月21日
    46
  • java基础菜鸟教程_java基础菜鸟教程大全,java入门「建议收藏」

    java基础菜鸟教程_java基础菜鸟教程大全,java入门「建议收藏」java这个词语相信大家都听的耳朵快要起茧了吧,就算是没学过编程的小伙伴也一定听说过java,谁让它如今几乎火遍大江南北呢。这次我们就来讲解一些常见的java基础,希望能够让你们更加了解java。java基本概念一、什么是程序?为了完成任务,执行一系列有序的指令的集合。指令:命令。二、Java程序设计2.1什么是Java?是撰写跨平台,面向对象的计算机语言。2.2Java能做什么?开发桌面应用…

    2022年5月1日
    78
  • 学员管理系统(完整版)

    前言:学员管理系统是刚接触python时算是一个比较难的小项目,毕竟第一次接触这样的思维逻辑,不过用心学起来还是很有趣的,发现乐在其中,也就不觉得难了。下面给大家分享一下学员管理系统较为完整的代码(当然其中肯定有很多不足,毕竟是新手,菜鸟小程序猿,还请见谅!多谢!)言归正传:学员管理拆分为一下步骤:首先:先定义存储所有学员信息的大列表students=[]添加学员,代码如下:查…

    2022年4月5日
    85

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号