博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2+Spring+Hibernate+Jbpm技术实现Oa(Office Automation)办公系统第一天框架搭建
阅读量:6656 次
发布时间:2019-06-25

本文共 10831 字,大约阅读时间需要 36 分钟。

=============编码规范,所有文健,所有页面,所有数据库的数据表都采用UTF-8编码格式,避免乱码;===========开发环境:jdk1.7+tomcat8.0+mysql5.7+eclipse Mars.2 Release (4.5.2)

1:创建一个动态web项目,名称如Oa;

2:创建一个Oa的数据库,并且创建一个新用户只可以操作Oa这个数据库;

1 ----创建数据库2 create database Oa default character set utf8;3 4 -----创建用户5 create user biexiansheng identified by '123456';6 7 -----为用户授权8 grant all on Oa.* to biexiansheng;

温馨提示:创建好之后使用的是Navicat连接的数据库,注意连接名和用户名是自己起的比如我的别先生,密码也是自己的比如我的123456。

3:导入各个框架的jar包:

  3.1:第一步,先导入struts2的jar包,如下所示:

asm-3.3.jar

asm-commons-3.3.jar
asm-tree-3.3.jar
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
commons-lang-2.4.jar
freemarker-2.3.19.jar
javassist-3.11.0.GA.jar
ognl-3.0.6.jar
struts2-core-2.3.16.3.jar
struts2-spring-plugin-2.3.16.3.jar
xwork-core-2.3.16.3.jar

然后配置一下web.xml的前端控制器:

1 
2
3
Oa
4
5
index.html
6
index.htm
7
index.jsp
8
default.html
9
default.htm
10
default.jsp
11
12 13 14
15
16
struts2
17
18
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
19
20
21
struts2
22
/*
23
24 25 26 27 28

然后再复制一下struts.xml的配置文件放到src/config下面,模板如下所示:

  3.2:导入spring的jar包:如下所示:

com.springsource.com.mchange.v2.c3p0-0.9.1.2.jar

com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.apache.commons.logging-1.1.1.jar
com.springsource.org.apache.log4j-1.2.15.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
spring-aop-3.2.5.RELEASE.jar
spring-aspects-3.2.5.RELEASE.jar
spring-beans-3.2.5.RELEASE.jar
spring-context-3.2.5.RELEASE.jar
spring-core-3.2.5.RELEASE.jar
spring-expression-3.2.5.RELEASE.jar
spring-jdbc-3.2.5.RELEASE.jar
spring-orm-3.2.5.RELEASE.jar
spring-tx-3.2.5.RELEASE.jar
spring-web-3.2.5.RELEASE.jar

然后在web.xml里面配置一下spring的上下文载入器和监听器,配置如下所示:

1 
2
3
Oa
4
5
index.html
6
index.htm
7
index.jsp
8
default.html
9
default.htm
10
default.jsp
11
12 13
14
15
contextConfigLocation
16
classpath:beans.xml
17
18 19
20
21
25
org.springframework.web.context.ContextLoaderListener
26
27 28 29
30
31
struts2
32
33
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
34
35
36
struts2
37
/*
38
39 40 41 42 43

然后在src/config下面配置一下spring的配置文件:(由于使用的是注解扫描的,所以会使用开启注解和组件扫描)

1 
2
16 17 18
19 20
21
22 23
24
27
28
29
30
31
32
33
34
35
36 37
38
39
40
41 42
43
44
45
46
org.hibernate.dialect.MySQL5InnoDBDialect
47 48
update
49 50
true
51 52
true
53
54 55
56 57 58
59
60
61
classpath:com/oa/po
62
63
64 65
66 67
68
69
70
71 72
73
74
75
76 77
78
79 80 81

创建一个jdbc.properties配置文件,配置如下所示:

1 driverClass=com.mysql.jdbc.Driver2 jdbcUrl=jdbc:mysql://localhost:3306/oa3 user=biexiansheng4 password=1234565 initialPoolSize=206 minPoolSize=207 maxPoolSize=40

创建一个log4j.properties配置文件,用于记录日志的相关信息:(记得修改自己的日志保存的文件路径,在第9行)

1 ### direct log messages to stdout ### 2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender 3 log4j.appender.stdout.Target=System.err 4 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 5 log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 6  7 ### direct messages to file mylog.log ### 8 log4j.appender.file=org.apache.log4j.FileAppender 9 log4j.appender.file.File=E:\Android_java_resouce\JAVA_EE\eclipse\workspace\mylog.log10 log4j.appender.file.layout=org.apache.log4j.PatternLayout11 log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n12 13 ### set log levels - for more verbose logging change 'info' to 'debug' ###14 15 log4j.rootLogger=info, stdout

  3.3:导入hibernate的相关jar包,如下所示:

1 antlr-2.7.6.jar 2 commons-collections-3.1.jar 3 dom4j-1.6.1.jar 4 hibernate-jpa-2.0-api-1.0.0.Final.jar 5 hibernate3.jar 6 javassist-3.12.0.GA.jar 7 jta-1.1.jar 8 mysql-connector-java-5.1.40-bin.jar 9 slf4j-api-1.6.1.jar10 slf4j-log4j12-1.7.2.jar

4:创建项目包结构,搭建的项目结构如下所示:

5:项目搭建好之后将项目放到本地tomat下面跑一下,看看搭建的项目是否出现错误:

 

温馨提示:假如最后跑项目出现错误,请不要着急,仔细分析,应该可以很快解决问题;

所谓万事开头难,开好头,加油!生命不息,运动不止;

6:框架搭建完之后就可以进行业务开发了;先提取公共的方法,比如增删改查的公共的方法,Action公共的方法。

首先创建一个接口,实现这些需求的方法,增删改查:

1 package com.oa.base; 2  3 import java.util.List; 4  5 /** 6  * @author biexiansheng 7  * 8  *创建日期  2017年7月16日 9  *10  *公共的增删改查的方法11  */12 public interface BaseDao
{13 14 //添加信息15 public void save(T entity);16 17 //根据什么id进行删除18 public void delete(Long id);19 20 //根据id进行修改21 public void update(T entity);22 23 //根据id进行查询什么信息,修改的时候可以使用24 public T getById(Long id);25 26 //查询所有的信息27 public List
findAll();28 29 //一次查询多个对象30 public List
getByIds(Long[] ids);31 }

 然后实现这个接口的这些方法:

