springmvc+mybatis如何分层
2016-05-02 17:26
525 查看
通常情况下,我们之间调用mapper,spring会为我们注入其实现,很方便,mybatis也提供了一个generator供我们生成bean、dao接口等。但是总有一种感觉叫不爽,感觉除了bean和mapping.xml之外,dao接口有着共性,没有必要每一个都写一遍,共性的东东要提出来。下面就说一下怎么利用面向接口的思想进行提炼!
1、bean接口IModel
View Code
12、总结说明
有的人觉的这么写好麻烦啊,又是接口,又是泛型,还是基类的。他们觉得直接Service里面用mapper就行了,又简单又方便,想用哪个mapper就注入哪个mapper。想法有多好,耦合就有多高!
面向接口会让各模块之间的耦合程度很低,比如哪天你不想用mybatis了,只需要修改dao层的实现就可以了,service层不需要动!如果你service里有mybatis注入代码呢?如果service没有接口的话,controller估计也要改了,跟重做没有什么区别,也许更麻烦,面向接口让代码更规范,重用度更高。一句话,面向接口是各种设计模式的基础。
泛型让代码更简练,让共性成为共性,让特性更加特性,一目了然!
1、bean接口IModel
package com.jdw.service.impl; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Service; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.jdw.bean.Category; import com.jdw.dao.CategoryMapper; import com.jdw.dao.impl.CategoryDaoImpl; import com.jdw.service.CategoryService; @Service("categoryService") public class CategoryServicImpl extends BaseServiceImpl<Category, CategoryMapper, CategoryDaoImpl> implements CategoryService { @Override public void deleteByIds(String ids) { } @Override public Map<String, Object> query(String type, Integer pageNo, Integer pageSize) { pageNo = pageNo == null ? 1 : pageNo; pageSize = pageSize == null ? 10 : pageSize; PageHelper.startPage(pageNo, pageSize); List<Category> list = this.dao.selectCategoryByType(type); for (Category c : list) { System.out.println(c); } // 用PageInfo对结果进行包装 PageInfo<Category> page = new PageInfo<Category>(list); // 测试PageInfo全部属性 /* * System.out.println(page.getPageNum()); * System.out.println(page.getPageSize()); * System.out.println(page.getStartRow()); * System.out.println(page.getEndRow()); * System.out.println(page.getTotal()); * System.out.println(page.getPages()); * System.out.println(page.getFirstPage()); * System.out.println(page.getLastPage()); * System.out.println(page.isHasPreviousPage()); * System.out.println(page.isHasNextPage()); */ Map<String, Object> map = new HashMap<String, Object>(); map.put("total", page.getTotal()); map.put("rows", page.getList()); return map; } @Override public List<Category> getAll(Map<String, Object> map) { return this.dao.selectCategoryByPage(map); } }
View Code
12、总结说明
有的人觉的这么写好麻烦啊,又是接口,又是泛型,还是基类的。他们觉得直接Service里面用mapper就行了,又简单又方便,想用哪个mapper就注入哪个mapper。想法有多好,耦合就有多高!
面向接口会让各模块之间的耦合程度很低,比如哪天你不想用mybatis了,只需要修改dao层的实现就可以了,service层不需要动!如果你service里有mybatis注入代码呢?如果service没有接口的话,controller估计也要改了,跟重做没有什么区别,也许更麻烦,面向接口让代码更规范,重用度更高。一句话,面向接口是各种设计模式的基础。
泛型让代码更简练,让共性成为共性,让特性更加特性,一目了然!
相关文章推荐
- JAVA多线程之Synchronized关键字--对象锁的特点
- Eclipse 代码提示
- 码农小汪-Spring MVC 强大的数据绑定2
- 最精简的Java注解教程
- JAVA技术发展——你不知道的J2SE(五)
- JavaSE入门学习35:Java集合框架之List接口及其实现类ArrayList和LinkedList
- 深入理解java异常处理机制
- JDK源码学习(2)-TreeMap源码分析
- java并发编程(7)--Lock
- IT忍者神龟之Spring Task动态添加任务
- Java实现文件复制的四种方式
- JAVA SE 8 学习笔记(二)Stream API
- Java链接sql server并对它进行查询、增删改
- 《Java多线程编程核心技术》读书笔记
- Java InputStream、String、File相互转化
- java中Static&Final的使用方法,&&&Java中两个主要的抽象Abstract&&Implement
- Google Java编码规范
- maven+springmvc+easyui+fastjson+pagehelper
- RandomAccessFile类
- spring boot 异常处理