`
long272449358
  • 浏览: 65782 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

(转)Spring集成MyBatis进行项目开发(三)

    博客分类:
  • Java
阅读更多

原文出处: http://wangjie2013.iteye.com/blog/1996159

 Spring集成MyBatis进行项目开发(一)

     Spring集成MyBatis进行项目开发(二)

    上两章进行了相关环境的配置和测试,接下来是将继续这个样例系统的Dao层,service层和controller层。

    AppDao.java

Java代码  收藏代码
  1. package com.pinche.statistic.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.pinche.statistic.domain.Application;  
  6.   
  7. public interface AppDao {  
  8.     boolean add(Application app);  
  9.   
  10.     boolean delete(String appAccount);  
  11.   
  12.     boolean update(Application app);  
  13.   
  14.     Application findByAppAccount(String appAccount);  
  15.       
  16.     List<Application> findAll();  
  17. }  

 AppDaoImpl.java

Java代码  收藏代码
  1. package com.pinche.statistic.dao.impl;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.springframework.beans.factory.annotation.Autowired;  
  6. import org.springframework.dao.DataAccessException;  
  7. import org.springframework.stereotype.Repository;  
  8.   
  9. import com.pinche.statistic.dao.AppDao;  
  10. import com.pinche.statistic.domain.Application;  
  11. import com.pinche.statistic.mapper.ApplicationsMapper;  
  12.   
  13. @Repository  
  14. public class AppDaoImpl implements AppDao {  
  15.   
  16.     @Autowired  
  17.     private ApplicationsMapper mapper;  
  18.       
  19.     @Override  
  20.     public boolean add(Application app) {  
  21.         try {  
  22.             mapper.add(app);  
  23.             return true;  
  24.         } catch (DataAccessException e) {  
  25.             e.printStackTrace();  
  26.         }  
  27.         return false;  
  28.     }  
  29.   
  30.     @Override  
  31.     public boolean delete(String appAccount) {  
  32.         try {  
  33.             mapper.delete(appAccount);  
  34.             return true;  
  35.         } catch (DataAccessException e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.         return false;  
  39.     }  
  40.   
  41.     @Override  
  42.     public boolean update(Application app) {  
  43.         try {  
  44.             mapper.update(app);  
  45.             return true;  
  46.         } catch (DataAccessException e) {  
  47.             e.printStackTrace();  
  48.         }  
  49.         return false;  
  50.     }  
  51.   
  52.     @Override  
  53.     public Application findByAppAccount(String appAccount) {  
  54.         try {  
  55.             Application findByAppAccount = mapper.findByAppAccount(appAccount);  
  56.             return findByAppAccount;  
  57.         } catch (DataAccessException e) {  
  58.             e.printStackTrace();  
  59.         }  
  60.         return null;  
  61.     }  
  62.   
  63.     @Override  
  64.     public List<Application> findAll() {  
  65.         try {  
  66.             return mapper.findAll();  
  67.         } catch (DataAccessException e) {  
  68.             e.printStackTrace();  
  69.         }  
  70.         return null;  
  71.     }  
  72. }  

 

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

Java代码  收藏代码
  1. package com.pinche.statistic.dao;  
  2.   
  3. import java.lang.reflect.Field;  
  4.   
  5. import javax.annotation.PostConstruct;  
  6.   
  7. import org.slf4j.Logger;  
  8. import org.slf4j.LoggerFactory;  
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10. import org.springframework.stereotype.Repository;  
  11.   
  12. @Repository  
  13. public class BaseDAL {  
  14.   
  15.     private static final Logger logger = LoggerFactory.getLogger(BaseDAL.class);  
  16.       
  17.     @Autowired  
  18.     private AppDao _appDao;  
  19.     public static AppDao appDao;  
  20.   
  21.     @Autowired  
  22.     private MetaDataDao _metaDataDao;  
  23.     public static MetaDataDao metaDataDao;  
  24.   
  25.     @Autowired  
  26.     private DDLManager _DDLManager;  
  27.     public static DDLManager DDLManager;  
  28.       
  29.     @Autowired  
  30.     private AnalyzeDao _analyzeDao;  
  31.     public static AnalyzeDao analyzeDao;  
  32.       
  33.     @Autowired  
  34.     private DialstatisticsDao _dialstatisticsDao;  
  35.     public static DialstatisticsDao dialstatisticsDao;  
  36.   
  37.     @PostConstruct  
  38.     public void init() {  
  39.         long start = System.currentTimeMillis();  
  40.         logger.debug("start init BaseDAL ...");  
  41.         try {  
  42.   
  43.             Field[] fields = this.getClass().getDeclaredFields();  
  44.   
  45.             for (int i = 0; i < fields.length; i++) {  
  46.                 String fieldname = fields[i].getName();  
  47.                 if (fieldname.startsWith("_")) {  
  48.                     String sfieldname = fieldname.substring(1);  
  49.                     Field sfield = this.getClass().getDeclaredField(sfieldname);  
  50.                     sfield.setAccessible(true);  
  51.                     sfield.set(this, fields[i].get(this));  
  52.                 }  
  53.             }  
  54.             logger.debug("init BaseDAL OVER, consume = {}ms",  
  55.                     System.currentTimeMillis() - start);  
  56.         } catch (IllegalArgumentException e) {  
  57.             e.printStackTrace();  
  58.         } catch (NoSuchFieldException e) {  
  59.             e.printStackTrace();  
  60.         } catch (SecurityException e) {  
  61.             e.printStackTrace();  
  62.         } catch (IllegalAccessException e) {  
  63.             e.printStackTrace();  
  64.         }  
  65.     }  
  66. }  

 

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

Java代码  收藏代码
  1. @Autowired  
  2. private DemoDao _demoDao;  
  3. public static DemoDao demoDao;  

 

    好了下面是service层定义的接口:

    AppService.java

Java代码  收藏代码
  1. package com.pinche.statistic.service;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.pinche.statistic.domain.Application;  
  6.   
  7. /** 
  8.  * @author JACKWANG 
  9.  * @since Dec 23, 2013 
  10.  */  
  11. public interface AppService {  
  12.       
  13.     Application find(String appAccount);  
  14.       
  15.     boolean update(Application app);  
  16.       
  17.     boolean setDisable(String appAccount);  
  18.       
  19.     boolean setEnable(String appAccount);  
  20.       
  21.     List<Application> findAll();  
  22.       
  23. }  

 

    AppServiceImpl.java : AppService的实现类:

Java代码  收藏代码
  1. package com.pinche.statistic.service.impl;  
  2.   
  3. import java.util.List;  
  4.   
  5. import org.slf4j.Logger;  
  6. import org.slf4j.LoggerFactory;  
  7. import org.springframework.stereotype.Service;  
  8.   
  9. import com.pinche.statistic.dao.BaseDAL;  
  10. import com.pinche.statistic.domain.Application;  
  11. import com.pinche.statistic.service.AppService;  
  12. import com.pinche.statistic.utils.SystemUtils;  
  13.   
  14. /** 
  15.  * @author JACKWANG 
  16.  * @since Dec 23, 2013 
  17.  */  
  18. @Service  
  19. public class AppServiceImpl implements AppService {  
  20.   
  21.     private static final Logger logger = LoggerFactory  
  22.             .getLogger(AppServiceImpl.class);  
  23.   
  24.     @Override  
  25.     public Application find(String appAccount) {  
  26.         return BaseDAL.appDao.findByAppAccount(appAccount);  
  27.     }  
  28.   
  29.       
  30.     @Override  
  31.     public boolean update(Application app) {  
  32.         String appAccount = app.getAppAccount();  
  33.         if (appAccount == null && "".equals(appAccount)) {  
  34.             return true;  
  35.         }  
  36.         return BaseDAL.appDao.update(app);  
  37.     }  
  38.   
  39.     @Override  
  40.     public boolean setDisable(String appAccount) {  
  41.         Application app = new Application();  
  42.         app.setAppAccount(appAccount);  
  43.         app.setIsDisable(Application.APP_DISABLE);  
  44.         return BaseDAL.appDao.update(app);  
  45.     }  
  46.   
  47.     @Override  
  48.     public boolean setEnable(String appAccount) {  
  49.         Application app = new Application();  
  50.         app.setAppAccount(appAccount);  
  51.         app.setIsDisable(Application.APP_ENABLE);  
  52.         return BaseDAL.appDao.update(app);  
  53.     }  
  54.   
  55.     @Override  
  56.     public List<Application> findAll() {  
  57.         return BaseDAL.appDao.findAll();  
  58.     }  
  59. }  

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

BaseBLL.java:

Java代码  收藏代码
  1. package com.pinche.statistic.service;  
  2.   
  3. import java.lang.reflect.Field;  
  4.   
  5. import javax.annotation.PostConstruct;  
  6.   
  7. import org.slf4j.Logger;  
  8. import org.slf4j.LoggerFactory;  
  9. import org.springframework.beans.factory.annotation.Autowired;  
  10. import org.springframework.stereotype.Service;  
  11.   
  12. /** 
  13.  * @author JACKWANG 
  14.  * @since Dec 23, 2013 
  15.  */  
  16. @Service  
  17. public class BaseBLL {  
  18.       
  19.     private static final Logger logger = LoggerFactory.getLogger(BaseBLL.class);  
  20.       
  21.     @Autowired  
  22.     private AnalyzeService _analyzeService;  
  23.     public static AnalyzeService analyzeService;  
  24.   
  25.     @Autowired  
  26.     private AppService _appService;  
  27.     public static AppService appService;  
  28.   
  29.     @Autowired  
  30.     private MetaDataService _metaDataService;  
  31.     public static MetaDataService metaDataService;  
  32.   
  33.     @PostConstruct  
  34.     public void init() {  
  35.         long start = System.currentTimeMillis();  
  36.         logger.debug("start init BaseBLL ...");  
  37.         try {  
  38.   
  39.             Field[] fields = this.getClass().getDeclaredFields();  
  40.   
  41.             for (int i = 0; i < fields.length; i++) {  
  42.                 String fieldname = fields[i].getName();  
  43.                 if (fieldname.startsWith("_")) {  
  44.                     String sfieldname = fieldname.substring(1);  
  45.                     Field sfield = this.getClass().getDeclaredField(sfieldname);  
  46.                     sfield.setAccessible(true);  
  47.                     sfield.set(this, fields[i].get(this));  
  48.                 }  
  49.             }  
  50.             logger.debug("init BaseBLL OVER, consume = {}ms",  
  51.                     System.currentTimeMillis() - start);  
  52.         } catch (IllegalArgumentException e) {  
  53.             e.printStackTrace();  
  54.         } catch (NoSuchFieldException e) {  
  55.             e.printStackTrace();  
  56.         } catch (SecurityException e) {  
  57.             e.printStackTrace();  
  58.         } catch (IllegalAccessException e) {  
  59.             e.printStackTrace();  
  60.         }  
  61.     }  
  62.   
  63. }  

   

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics