1. 概述
上篇我们介绍了构建Activiti的环境基础及与Spring的整合,本篇则着重介绍Activiti中的底层ORM框架,以使得我们在后续的扩展Activiti的实现提供了基础的数据库访问功能。
2. 引入MyBatis依赖库
增加mybatis-spring依赖包,如上图所示,具体的pom.xml文件如附件中的文件所示,在这里不贴代码了。
3. 配置MyBatis与Spring的基础配置组件
MyBatis已经提供了与Spring的整合,其依赖包为mybatis-spring,具体整合如下连接所示:
http://mybatis.github.io/spring/zh/
3.1. 配置SqlSessonFactoryBean及事务管理
<!-- Mybatis的SessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath*:com/hotent/**/mapping/*.xml"/> </bean>
【说明】其中mapperLocations指向Mybatis的Mapping XML文件
3.2 编写MyBatis基础访问类
我们提供数据库访问的底层的基础封装,如CRUD的处理,借助JAVA的代码模板功能,可以满足所有的子类实现数据库的基础访问处理功能。如下所示:
3.2.1数据库分页实现
只需要接收其分页的页码与页大小就可以实现分页处理,鉴于此,借用mbatis的分页的rowbounds,传给mybatis的本身底层的封装则可以。若需要支持更多的不同数据库的有效分页,本文不作介绍,宏天的BPM X3产品有更深入的使用及扩展。
package com.hotent.page; import org.apache.ibatis.session.RowBounds; /** * * <pre> * 描述:数据库分页类 * 构建组:activiti * 作者:csx * 日期:2014年5月12日-下午12:18:43 * </pre> */ public class DefaultPage extends RowBounds{ /** * 最多显示页码数 */ public static final int DEFAULT_PAGE_SIZE = 20; //页码大小 private Integer pageSize=DEFAULT_PAGE_SIZE; //总记录数 private Integer totalItems=0; //当前页码 private Integer pageNo=1; private boolean isShowTotal=true; public DefaultPage() { } public DefaultPage(Integer pageNo,Integer pageSize){ this.pageNo=pageNo; this.pageSize=pageSize; } @Override public int getOffset() { return getStartIndex(); } @Override public int getLimit() { return getPageSize(); } public Integer getStartIndex(){ return (pageNo-1)*pageSize; } public Integer getPageSize() { return pageSize; } public Integer getTotalItems() { return totalItems; } public void setTotalItems(Integer totalItems) { this.totalItems = totalItems; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } public Integer getPageNo() { return pageNo; } public void setPageNo(Integer pageNo) { this.pageNo = pageNo; } public boolean isShowTotal() { return isShowTotal; } public void setShowTotal(boolean isShowTotal) { this.isShowTotal = isShowTotal; } }
3.2.2 IDAO 接口
package com.hotent.dao; import java.io.Serializable; import java.util.List; import com.hotent.page.DefaultPage; /** * * <pre> * 描述:TODO * 构建组:activiti * 作者:csx * </pre> */ public interface IDao<T,PK extends Serializable> { /** * 按ID获取实体 * @param id * @return */ public T get(PK id); /** * 按ID删除实体 * @param id */ public void remove(PK id); /** * 按ID创建实体 * @param entity */ public void create(T entity); /** * 更新实体 * @param entity */ public void update(T entity); /** * 查询所有实体列表 * @return */ public List<T> getAll(); /** * 按分页查询所有实体 * @param page * @return */ public List<T> getAllByPage(DefaultPage page); }
3.2.3 MyBatisDAO实现
package com.hotent.dao; import java.io.Serializable; import java.util.List; import javax.annotation.Resource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.support.SqlSessionDaoSupport; import com.hotent.page.DefaultPage; /** * * <pre> * 描述:TODO * 构建组:activiti * 作者:csx * 日期:2014年5月12日-上午9:31:02 * </pre> */ public abstract class MyBatisDao<T,PK extends Serializable> extends SqlSessionDaoSupport{ /** * 按ID获取单一记录 */ protected final String OP_GET=".get"; /* * 按ID删除记录 */ protected final String OP_DEL=".remove"; /** * 按ID更新记录 */ protected final String OP_UPD=".update"; /** * 添加记录 */ protected final String OP_CREATE=".create"; /** * 查询记录列表 */ protected final String OP_GETALL=".getAll"; /** * 返回当前实体的命名空间字符串名称 */ public abstract String getNamespace(); public void create(T entity) { this.getSqlSession().insert(getNamespace() + OP_CREATE, entity); } public void update(T entity) { this.getSqlSession().update(getNamespace() + OP_UPD, entity); } public void remove(PK entityId) { this.getSqlSession().delete(getNamespace() + OP_DEL, entityId); } public T get(PK entityId) { return this.getSqlSession().selectOne(getNamespace() + OP_GET,entityId); } public List<T> getAll() { return this.getSqlSession().selectList(getNamespace() + OP_GETALL, null); } public List<T> getAllByPage(DefaultPage page){ return this.getSqlSession().selectList(getNamespace() + OP_GETALL, null,page); } }
【说明】通过继承Mybatis的SqlSessionDaoSupport, 以及其获取的getSqlSession()来实现数据库的访问,但要注意一点,后续的所有的继承该基类的Dao,需要注入 sqlSessionFactory或sqlSessionTemplate。因此,如我们写一个学生的DAO,在使用上我们则需要在Spring配置文 件中按如下配置:
<bean id="studentDao" class="com.hotent.example.dao.StudentDao"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
3.3 配置基础AOP的事务
<!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 事务AOP拦截控制配置 --> <aop:config proxy-target-class="true"> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.hotent.dao.MyBatisDao.*(..))"/> </aop:config> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="get*" read-only="true"/> <tx:method name="is*" read-only="true"/> <tx:method name="find*" read-only="true"/> <tx:method name="query*" read-only="true"/> <tx:method name="*" isolation="DEFAULT"/> </tx:attributes> </tx:advice>
4. 编写访问学生表的DAO配置测试的Dao,如下所示:
在Spring中增加该Dao的配置,如下所示:
<bean id="studentDao" class="com.hotent.example.dao.StudentDao"> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
注意其引用了sqlSessionFactory
5. 编写测试用例编写一学生DAO测试用例,实现基础的数据库访问功能,如创建、获取列表等。
代码如下所示:
package com.hotent.example.dao; import com.hotent.dao.MyBatisDao; import com.hotent.example.entity.Student; public class StudentDao extends MyBatisDao<Student, String>{ @Override public String getNamespace() { return Student.class.getName(); } }
编写测试用例:
package com.hotent.test.example; import java.util.Date; import java.util.List; import java.util.UUID; import javax.annotation.Resource; import org.junit.Assert; import org.junit.Test; import org.springframework.test.annotation.Rollback; import com.hotent.example.dao.StudentDao; import com.hotent.example.entity.Student; import com.hotent.page.DefaultPage; import com.hotent.test.BaseTestCase; /** * * <pre> * 描述:TODO * 构建组:activiti * 作者:csx * </pre> */ public class StudentDaoTest extends BaseTestCase{ @Resource StudentDao studentDao; @Test @Rollback(false) public void testCreateStudent(){ String guid=UUID.randomUUID().toString(); int ranId=new Double(10000*Math.random()).intValue(); Student student=new Student(); student.setId(guid); student.setName("张三"+ranId); student.setSex(new Short("1")); student.setBirthday(new Date()); student.setDesc("张三个人简介"); studentDao.create(student); Student student2=studentDao.get(guid); Assert.assertNotNull(student2); } @Test public void testGetAll(){ List<Student> list=studentDao.getAllByPage(new DefaultPage(1, 10)); Assert.assertTrue(list.size()>0); for(Student student:list){ System.out.println("student:" + student.getName()); } } }
执行如下结果如下所示:
【总结】
通过以上整合后,可以看到借助Mybatis实现数据库的访问其实很简单,但若手工来编写Mybatis的映射mapping文件其实是很繁琐的工作,宏天X3平台则提供代码生成器的方式来生成这些配置文件,甚至包括各个层次的代码部分。在本文则不作介绍,后续的Activiti的任务查询扩展我们则可以 基于该类进行二次开发。
具体的实现代码如附件:
更多资讯请加QQ了解3102760881
更多了解
http://redxun.iteye.com/blog/2406509
相关推荐
基于SpringBoot,ORM-Mybatis,SpringMVC和多种组件构建的企业信息化开发基础平台,快速构建OA、CMS。 系统管理通用功能 单点登录: OAuth2.0+JWT单点登录/CAS单点登录 用户管理: 系统用户 角色管理: 按照企业系统...
这个学习文档专注于整合Spring、Struts2和Hibernate(SSH)这三大主流Java Web开发框架来搭建Activiti工作流系统。SSH框架的整合使得Activiti能够更好地融入到现有的企业级应用环境中,提供灵活且强大的流程管理能力...
JeePlatform项目是一个以SpringBoot为核心框架,集ORM框架Mybatis,Web层框架Spring MVC和多种开源组件框架组成的单一通用基础平台,代码已经被捐赠给开源中国社区: 代码结构图: ├─jeeplatform---------------...
hsweb 企业后台管理基础框架业务功能现在:权限管理: 权限资源-角色-用户.配置管理: kv结构,自定义配置.可通过此功能配置数据字典.脚本管理: 动态脚本,支持javascript,groovy,java动态编译执行.表单管理: 动态表单,...
- 根据数据库表结构,创建对应的Java实体类,作为ORM(对象关系映射)的基础。 - 在Mapper XML文件中,通过`resultMap`元素定义结果集映射,将数据库字段与实体类属性对应起来。 6. **Service与DAO层设计** - ...
mybatis-spring-1.2.3.jar mysql-connector-java-5.1.30.jar ojdbc14-10.2.0.4.0.jar poi-3.9.jar poi-ooxml-3.9.jar poi-ooxml-schemas-3.9.jar shiro-cas-1.2.3.jar shiro-core-1.2.3.jar shiro-ehcache-1.2.3.jar...
数据库使用mysql,spring + mybatis + activiti,里面参.zip" 提供了一个实际的应用场景,展示了如何在Java环境中集成流行的工作流引擎Activiti,以及如何与MySQL数据库、Spring框架和MyBatis ORM工具协同工作。...
- **持久层框架**: MyBatis(ORM框架)。 - **日志管理**: SLF4J + Log4j(日志记录API和实现)。 - **工具类**: Apache Commons、Jackson、Xstream、Dozer、POI等。 - **前端** - **JS框架**: JQuery(轻量级...
以SpringBoot为核心框架,集ORM框架Mybatis,Web层框架SpringMVC和多种开源组件框架而成的一款通用基础平台 后台技术 工作流引擎:Activiti5(待定) ORM框架:Mybatis Web框架:SpringMVC 核心框架:SpringBoot 任务...
MyBatis 是一款优秀的持久层框架,它简化了Java应用与数据库之间的交互,允许开发者通过SQL语句直接操作数据库,同时提供了ORM(对象关系映射)功能,使得数据库操作更为便捷和灵活。将MyBatis集成到Activiti中,...
Spring、SpringMVC、Mybatis、Activiti和Maven是Java开发中常用的一系列框架和技术。这个整合项目是一个基础的示例,展示了如何将这些工具有效地结合在一起,以实现一个功能丰富的企业级应用。 首先,Spring是核心...
在本项目中,SpringBoot作为基础框架,为系统的运行提供了稳定、高效的环境。开发者无需过多关注配置细节,可以更专注于业务逻辑的实现。 Activiti是一个开源的工作流和业务流程管理(BPM)系统,支持复杂的业务...
这些库的组合表明,这个压缩包可能是一个简化版的 Activiti 开发环境,包括了数据库连接、ORM 解决方案、Spring 框架以及 JSON 处理,为构建基于 Activiti 的 Web 应用提供了基础。开发者可以利用这些组件快速搭建和...
### 知识点一:Java后台管理框架及开源项目概览 #### 1.1 Java后台管理框架定义 - **定义**: 后台管理系统(Backend Management System)属于内容管理系统(Content Management System, CMS)的一个子集,主要用于...
7. **MyBatis**: `mybatis-3.3.0.jar` 是一个优秀的持久层框架,用于简化数据库操作,它可能被用来连接Activiti与后台数据库,实现数据的CRUD操作。 8. **Spring Framework**: `spring-context-4.1.5.RELEASE.jar` ...
这个平台的核心技术包括SpringBoot2.X、Mybatis-Plus3.X和Activiti,下面将详细介绍这三个关键组件。 首先,SpringBoot2.X是Spring框架的一个衍生产品,旨在简化Spring应用的初始搭建以及开发过程。SpringBoot通过...
标题中的"Hibernate+springMVC+Mybatis+Activiti5.16+Android客户端+mysql数据库"是一个典型的Java企业级应用架构,它涉及到多个技术栈的整合,包括持久层、控制层、服务流程管理和移动客户端开发。让我们逐一深入...
该系统是一款基于Spring4.0.4、Shiro1.2.4、Mybatis3.4等主流技术的白丁管理系统基础框架,提供全面且持续优化的源码。项目包含1142个文件,涵盖Java、JavaScript、HTML、CSS等多种语言,文件类型丰富多样。系统整合...
MyBatis则是一个轻量级的ORM框架,可以方便地处理数据库操作,与Activiti配合使用,可以实现对流程实例的持久化。 在实际应用中,Activiti 可以用于多种场景,例如: - **审批流程**:如财务报销、请假申请等,...