在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;
- }
- 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);
- }
- }
- 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>);
- }
- }
- <?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
3.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>
4.具体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);
- }
- }