mybatis-basedao的实现
package com.yangwei.shop.dao; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.ibatis.session.SqlSession; import com.yangwei.shop.entity.Pager; import com.yangwei.shop.entity.SystemContext; import com.yangwei.shop.util.MyBatisUtil; // 其中 Pager SystemContext 是自定义的分页类,前面mybatis有讲解 http://www.cnblogs.com/yangw/p/3315398.html /** * BaseDao 使用泛型 * 命令 :约定优于配置 */ public class BaseDao<T> { public void add(T obj){ SqlSession session=null; try { session = MyBatisUtil.createSession(); //约定 namespace值是该实体类的全路径,并且所有的添加都是add session.insert(obj.getClass().getName()+".add", obj); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ MyBatisUtil.closeSession(session); } } public void update(T obj){ SqlSession session=null; try { session = MyBatisUtil.createSession(); //约定 namespace值是该实体类的全路径,并且所有的更新都是update session.update(obj.getClass().getName()+".update", obj); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ MyBatisUtil.closeSession(session); } } public void delete(Class<T> clazz,int id){ SqlSession session=null; try { session = MyBatisUtil.createSession(); //约定 namespace值是该实体类的全路径,并且所有的删除都是delete session.delete(clazz.getName()+".delete", id); session.commit(); } catch (Exception e) { e.printStackTrace(); session.rollback(); }finally{ MyBatisUtil.closeSession(session); } } /** * 根据Id查找 */ public T load(Class<T> clazz,int id){ return this.load(clazz.getName()+"load", id); } /** * 根据指定的多个条件获取一条记录(最通用) */ public T load(String sqlId,Map<String,Object> params){ SqlSession session=null; T obj=null; try { session = MyBatisUtil.createSession(); //约定 namespace值是该实体类的全路径,并且所有的根据Id加载都是load obj=session.selectOne(sqlId, params); }finally{ MyBatisUtil.closeSession(session); } return obj; } /** * 根据指定的一个条件获取一条记录 */ public T load(String sqlId,Object param){ SqlSession session=null; T obj=null; try { session = MyBatisUtil.createSession(); //约定 namespace值是该实体类的全路径,并且所有的根据Id加载都是load obj=session.selectOne(sqlId, param); }finally{ MyBatisUtil.closeSession(session); } return obj; } /** * 有分页的查询 (默认是find) */ public Pager<T> find(Class<T> clazz,Map<String,Object> params){ return this.find(clazz.getName()+".find", params); } /** * 有分页的查询 (自行指定sqlId) */ public Pager<T> find(String sqlId,Map<String,Object> params){ int pageOffset=SystemContext.getPageOffset(); int pageSize=SystemContext.getPageSize(); String order=SystemContext.getOrder(); String sort=SystemContext.getSort(); Pager<T> pages=new Pager<T>(); SqlSession session=null; try { session = MyBatisUtil.createSession(); if(params==null) params=new HashMap<String,Object>(); params.put("pageOffset", pageOffset); params.put("pageSize", pageSize); params.put("order", order); params.put("sort", sort); //约定 namespace值是该实体类的全路径,并且所有的分页查询都是find List<T> lists=session.selectList(sqlId, params); pages.setDatas(lists); pages.setPageOffset(pageOffset); pages.setPageSize(pageSize); //获取当前条件下的所有记录数 //查询记录的命名是 XXX,那么约定记录条数命名是 XXX_count int count=session.selectOne(sqlId+"_count", params); pages.setTotalRecord(count); } finally{ MyBatisUtil.closeSession(session); } return pages; } /** * 不带分页的查询 (默认是list) */ public List<T> list(Class<T> clazz,Map<String,Object> params){ return this.list(clazz.getName()+".list", params); } /** * 不带分页的查询 ,自行指定sqlId * 排序依然带着 */ public List<T> list(String sqlId,Map<String,Object> params){ String order=SystemContext.getOrder(); String sort=SystemContext.getSort(); List<T> list=null; SqlSession session=null; try { session = MyBatisUtil.createSession(); if(params==null) params=new HashMap<String,Object>(); params.put("order", order); params.put("sort", sort); //约定 namespace值是该实体类的全路径,并且所有的分页查询都是find list=session.selectList(sqlId, params); } finally{ MyBatisUtil.closeSession(session); } return list; } }
部分mapper.xml
<mapper namespace="com.yangwei.shop.entity.Address"> <insert id="add" parameterType="Address"> insert into t_address (name,phone,postcode,user_id) value (#{name},#{phone},#{postcode},#{user.id}) </insert> <update id="update" parameterType="Address"> update t_address set name=#{name},phone=#{phone},postcode=#{postcode} where id=#{id} </update> <delete id="delete" parameterType="int"> delete from t_address where id=#{id} </delete> <select id="load" parameterType="int" resultType="Address"> select * from t_address where id=#{id} </select> <select id="find" parameterType="map" resultType="Address"> select * from t_address <where> <if test="name!=null"> name like #{name} </if> </where> <if test="sort!=null"> order by ${sort} <if test="order!=null"> ${order} </if> </if> limit #{pageOffset},#{pageSize} </select> <select id="find_count" parameterType="map" resultType="int"> select count(*) from t_address <where> <if test="name!=null"> name like #{name} </if> </where> limit #{pageOffset},#{pageSize} </select> <select id="list" parameterType="map" resultType="Address"> select * from t_address <where> <if test="name!=null"> name like #{name} </if> </where> <if test="sort!=null"> order by ${sort} <if test="order!=null"> ${order} </if> </if> </select> <!-- 下面是一些特殊的情况,即不是我们能提前约定的--> <select id="list_by_name" > </select> <select id="list_by_name_count" > </select>
再看看我们的dao变得如此之简洁
package com.yangwei.shop.dao; import java.util.HashMap; import java.util.Map; import com.yangwei.shop.entity.Address; import com.yangwei.shop.entity.Pager; public class AddressDao extends BaseDao<Address> implements IAddressDao { @Override public void addAddress(Address address, int userId) { //1,略 根据userId去t_user表加载User信息 //2,将User设置到address中 //3,调用父类方法 添加 super.add(address); } @Override public void updateAddress(Address address) { super.update(address); } @Override public void deleteAddress(int id) { super.delete(Address.class, id); } @Override public Address loadAddress(int id) { return super.load(Address.class, id); } @Override public Pager<Address> findAddress(String name) { Map<String, Object> params=new HashMap<String, Object>(); if(name!=null && !"".equals(name)){ params.put("name", "%"+name+"%"); } return super.find(Address.class, params); } }
mybatis-basedao的实现的更多相关文章
- 开发基础框架:mybatis-3.2.8 +hibernate4.0+spring3.0+struts2.3
一:项目下载地址(点击 Source code(zip)) https://github.com/fzxblgong/frame_2014-12-15/releases 版本:v1.2大小:20M 二 ...
- 基于mybatis的BaseDao及BaseService深度结合(转)
原文地址:http://zhaoshijie.iteye.com/blog/2003209 关键字:Mybatis通用DAO设计封装(mybatis) 说明: mybatis默认分页机制为逻辑分页,所 ...
- 基于 Spring + Atomikos + Mybatis的多数据源配置(含有BaseDao,BaseService)
1.spring配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- Spring和Mybatis整合,配置文件
整合时除了未整合前spring.mybatis的必须包外还需要加入两个包 spring-jdbc-4.2.5.RELEASE.jar mybatis-spring-1.2.5.jar spring-j ...
- 每日一记-mybatis碰到的疑惑:String类型可以传入多个参数吗
碰到一个觉得很疑惑的问题,Mybatis的parameterType为String类型的时候,能够接收多个参数的吗? 背景 初学Mybatis的时候,看的教程和书籍上都是在说基本的数据类型如:int. ...
- 第一个spring、springmvc、mybatis、freemarker项目小知识(一)
1.持久层开发(Mybatis) 1.1 添加,非空字段必须给值,不是非空加判断,有值添加无值不添 1.2 删除,注意外键关系的级联删除.(事务传播行为) 1.3 更新,每个字段单独 ...
- MyBatis Generator作为maven插件自动生成增删改查代码及配置文件例子
什么是MyBatis Generator MyBatis Generator (MBG) 是一个Mybatis的代码生成器,可以自动生成一些简单的CRUD(插入,查询,更新,删除)操作代码,model ...
- mybatis 多个dao重名,根据namespace解析
在mybatis通过执行sql语句的方式是,用getSqlSession().xxx(param,..)方法来调用, 其中第一个参数就是dao mapper.xml文件的命名空间.id package ...
- Spring+Maven+Dubbo+MyBatis+Linner+Handlebars—Web开发环境搭建
本文主要分三部分,分别是:后台核心业务逻辑.桥梁辅助控制和前台显示页面. 本Web开发环境综合了多种工具,包括Maven包管理与编译工具.Dubbo分布式服务框架.MyBatis数据持久化工具.Lin ...
- springMVC + Spring + MyBatis 整合
整理下SSM(基于注解)的整合 1. web.xml 配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...
随机推荐
- CentOS自带mysql配置(密码更改、端口开放访问、添加进系统启动项)
前些天虚拟机安装好了CentOS6.1,但是自己想远程连接自带的mysql发现不知道如何改密码,于是谷歌一下,把结果记录下来,方便后期自己使用: 方法一: # /etc/init.d/mysql st ...
- Linux中的定时任务at、crontab
at at命令可以用来在某一时段执行一次任务,只会执行一次,不会重复执行. at命令是由atd服务来控制的,使用之前先查看atd服务是否正常: $ /etc/init.d/atd status * a ...
- 7.21.01 if语句
if语句 一个if语句包含一个布尔表达式和一条或多条语句. 语法 if语句的用语法如下: if(布尔表达式) { //如果布尔表达式为true将执行的语句 } 如果布尔表达式的值为true,则执行if ...
- sphinx随笔记了一下
sphinx笔记 一:下载中文版coreseek包1:解压后,将etc下的mysql.conf文件复制一份放到上级目录下,改名为sphinx.conf2:配置文件: 2.1:source配置数据源so ...
- 设计一个程序能够将某一个目录下面的所有文件名打印出来---File类的使用
,设计一个程序能够将某一个目录下面的所有文件名打印出来 运用到的方法有:返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录:list() 测试此抽象路径名表示的 ...
- Linux巩固记录(3) hadoop 2.7.4 环境搭建
由于要近期使用hadoop等进行相关任务执行,操作linux时候就多了 以前只在linux上配置J2EE项目执行环境,无非配置下jdk,部署tomcat,再通过docker或者jenkins自动部署上 ...
- jquery的2.0.3版本源码系列(2):21行-94行定义了一些变量和函数 jQuery=function(){}
2.1.bug通过索引查询 这里的#13335是bug的索引,如何查询呢? 第一步,浏览器地址栏输入"https://bugs.jquery.com/". 第二步,在网页的搜索框里 ...
- MyBatis --- 动态SQL、缓存机制
有的时候需要根据要查询的参数动态的拼接SQL语句 常用标签: - if:字符判断 - choose[when...otherwise]:分支选择 - trim[where,set]:字符串截取,其中w ...
- 红黑树的插入Java实现
package practice; public class TestMain { public static void main(String[] args) { int[] ao = {5, 1, ...
- 深入剖析ConcurrentHashMap二
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt200 我们关注的操作有:get,put,remove 这3个操作.对于哈希表 ...