`
wangjie2013
  • 浏览: 174152 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

 

    上一章Spring集成MyBatis进行项目开发(一)已经介绍了spring3mybatis整合的配置,接下来是一个项目里面的部分代码:

    Application.java是下面会用到的一个实体bean:

 

public class Application {

	public static final int APP_DISABLE = 0;
	public static final int APP_ENABLE = 1;
	private Integer id;
	private String appAccount;//每个app对应一个账户标识;对应生成的数据表
	private String appName;
	private String appICON;
	private String appDesc;
	private String appURL;
	private Date createTime;
	private int isDisable;//'是否前台显示:0显示,1不显示' 
}

    getter 和setter略。

 

 

    首先我们要编写一个与mapper.xml文件映射的接口文件,mybatis会将这个接口文件和对应的mapper文件中的sql语句关联,自动实现这个接口文件。在之后的开发中我们直接调用这个接口文件就可以了,因为内存中已经有接口相对应的实例了。

ApplicationsMapper.xml文件:

 

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.pinche.statistic.mapper.ApplicationsMapper">

	<insert id="add" parameterType="Application" useGeneratedKeys="true"
		keyProperty="id">
		INSERT INTO applications
		(appName,appAccount,appICON,appDesc,appURL,createTime)
		VALUES
		(#{appName},#{appAccount},#{appICON},#{appDesc},#{appURL},#{createTime})
	</insert>

	<delete id="delete" parameterType="String">
		DELETE FROM applications WHERE
		appAccount = #{appAccount}
	</delete>

	<update id="update" parameterType="Application">
		UPDATE applications
		<set>
			<if test=" appName != '' and appName != null ">
				appName = #{appName},
			</if>
			<if test=" appICON != '' and appICON != null ">
				appICON = #{appICON},
			</if>
			<if test=" appDesc != '' and appDesc != null ">
				appDesc = #{appDesc},
			</if>
			<if test=" appURL != '' and appURL != null ">
				appURL = #{appURL},
			</if>
			<if test=" isDisable != -1 ">
				isDisable = #{isDisable}
			</if>
		</set>
		WHERE appAccount = #{appAccount}
	</update>

	<select id="findByAppAccount" resultType="Application"
		parameterType="String">
		select * from applications where appAccount =
		#{appAccount}
	</select>

	<select id="findAll" resultType="Application">
		select * from applications
	</select>
</mapper> 

    对ApplicationsMapper.xml文件的配置必须要注意的是它的命名空间是必须的,而且是对应接口文件的全名!并且每个sql语句的id属性和接口文件中的方法名一致!!

 

    下面是ApplicationsMapper.java文件,也就是对应的接口文件:

 

package com.pinche.statistic.mapper;

import java.util.List;

import com.pinche.statistic.domain.Application;

public interface ApplicationsMapper {

	void add(Application app);

	void delete(String appAccount);

	void update(Application app);

	Application findByAppAccount(String appAccount);

	List<Application> findAll();
}

 

 

    通过以上的的配置,大家可以在test中测试一下自己的代码了:

	@Test
	public void testCreateTable() {
		ApplicationContext aContext = new FileSystemXmlApplicationContext("src/main/webapp/WEB-INF/applicationContext.xml");
		ApplicationsMapper mapper = (ApplicationsMapper) aContext.getBean(ApplicationsMapper.class);
		
		Application app = new Application();
		app.setAppAccount("androidApp");
		
		mapper.add(app);
	}

 

    以上测试了add方法,其他的测试方法大家可以照着写一写。如果插入成功恭喜,你的环境已经搭好了。

 

    接下来是将继续这个样例系统的Dao层,service层和controller层。

    这个dao层吧,项目中就是这么用的,不过现在通过大家的指正,mybatis提供了@param来解决多参数问题,ok,这么看来这个Dao层的确不需要了。

 

    AppDao.java:

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

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其实都是同一个。这样做更方便):

 

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[i].getName();
				if (fieldname.startsWith("_")) {
					String sfieldname = fieldname.substring(1);
					Field sfield = this.getClass().getDeclaredField(sfieldname);
					sfield.setAccessible(true);
					sfield.set(this, fields[i].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),只需在这个容器中添加一个这样的声明:

 

	@Autowired
	private DemoDao _demoDao;
	public static DemoDao demoDao;

   

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

    AppService.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的实现类:

 

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:

 

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[i].getName();
				if (fieldname.startsWith("_")) {
					String sfieldname = fieldname.substring(1);
					Field sfield = this.getClass().getDeclaredField(sfieldname);
					sfield.setAccessible(true);
					sfield.set(this, fields[i].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
0
分享到:
评论
1 楼 Inmethetiger 2013-12-30  
DaoImpl 还需要写吗?

相关推荐

    Java项目框架-SpringMVC+Spring+Mybatis集成开发环境

    SpringMVC+Spring+Mybatis集成开发环境SpringMVC+Spring+Mybatis集成开发环境SpringMVC+Spring+Mybatis集成开发环境SpringMVC+Spring+Mybatis集成开发环境SpringMVC+Spring+Mybatis集成开发环境SpringMVC+Spring+...

    Spring集成Mybatis所需jar包

    在Java开发领域,Spring...以上就是Spring集成Mybatis所需的jar包及集成过程中的关键配置和步骤。正确配置这些组件,可以让我们在享受Spring的便利性的同时,充分利用MyBatis的灵活性和高效性,实现高质量的Java应用。

    Spring集成MyBatis完整实例(分享)

    在本文中,我们将探讨如何集成Spring框架与MyBatis,以构建一个完整的实例。这个实例是一个图书管理系统的简单实现,涉及的技术栈包括Spring...这有助于开发者深入理解Spring和MyBatis的集成,以及Web应用的开发流程。

    SpringMVC+Spring+Mybatis集成开发环境

    在IT行业中,SpringMVC、Spring和Mybatis是三大核心框架,它们的集成使用是Java Web开发中的常见实践。这个集成开发环境旨在提供一个高效、灵活的开发平台,以实现业务逻辑与数据访问的分离,提高代码的可维护性和可...

    springMvc+spring+Mybatis 实战案例 实用!

    Spring MVC、Spring 和 MyBatis 是Java开发领域中三大核心框架,它们的组合在实际项目中广泛应用,构建了企业级Web应用的后端基础架构。本实战案例将深入讲解这三个框架如何协同工作,以实现高效的数据处理和业务...

    mybatis开发指南 spring集成mybatis

    spring集成mybatis,资源包括: 中文版MyBatis 3 User Guide.pdf mybatis-spring集成指导.pdf Mybatis.pdf mybatis-3.2.8.jar mybatis-spring-1.2.2.jar

    Windchill+spring+mybatis

    为了更好地利用Windchill的功能,并将其与其他系统(如Spring框架和MyBatis等)进行有效集成,本文将详细介绍如何在Windchill环境中配置并使用Spring+MyBatis框架。 #### 二、Spring+MyBatis简介 Spring框架是一种...

    spring整合mybatis简单项目

    在本项目中,“Spring整合Mybatis简单项目”旨在教授初学者如何将两个流行的Java框架——Spring和Mybatis结合,以实现一个简单的影视资源管理系统。这个系统可能会包括资源的增删改查、分类管理等功能,帮助用户高效...

    spring_mybatis 整合jar包

    在Java开发领域,Spring框架和MyBatis框架的整合是常见的数据访问技术组合。Spring作为一个全面的开源应用框架,提供依赖注入(DI)和面向切面编程(AOP)等功能,而MyBatis则是一个轻量级的持久层框架,专注于SQL...

    Spring 集成Mybatis 所需要的JAR

    ### 三、Spring集成Mybatis的重要性 在实际的软件开发过程中,Spring与Mybatis的结合使用非常普遍。这种集成不仅可以提高开发效率,还能增强应用程序的性能和稳定性。通过Spring管理Mybatis的SqlSessionFactory或...

    Spring集成MyBatis简单demo

    本篇将详细讲解如何将这两个框架进行集成,创建一个简单的Spring MyBatis demo。 首先,我们需要在项目中引入Spring和MyBatis的相关依赖。通常,这可以通过Maven或Gradle的配置文件来完成。对于Maven,可以在pom....

    Spring集成Mybatis所需所有jar

    Spring 和 MyBatis 是两个非常流行的 Java 开发框架,它们分别负责依赖注入和数据库操作。Spring 提供了一个全面的应用程序开发框架,而 MyBatis 是一个轻量级的持久层框架,它简化了 SQL 查询与Java 代码的绑定。...

    《spring+mybatis 企业应用实战》源码、类库全资料

    Spring 和 MyBatis 集成后,可以发挥各自的优势,Spring 负责业务逻辑的组织和管理,MyBatis 负责数据的CRUD操作。通常,我们会使用 Spring 的 DataSource、TransactionManager 配合 MyBatis 进行数据访问,实现事务...

    spring-mybatis集成jar包以及文档

    在实际开发中,还应注意一些最佳实践,例如使用 Spring Boot 进行自动化配置,或者使用 MyBatis 的注解方式来替代 XML 映射文件,以简化开发流程。此外,还可以考虑引入 MyBatis 的 PageHelper 分页插件,提升数据...

    spring mvc mybatis 整合源码,带数据库脚本,带详细注释

    - 集成MyBatis:引入MyBatis的依赖,配置SqlSessionFactoryBean,创建MapperScannerConfigurer扫描Mapper接口。 - 创建MyBatis的Mapper接口和XML配置文件,定义SQL查询和操作。 - 在Spring MVC的Controller中,...

    struts2+spring+mybatis+easyui的实现

    总的来说,"struts2+spring+mybatis+easyui"的实现是一个标准的Java Web项目结构,它利用Maven进行构建管理,通过整合四个组件,实现了后端的业务逻辑处理、数据访问和前端的用户界面展示。这种架构在实际开发中具有...

    spring+mybatis-plus集成

    在Java Web开发中,Spring框架和MyBatis-Plus的集成是常见的数据访问技术组合。Spring作为一款强大的轻量级框架,提供了依赖注入、AOP(面向切面编程)等功能,而MyBatis-Plus则是在MyBatis的基础上进行扩展,简化了...

    springmvc+spring+mybatis开发框架搭建代码,已使用,完美运行。

    SSM(Spring MVC + Spring + MyBatis)是Java Web开发中常见的三层架构组合,它将Spring MVC作为表现层框架,Spring作为业务层容器,MyBatis作为数据访问层框架。下面将详细介绍这三个组件以及它们如何协同工作。 *...

    spring4.3 mybatis3.4 整合

    总的来说,这个项目展示了如何利用Spring 4.3和MyBatis 3.4进行有效的集成,构建一个多模块、基于Maven的Web应用程序,提供了完整的SSM整合示例,有助于开发者理解和实践企业级应用的开发流程。

Global site tag (gtag.js) - Google Analytics