设为首页 收藏本站
查看: 1029|回复: 0

[经验分享] (转)Spring集成MyBatis进行项目开发(三)

[复制链接]

尚未签到

发表于 2016-11-28 07:00:25 | 显示全部楼层 |阅读模式
原文出处: http://wangjie2013.iyunv.com/blog/1996159
 Spring集成MyBatis进行项目开发(一)
     Spring集成MyBatis进行项目开发(二)
    上两章进行了相关环境的配置和测试,接下来是将继续这个样例系统的Dao层,service层和controller层。
    AppDao.java
Java代码   DSC0000.png


  • package com.pinche.statistic.dao;  
  •   
  • import java.util.List;  
  •   
  • import com.pinche.statistic.domain.Application;  
  •   
  • public interface AppDao {  
  •     boolean add(Application app);  
  •   
  •     boolean delete(String appAccount);  
  •   
  •     boolean update(Application app);  
  •   
  •     Application findByAppAccount(String appAccount);  
  •       
  •     List<Application> findAll();  
  • }  

 AppDaoImpl.java
Java代码  


  • package com.pinche.statistic.dao.impl;  
  •   
  • import java.util.List;  
  •   
  • import org.springframework.beans.factory.annotation.Autowired;  
  • import org.springframework.dao.DataAccessException;  
  • import org.springframework.stereotype.Repository;  
  •   
  • import com.pinche.statistic.dao.AppDao;  
  • import com.pinche.statistic.domain.Application;  
  • import com.pinche.statistic.mapper.ApplicationsMapper;  
  •   
  • @Repository  
  • public class AppDaoImpl implements AppDao {  
  •   
  •     @Autowired  
  •     private ApplicationsMapper mapper;  
  •       
  •     @Override  
  •     public boolean add(Application app) {  
  •         try {  
  •             mapper.add(app);  
  •             return true;  
  •         } catch (DataAccessException e) {  
  •             e.printStackTrace();  
  •         }  
  •         return false;  
  •     }  
  •   
  •     @Override  
  •     public boolean delete(String appAccount) {  
  •         try {  
  •             mapper.delete(appAccount);  
  •             return true;  
  •         } catch (DataAccessException e) {  
  •             e.printStackTrace();  
  •         }  
  •         return false;  
  •     }  
  •   
  •     @Override  
  •     public boolean update(Application app) {  
  •         try {  
  •             mapper.update(app);  
  •             return true;  
  •         } catch (DataAccessException e) {  
  •             e.printStackTrace();  
  •         }  
  •         return false;  
  •     }  
  •   
  •     @Override  
  •     public Application findByAppAccount(String appAccount) {  
  •         try {  
  •             Application findByAppAccount = mapper.findByAppAccount(appAccount);  
  •             return findByAppAccount;  
  •         } catch (DataAccessException e) {  
  •             e.printStackTrace();  
  •         }  
  •         return null;  
  •     }  
  •   
  •     @Override  
  •     public List<Application> findAll() {  
  •         try {  
  •             return mapper.findAll();  
  •         } catch (DataAccessException e) {  
  •             e.printStackTrace();  
  •         }  
  •         return null;  
  •     }  
  • }  

 
    自行设计的DAO层对象容器(在DAO对象很多时,如果在service层要调用对应的DAO还得手动注入,通过引用这个DAO层对象容器,可以实现在需要使用DAO时迅速找需要的DAO,省去了繁杂的手动注入,而且spring默认的bean都是单例的,无论在何处注入一个实体bean其实都是同一个。这样做更方便):
