maven hbm2java_spring+struts2+Hibernate+maven+EasyUI开发环境搭建

首先申明:这是我在网上看的视频写的笔记,感谢孙宇老师。

一、sping环境搭建

1.1新建web工程(ss2he)

34ffbcbf6fae

1.png

34ffbcbf6fae

2.png

34ffbcbf6fae

3.png

注意:最后一步中一定要选中Standart Maven JEE project structure,这表示使用标准maven的目录结构。

1.2配置spring

pom.xml

4.0.0

com.ss2he

ss2he

0.0.1-SNAPSHOT

war

ss2he

UTF-8

org.springframework

spring-core

3.1.2.RELEASE

org.springframework

spring-context

3.1.2.RELEASE

org.springframework

spring-jdbc

3.1.2.RELEASE

org.springframework

spring-beans

3.1.2.RELEASE

org.springframework

spring-web

3.1.2.RELEASE

org.springframework

spring-expression

3.1.2.RELEASE

org.springframework

spring-orm

3.1.2.RELEASE

javax

javaee-api

7.0

provided

org.glassfish.web

javax.servlet.jsp.jstl

1.2.2

log4j

log4j

1.2.17

junit

junit

4.10

test

mysql

mysql-connector-java

5.1.38

maven-compiler-plugin

2.3.2

1.8

1.8

maven-war-plugin

2.2

3.1

false

这里我们先给出最基本的配置,后面在往上面继续添加其他的配置。

web.xml

contextConfigLocation

classpath:spring.xml

org.springframework.web.context.ContextLoaderListener

index.jsp

spring的配置文件:spring.xml

这里我们配置自动扫描dao和service包,便于我们后面使用注解,同时我们不需要配置bean,我们可以采用注解的方式将相关的bean注入进来,而不使用xml文件进行配置。同时注意:这里我们将所有资源文件都放在src/main/resources包中,我们没有使用默认的spring配置文件名,如果要使用spring默认的配置文件名需要放在WEB-INF下面,此时就不需要在web.xml配置属性文件的地址了。

1.3测试

在src/main/java中放置和项目相关的java文件。

UserService.java

package sy.service;

public interface UserService {

public void test();

}

UserServiceImpl.java

package sy.service.impl;

import org.apache.log4j.Logger;

import org.springframework.stereotype.Service;

import sy.action.UserAction;

import sy.service.UserService;

//这就相当于我们以前在配置文件中配置的bean

@Service(value="userService")

public class UserServiceImpl implements UserService{

private static final Logger logger = Logger.getLogger(UserAction.class);

@Override

public void test() {

//System.out.println("测试");

logger.info("测试");

}

}

说明:可以看到这里我们使用log4e插件进行打印测试结果而没有使用系统的打印,因为系统打印很消耗内存,所以不用。

在src/main/source中放置项目相关的资源文件。

log4j.properties

log4j.rootLogger=INFO,A1,R

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.Target=System.out

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=[%c]%m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender

log4j.appender.R.File=sshe.log

log4j.appender.R.MaxFileSize=10MB

log4j.appender.R.Threshold=ALL

log4j.appender.R.layout=org.apache.log4j.PatternLayout

log4j.appender.R.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH\:mm\:ss,SSS}][%c]%m%n

在src/test/java中放置用于测试的java文件。

TestSpring.java

package sy.test;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import sy.service.UserService;

//在spring.xml中我们配置了自动扫描,于是这里spring会帮我们将我们需

//要的bean注入进来

public class TestSpring {

@Test

public void test(){

ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{ "classpath:spring.xml" });

UserService userService = (UserService) ac.getBean("userService");//使用注解中找到此service的bean

userService.test();

}

}

最后我们直接使用junit进行测试。

二、struts2环境搭建

首先我们需要在pom.xml中配置struts2需要的依赖包。

pom.xml

org.apache.struts

struts2-core

2.3.4.1

org.apache.struts

struts2-spring-plugin

2.3.4.1

org.apache.struts

struts2-convention-plugin

2.3.4.1

将struts2的配置文件放在src/main/resources

struts.xml

说明:这里可以看到我们只是配置了一个package,没有配置bean,因为我们在项目中使用的是注解方式。

在web.xml中配置struts的拦截器

web.xml

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

*.action

说明:这里我们拦截一切.action结尾的请求。

测试:我们新建一个action类

UserAction.java

package sy.action;

import org.apache.log4j.Logger;

import org.apache.struts2.ServletActionContext;

import org.apache.struts2.convention.annotation.Action;

import org.apache.struts2.convention.annotation.Namespace;

import org.apache.struts2.convention.annotation.ParentPackage;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.ApplicationContext;

import org.springframework.web.context.support.WebApplicationContextUtils;

import sy.service.UserService;

@ParentPackage("basePackage")

@Namespace("/")

@Action(value="userAction")

