关闭

mybaits开发之通用 dao层编写

标签: mybatisdao
1376人阅读 评论(0) 收藏 举报
分类:

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

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>
</mapper>

好了,就这样,是不是觉得很简单,直接释放出dao层,一个通用dao.



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

mybaits之dao层通用写法sqlsessiontemplate

mybatis
  • u011214053
  • u011214053
  • 2017-03-17 16:59
  • 3120

mybatis+spring3实战3 - sqlSessionTemplate 方式

package com.zxh.customer.template.dao; import java.util.List; import java.util.Map; /**  *  * ...
  • ETTTTTSS
  • ETTTTTSS
  • 2013-12-04 14:33
  • 23659

mybaits开发之通用 dao层编写

http://blog.csdn.net/u014593633/article/details/52368818 版权声明:本文为博主原创文章,未经博主允许不得转载。 在s...
  • xiyang_1990
  • xiyang_1990
  • 2017-11-21 23:32
  • 58

mybaits开发之通用 dao层编写

http://blog.csdn.net/u014593633/article/details/52368818 版权声明:本文为博主原创文章,未经博主允许不得转载。 在s...
  • xiyang_1990
  • xiyang_1990
  • 2017-11-21 23:32
  • 58

实体转xml(史上最全面)

记得之前遇到过需要将实体转成xml,然后调用webservice接口的情景。比较了几种方式,发现使用jdk本身自带的JAXBContext转换比较方便,直接通过注解来标识各个字段在xml中的属性及节点...
  • A313157416
  • A313157416
  • 2018-01-06 15:59
  • 38

Object类中的equals(Object obj) 和 操作符“==”的区别

Object类,它是java中所有类的根类。Object类的子类都可以使用Object中定义的方法。 此次主要介绍Object类中定义的equals(Object obj)方法。这个方法的作用是比较...
  • u014746965
  • u014746965
  • 2015-06-26 17:54
  • 4133

变幻莫测的python(一)---基本数据类型

1.变量 变量是一个内存标签,可以通过id(v)来查看内存地址 两个变量可以有相同的内存地址,因为引用同一地址 2.运算符    赋值运算符:=,+=,-=,*=,/=,%=    ...
  • Senssic
  • Senssic
  • 2014-04-05 23:31
  • 1903

玩转Android--组件篇---Handler的使用

原址:http://hualang.iteye.com/category/143855 public class  Handler extends Object   java.lang.O...
  • luckypeng
  • luckypeng
  • 2015-07-30 19:38
  • 333

python3写爬虫程序时,遇到的问题及解决方法

cannot use a string pattern on a bytes-like object这个错误我是发生在以下代码: re.findall(pattern, data)这个时候如何data...
  • u013066244
  • u013066244
  • 2016-11-10 20:24
  • 5163

简单的加密算法(MD5,base64,ASE)

简单的加密算法,废话不多说,直接上代码MD5,base64,sha,mac,aes
  • AlanLzz
  • AlanLzz
  • 2017-06-01 19:03
  • 249
    个人资料
    • 访问:35947次
    • 积分:365
    • 等级:
    • 排名:千里之外
    • 原创:16篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条