Java代码  


  • package com.pinche.statistic.dao;  
  •   
  • import java.lang.reflect.Field;  
  •   
  • import javax.annotation.PostConstruct;  
  •   
  • import org.slf4j.Logger;  
  • import org.slf4j.LoggerFactory;  
  • import org.springframework.beans.factory.annotation.Autowired;  
  • import org.springframework.stereotype.Repository;  
  •   
  • @Repository  
  • public class BaseDAL {  
  •   
  •     private static final Logger logger = LoggerFactory.getLogger(BaseDAL.class);  
  •       
  •     @Autowired  
  •     private AppDao _appDao;  
  •     public static AppDao appDao;  
  •   
  •     @Autowired  
  •     private MetaDataDao _metaDataDao;  
  •     public static MetaDataDao metaDataDao;  
  •   
  •     @Autowired  
  •     private DDLManager _DDLManager;  
  •     public static DDLManager DDLManager;  
  •       
  •     @Autowired  
  •     private AnalyzeDao _analyzeDao;  
  •     public static AnalyzeDao analyzeDao;  
  •       
  •     @Autowired  
  •     private DialstatisticsDao _dialstatisticsDao;  
  •     public static DialstatisticsDao dialstatisticsDao;  
  •   
  •     @PostConstruct  
  •     public void init() {  
  •         long start = System.currentTimeMillis();  
  •         logger.debug("start init BaseDAL ...");  
  •         try {  
  •   
  •             Field[] fields = this.getClass().getDeclaredFields();  
  •   
  •             for (int i = 0; i < fields.length; i++) {  
  •                 String fieldname = fields.getName();  
  •                 if (fieldname.startsWith("_")) {  
  •                     String sfieldname = fieldname.substring(1);  
  •                     Field sfield = this.getClass().getDeclaredField(sfieldname);  
  •                     sfield.setAccessible(true);  
  •                     sfield.set(this, fields.get(this));  
  •                 }  
  •             }  
  •             logger.debug("init BaseDAL OVER, consume = {}ms",  
  •                     System.currentTimeMillis() - start);  
  •         } catch (IllegalArgumentException e) {  
  •             e.printStackTrace();  
  •         } catch (NoSuchFieldException e) {  
  •             e.printStackTrace();  
  •         } catch (SecurityException e) {  
  •             e.printStackTrace();  
  •         } catch (IllegalAccessException e) {  
  •             e.printStackTrace();  
  •         }  
  •     }  
  • }  

 
如果使用了以上的层管理容器,如果要在容器中添加一个DAO(例如:DemoDao),只需在这个容器中添加一个这样的声明:
Java代码  


  • @Autowired  
  • private DemoDao _demoDao;  
  • public static DemoDao demoDao;  

 
    好了下面是service层定义的接口:
    AppService.java
Java代码  


  • package com.pinche.statistic.service;  
  •   
  • import java.util.List;  
  •   
  • import com.pinche.statistic.domain.Application;  
  •   
  • /** 
  •  * @author JACKWANG 
  •  * @since Dec 23, 2013 
  •  */  
  • public interface AppService {  
  •       
  •     Application find(String appAccount);  
  •       
  •     boolean update(Application app);  
  •       
  •     boolean setDisable(String appAccount);  
  •       
  •     boolean setEnable(String appAccount);  
  •       
  •     List<Application> findAll();  
  •       
  • }  

 
    AppServiceImpl.java : AppService的实现类:
Java代码  


  • package com.pinche.statistic.service.impl;  
  •   
  • import java.util.List;  
  •   
  • import org.slf4j.Logger;  
  • import org.slf4j.LoggerFactory;  
  • import org.springframework.stereotype.Service;  
  •   
  • import com.pinche.statistic.dao.BaseDAL;  
  • import com.pinche.statistic.domain.Application;  
  • import com.pinche.statistic.service.AppService;  
  • import com.pinche.statistic.utils.SystemUtils;  
  •   
  • /** 
  •  * @author JACKWANG 
  •  * @since Dec 23, 2013 
  •  */  
  • @Service  
  • public class AppServiceImpl implements AppService {  
  •   
  •     private static final Logger logger = LoggerFactory  
  •             .getLogger(AppServiceImpl.class);  
  •   
  •     @Override  
  •     public Application find(String appAccount) {  
  •         return BaseDAL.appDao.findByAppAccount(appAccount);  
  •     }  
  •   
  •       
  •     @Override  
  •     public boolean update(Application app) {  
  •         String appAccount = app.getAppAccount();  
  •         if (appAccount == null && "".equals(appAccount)) {  
  •             return true;  
  •         }  
  •         return BaseDAL.appDao.update(app);  
  •     }  
  •   
  •     @Override  
  •     public boolean setDisable(String appAccount) {  
  •         Application app = new Application();  
  •         app.setAppAccount(appAccount);  
  •         app.setIsDisable(Application.APP_DISABLE);  
  •         return BaseDAL.appDao.update(app);  
  •     }  
  •   
  •     @Override  
  •     public boolean setEnable(String appAccount) {  
  •         Application app = new Application();  
  •         app.setAppAccount(appAccount);  
  •         app.setIsDisable(Application.APP_ENABLE);  
  •         return BaseDAL.appDao.update(app);  
  •     }  
  •   
  •     @Override  
  •     public List<Application> findAll() {  
  •         return BaseDAL.appDao.findAll();  
  •     }  
  • }  

   哈哈,使用层对象管理容器是不是很方便。通过一个引用就能获得所有的DAO支持。所以我在service层也构建了一个service层对象管理容器BaseBLL:
BaseBLL.java:
Java代码  


  • package com.pinche.statistic.service;  
  •   
  • import java.lang.reflect.Field;  
  •   
  • import javax.annotation.PostConstruct;  
  •   
  • import org.slf4j.Logger;  
  • import org.slf4j.LoggerFactory;  
  • import org.springframework.beans.factory.annotation.Autowired;  
  • import org.springframework.stereotype.Service;  
  •   
  • /** 
  •  * @author JACKWANG 
  •  * @since Dec 23, 2013 
  •  */  
  • @Service  
  • public class BaseBLL {  
  •       
  •     private static final Logger logger = LoggerFactory.getLogger(BaseBLL.class);  
  •       
  •     @Autowired  
  •     private AnalyzeService _analyzeService;  
  •     public static AnalyzeService analyzeService;  
  •   
  •     @Autowired  
  •     private AppService _appService;  
  •     public static AppService appService;  
  •   
  •     @Autowired  
  •     private MetaDataService _metaDataService;  
  •     public static MetaDataService metaDataService;  
  •   
  •     @PostConstruct  
  •     public void init() {  
  •         long start = System.currentTimeMillis();  
  •         logger.debug("start init BaseBLL ...");  
  •         try {  
  •   
  •             Field[] fields = this.getClass().getDeclaredFields();  
  •   
  •             for (int i = 0; i < fields.length; i++) {  
  •                 String fieldname = fields.getName();  
  •                 if (fieldname.startsWith("_")) {  
  •                     String sfieldname = fieldname.substring(1);  
  •                     Field sfield = this.getClass().getDeclaredField(sfieldname);  
  •                     sfield.setAccessible(true);  
  •                     sfield.set(this, fields.get(this));  
  •                 }  
  •             }  
  •             logger.debug("init BaseBLL OVER, consume = {}ms",  
  •                     System.currentTimeMillis() - start);  
  •         } catch (IllegalArgumentException e) {  
  •             e.printStackTrace();  
  •         } catch (NoSuchFieldException e) {  
  •             e.printStackTrace();  
  •         } catch (SecurityException e) {  
  •             e.printStackTrace();  
  •         } catch (IllegalAccessException e) {  
  •             e.printStackTrace();  
  •         }  
  •     }  
  •   
  • }  

   
    好了下面应该是controller层的编写了,但是由于笔者以上的代码只是摘录了系统中的部分,而在controller中涉及到其他的内容,如果直接摘录可能和以上的代码衔接不上。所以这里就不进行了controller层的具体介绍了。本系统controller层使用的是SpringMVC,开发效率一级赞。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306299-1-1.html 上篇帖子: 初学者使用MyBatis中遇到的问题 下篇帖子: mybatis+spring mvc 完美整合方案 查询,保存,更新,删除自动生成
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表