public class UserAction {

private static final Logger logger = Logger.getLogger(UserAction.class);

//方式二:推荐方式

private UserService userService;

public UserService getUserService() {

return userService;

}

@Autowired

public void setUserService(UserService userService) {

this.userService = userService;

}

public void test(){

//System.out.println("进入action");

logger.info("进入action");

//方式一:不推荐

/*ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());

UserService userService = (UserService) ac.getBean("userService");

userService.test();*/

//方式二:推荐

userService.test();

}

}

说明:

1.先单纯的测试struts2,我们使用

logger.info("进入action");打印测试结果,直接使用junit测试。

2.之后我们测试struts2和spring的整合。提供了两种方式,先看第一种,第一种中和我们之前测试spring的方式是一样的,较为繁琐,这里不推荐;第二种是我们申明一个UserService对象,让spring为我们注入此对象,然后我们直接调用此对象即可。

3.最后我们可以看到我们使用注解配置action,其实和在文件中配置是一样的,但是较为方便。我们使用http://localhost:8080/ss2he/userAction!test.action进行访问,看能不能访问到之前UserServiceImpl.java中的那个test方法。访问成功则表示struts2和spring整合成功。

三、Hibernate开发环境搭建

先配置Hibernate需要的jar包:

org.hibernate

hibernate-core

4.2.21.Final

注意:视频中老师使用的是4.1.7版本,但是我再试验的过程中spring总是不能将sessionFactory注入进去,后来换成了这个版本。但是可能是TestSpring.java中也使用了UserService而我们在src/test/resources中没有放置配置文件而导致找不到配置文件引发不能注入的问题。我们可以将TestSpring.java中的测试方法注释掉再试试。

在dao层中:

UserDaoImpl.java

package sy.dao.impl;

import java.io.Serializable;

import org.hibernate.SessionFactory;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Repository;

import sy.dao.UserDao;

import sy.model.User;

//我们可以看到这里就和Hibernate3不一样了,Hibernate3中我们是需要继承一个Hibernate的类的

//Hibernate4中不能这样调用,使用注入的方式

//Dao也应该交给spring管理,加上注解

@Repository(value="userDao")

public class UserDaoImpl implements UserDao {

private SessionFactory sessionFactory;

@Override

public Serializable save(User user) {

//这里为什么不用open session?因为我们已经将事务交给spring管理了,直接使用getCurrentSession方法

return this.sessionFactory.getCurrentSession().save(user);

}

public SessionFactory getSessionFactory() {

return sessionFactory;

}

//这里使用注入的方式

@Autowired

public void setSessionFactory(SessionFactory sessionFactory) {

this.sessionFactory = sessionFactory;

}

}

说明:这里我们可以看到我们是使用的注入方式,让spring为我们将SessionFactory注入到dao层中,注意Hibernate3和Hibernate4的区别。

在service层中我们需要增加相关方法:

UserServiceImpl.java

package sy.service.impl;

import java.io.Serializable;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

import sy.action.UserAction;

import sy.dao.UserDao;

import sy.model.User;

import sy.service.UserService;

//这就相当于我们以前在配置文件中配置的bean

@Service(value="userService")

public class UserServiceImpl implements UserService{

private static final Logger logger = Logger.getLogger(UserServiceImpl.class);

private UserDao userDao;

@Override

public void test() {

//System.out.println("测试");

logger.info("测试");

}

@Override

public Serializable save(User user) {

return userDao.save(user);

}

public UserDao getUserDao() {

return userDao;

}

//注意:方法名中的UserDao是和UserDaoImpl.java中的类上的注解是对应的,也就是那边是userDao,这里就是UserDao

@Autowired

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

public static Logger getLogger() {

return logger;

}

}

说明:这里我们增加了一个save方法,注意我们没有new一个UserDao,而是让spring帮我们注入进来。

测试

TestHibernate.java

package sy.test;

import java.util.Date;

import java.util.UUID;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import sy.model.User;

import sy.service.UserService;

public class TestHibernate {

@Test

public void test(){

//获得spring的上下文,下面这行将两个配置文件联系起来了

ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{ "classpath:spring.xml","classpath:spring-hibernate.xml" });

UserService userService = (UserService) ac.getBean("userService");//使用注解中找到此service的bean

User user = new User();

user.setId(UUID.randomUUID().toString());

user.setUsername("张三");

user.setPassword("123");

user.setCreatedatetime(new Date());

userService.save(user);

}

}

说明:这里我们只是纯粹的测试了dao层,还没有从web层上进行测试,下面我们在web层上进行测试。

注意:在测试后我们就会向数据库中存相关的数据,此时如果我们进行打包,maven会再次运行测试方法,这会导致向数据库中插入重复数据,而数据库中有些字段是不能重复的,我们需要在打包的时候将一些测试方法注释掉。

首先在web.xml中配置Hibernate的配置文件:

ss2he

contextConfigLocation

classpath:spring.xml,classpath:spring-hibernate.xml

openSessionInViewFilter

org.springframework.orm.hibernate4.support.OpenSessionInViewFilter

singleSession

true

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