1 package com.oa.base.impl;  2   3 import java.lang.reflect.ParameterizedType;  4 import java.lang.reflect.Type;  5 import java.util.List;  6   7 import javax.annotation.Resource;  8   9 import org.hibernate.Query; 10 import org.hibernate.Session; 11 import org.hibernate.SessionFactory; 12  13 import com.oa.base.BaseDao; 14  15 /** 16  * @author biexiansheng 17  * 18  *创建日期:2017年7月16日 19  * 20  *对公共的增删改查方法进行具体实现 21  */ 22 public class BaseDaoImpl
implements BaseDao
{ 23 24 //将sessionFactory注入到ioc容器中 25 @Resource 26 private SessionFactory sessionFactory; 27 28 private Class
clazz; 29 30 public BaseDaoImpl() { 31 //获得实体类型 32 //this.getClass();这个获得的是子类的名称 33 34 //获得真正的父类的名称,是什么类型 35 //生成类型和名称的快捷键ctrl+1 36 ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass(); 37 38 //获取父类的类型之后开始获取泛型里面的内容 39 Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments(); 40 41 //将获取到的第一个参数即实体类的名称传给clazz 42 clazz = (Class
) actualTypeArguments[0]; 43 } 44 45 46 @Override 47 public void save(T entity) { 48 //保存直接调用hibernate的保存的方法即可 49 //将传递进来的entity参数保存到数据表中 50 sessionFactory.getCurrentSession().save(entity); 51 } 52 53 @Override 54 public void delete(Long id) { 55 //根据编号删除,需要先根据编号查询出来,然后根据编号进行删除 56 sessionFactory.getCurrentSession().delete(sessionFactory.getCurrentSession().get(clazz, id)); 57 58 } 59 60 @Override 61 public void update(T entity) { 62 //修改操作 63 //即将要修改的内容放到update里面即可 64 sessionFactory.getCurrentSession().update(entity); 65 } 66 67 @Override 68 public T getById(Long id) { 69 //根据编号进行查询信息 70 71 return (T) sessionFactory.getCurrentSession().get(clazz, id); 72 } 73 74 75 @Override 76 public List
findAll() { 77 //查询所有 78 //根据传递进来的实体类,将获取到简单的类名 79 String hql = "from" + clazz.getSimpleName(); 80 81 //使用createQuery方法创建hql语句进行查询出所有的信息 82 return sessionFactory.getCurrentSession().createQuery(hql).list(); 83 } 84 85 @Override 86 public List
getByIds(Long[] ids) { 87 //一次查询多个信息 88 String hql = " from " + clazz.getSimpleName() + " where id in (:ids) "; 89 90 //将查询语句作为参数进行传递 91 Query query = sessionFactory.getCurrentSession().createQuery(hql); 92 93 //一次赋值多个 94 query.setParameterList("ids", ids); 95 96 //将查询的结果返回回去 97 return query.list(); 98 } 99 100 101 102 //提取公共的语句103 public Session getSession(){104 105 //可以对上面的进行抽取替换,这样优化开发106 return sessionFactory.getCurrentSession();107 }108 109 }

接下来再实现Action的这个公共的类的公共的方法:

1 package com.oa.base.impl; 2  3 import java.lang.reflect.ParameterizedType; 4 import java.lang.reflect.Type; 5  6 import com.opensymphony.xwork2.ActionSupport; 7 import com.opensymphony.xwork2.ModelDriven; 8  9 /***10  * 通用父类action11  * @author biexiansheng12  *13  *创建日期:2017年7月16日14  */15 public class BaseAction
extends ActionSupport implements ModelDriven
{16 17 18 private static final long serialVersionUID = 1L;19 20 //构造方法21 public BaseAction(){22 //获取到BaseAction的这个名称23 ParameterizedType genericSuperclass = (ParameterizedType) this.getClass().getGenericSuperclass();24 25 //获取父类的类型之后开始获取泛型里面的内容26 Type[] types = genericSuperclass.getActualTypeArguments();27 28 将获取到的第一个参数即实体类的名称传给clazz29 Class
clazz = (Class
) types[0];30 31 try {32 //将获取的参数名称传给model33 model = clazz.newInstance();34 } catch (InstantiationException | IllegalAccessException e) {35 e.printStackTrace();36 }37 }38 39 //声明model类型40 protected T model;41 42 @Override43 public T getModel() {44 45 //返回model类型46 return model;47 }48 49 50 }

等到第二天就开始实现具体的业务需求;

转载地址:http://fyato.baihongyu.com/

你可能感兴趣的文章
grep系的介绍及正则表达式详解
查看>>
oracle不同的连接方式SID服务名
查看>>
使用用户首选项保存数据
查看>>
mysql高级
查看>>
zookeeper leader选举
查看>>
MailBee.NET Objects撰写邮件教程(二):发送一个网页
查看>>
我眼中的Linux系统和红帽RHCE认证
查看>>
mysql主从同步异步场景的分析
查看>>
Entangle 2.0 “Sodium”正式发布
查看>>
或许...你需要一份把心放进肚子里的安全感?
查看>>
koa源码分析(一)http模块
查看>>
HTTP请求三次握手协议
查看>>
持续集成工具Jenkins结合SVN的安装和使用
查看>>
git 实践(三) 建立关联分支
查看>>
《php与mysql权威指南》第三部分02
查看>>
使用Hutools的对称加密时出现的一个问题
查看>>
禁止用户多点触控-
查看>>
NODE基础简介
查看>>
如何查看项目使用的Eclipse版本和Jdk的版本
查看>>
MongoDB —— 使用Spring Data MongoDB操作数据库
查看>>