博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis-basedao的实现
阅读量:4625 次
发布时间:2019-06-09

本文共 6608 字,大约阅读时间需要 22 分钟。

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
{ 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
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
clazz,int id){ return this.load(clazz.getName()+"load", id); } /** * 根据指定的多个条件获取一条记录(最通用) */ public T load(String sqlId,Map
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
find(Class
clazz,Map
params){ return this.find(clazz.getName()+".find", params); } /** * 有分页的查询 (自行指定sqlId) */ public Pager
find(String sqlId,Map
params){ int pageOffset=SystemContext.getPageOffset(); int pageSize=SystemContext.getPageSize(); String order=SystemContext.getOrder(); String sort=SystemContext.getSort(); Pager
pages=new Pager
(); SqlSession session=null; try { session = MyBatisUtil.createSession(); if(params==null) params=new HashMap
(); params.put("pageOffset", pageOffset); params.put("pageSize", pageSize); params.put("order", order); params.put("sort", sort); //约定 namespace值是该实体类的全路径,并且所有的分页查询都是find List
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
list(Class
clazz,Map
params){ return this.list(clazz.getName()+".list", params); } /** * 不带分页的查询 ,自行指定sqlId * 排序依然带着 */ public List
list(String sqlId,Map
params){ String order=SystemContext.getOrder(); String sort=SystemContext.getSort(); List
list=null; SqlSession session=null; try { session = MyBatisUtil.createSession(); if(params==null) params=new HashMap
(); params.put("order", order); params.put("sort", sort); //约定 namespace值是该实体类的全路径,并且所有的分页查询都是find list=session.selectList(sqlId, params); } finally{ MyBatisUtil.closeSession(session); } return list; }}

部分mapper.xml

insert into t_address (name,phone,postcode,user_id) value (#{name},#{phone},#{postcode},#{user.id})
update t_address set name=#{name},phone=#{phone},postcode=#{postcode} where id=#{id}
delete from t_address where id=#{id}

再看看我们的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
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
findAddress(String name) { Map
params=new HashMap
(); if(name!=null && !"".equals(name)){ params.put("name", "%"+name+"%"); } return super.find(Address.class, params); } }

 

转载于:https://www.cnblogs.com/yangw/p/3319290.html

你可能感兴趣的文章
Spring Framework 3.2 RC1 发布
查看>>
基于ios开发点餐系统应用(附带源码)
查看>>
Xenia and Weights(深度优先搜索)
查看>>
文件包含漏洞进阶篇
查看>>
JavaScript的self和this使用小结
查看>>
CSS3.0:透明度 Opacity
查看>>
Arduino Wire.h(IIC/ I2C)语法
查看>>
web高并发的解决方案
查看>>
OC中的NSNumber、NSArray、NSString的常用方法
查看>>
android 用ImageSwitcher+Gallery实现图片浏览效果 分类: ...
查看>>
STM32里面的一些小函数——assert_param,PUTCHAR_PROTOTYPE
查看>>
Java分布式锁的三种实现方案(redis)
查看>>
运行客户端程序报读取配置文件出错的解决方案
查看>>
day 5 - 2 字典(dict)练习
查看>>
微引擎的自定义菜单40063错误解决
查看>>
JAVA wait(), notify(),sleep具体解释
查看>>
数据挖掘十大经典算法
查看>>
WebService原理
查看>>
【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠
查看>>
js动态删除div元素
查看>>