*.action

openSessionInViewFilter

*.action

org.springframework.web.context.ContextLoaderListener

index.jsp

说明:可以看到我们还配置了openSessionInViewFilter,主要是用于控制session的,具体作用这里不多讲。

在UserAction.java中增加这样一个方法:

//测试Hibernate

public void addUser(){

User user = new User();

user.setId(UUID.randomUUID().toString());

user.setUsername("xxx");

user.setPassword("111");

user.setCreatedatetime(new Date());

userService.save(user);

}

说明:然后使用地址:http://localhost:8080/ss2he/userAction!addUser.action访问,如果没报错就表明Hibernate和spring整合成功。注意将以前的测试方法注释掉。但是这里碰到一个问题是为什么访问的时候这个方法会执行两次,导致我们报错,但是数据是已经插入成功的,只是第二次插入就会与第一次插入重复,而数据库中有些字段是不能重复的。最后网上有人说这是spring3.1版本的bug,我换成4.2.5版本之后就没问题了。

最后:

我们给出完整的pom.xml文件:

4.0.0

com.ss2he

ss2he

0.0.1-SNAPSHOT

war

ss2he

central

Central Repository

https://repo.maven.apache.org/maven2

default

false

alibaba-opensource

alibaba-opensource

http://code.alibabatech.com/mvn/releases/

default

alibaba-opensource-snapshot

alibaba-opensource-snapshot

http://code.alibabatech.com/mvn/snapshots/

default

UTF-8

com.alibaba

druid

1.0.19

com.alibaba

fastjson

1.1.24

org.aspectj

aspectjweaver

1.7.0

org.hibernate

hibernate-core

4.2.21.Final

org.apache.struts

struts2-core

2.3.4.1

javassist

javassist

org.apache.struts

struts2-spring-plugin

2.3.4.1

org.apache.struts

struts2-convention-plugin

2.3.4.1

org.springframework

spring-core

4.2.5.RELEASE

org.springframework

spring-context

4.2.5.RELEASE

org.springframework

spring-jdbc

4.2.5.RELEASE

org.springframework

spring-beans

4.2.5.RELEASE

org.springframework

spring-web

4.2.5.RELEASE

org.springframework

spring-expression

4.2.5.RELEASE

org.springframework

spring-orm

4.2.5.RELEASE

javax

javaee-api

7.0

provided

org.glassfish.web

javax.servlet.jsp.jstl

1.2.2

log4j

log4j

1.2.17

junit

junit

4.10

test

mysql

mysql-connector-java

5.1.38

maven-compiler-plugin

2.3.2

1.8

1.8

maven-war-plugin

2.2

3.1

false

四、整合easyUI

这里我们使用的是jquery-easyui-1.3.1版本,由于整个包都不太大,所以我们直接将真个包拷贝到工程中src/main/webapp/js目录下。然后我们在首页中需要引入相关的文件才能使用这个框架。

index.jsp

My JSP 'index.jsp' starting page

This is my JSP page.

资源文件(config.properties)

#hibernate.dialect=org.hibernate.dialect.OracleDialect

#driverClassName=oracle.jdbc.driver.OracleDriver

#validationQuery=SELECT 1 FROM DUAL

#jdbc_url=jdbc:oracle:thin:@127.0.0.1:1521:orcl

#jdbc_username=sshe

#jdbc_password=sshe

hibernate.dialect=org.hibernate.dialect.MySQLDialect

driverClassName=com.mysql.jdbc.Driver

validationQuery=SELECT 1

jdbc_url=jdbc:mysql://localhost:3305/sshe?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull

jdbc_username=root

jdbc_password=walp1314

#hibernate.dialect=org.hibernate.dialect.SQLServerDialect

#driverClassName=net.sourceforge.jtds.jdbc.Driver

#validationQuery=SELECT 1

#jdbc_url=jdbc:jtds:sqlserver://127.0.0.1:1433/sy

#jdbc_username=sa

#jdbc_password=123456

#jndiName=java:comp/env/dataSourceName

hibernate.hbm2ddl.auto=update

hibernate.show_sql=true

hibernate.format_sql=true

sessionInfoName=sessionInfo

uploadFieldName=filedata

uploadFileMaxSize=20971520

uploadFileExts=txt,rar,zip,doc,docx,xls,xlsx,jpg,jpeg,gif,png,swf,wmv,avi,wma,mp3,mid

uploadDirectory=attached

之后我们就可以使用相关的框架文件了。

最后:

到此我们就将整个框架搭建好了,可以进行下一步开发了。当然如果要使用其他前端框架也是可以的,只需要将上面的前端框架换掉即可。最后补充一点是,我们在使用MyEclipse进行反向生成表的时候没有直接在工程中进行,而是另外建了一个工程,然后将里面的实体类复制过来了,因为在反向生成的时候MyEclipse会生成一些不需要的文件(如hibernate的配置文件和sessionFactory类),而这里我们是使用spring注入,所以这些都不需要。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值