MyEclipse10+Struts2.1+Spring3.3+Hibernate3.3全注解框架搭建.docx

一、新建web项目

1.        File-->New-->web project

 

 

2.        工程名称:king-back-->点选Java EE 6.0标准

 

 

二、添加ssh2支持

1.        添加struts2

工程上点右键-->myeclipse-->add struts capabilites

 

点选struts2.1-->url模式点选 /*

 

 

添加struts2 core lib和struts2 spring lib

 

 

新建LoginAction类                

packagecom.frank.action;

 

importcom.opensymphony.xwork2.ActionSupport;

 

/**

 * @author steve frank

 *

 */

publicclass LoginAction extends ActionSupport {

         private String name;

         private String password;

 

         public String getName() {

                   return name;

         }

 

         public void setName(String name) {

                   this.name = name;

         }

 

         public String getPassword() {

                   return password;

         }

 

         public void setPassword(Stringpassword) {

                   this.password = password;

         }

 

         public String execute() {

                   if (name.equals("steve")&& password.equals("123"))

                            return SUCCESS;

 

                   else

                            return INPUT;

         }

}

 

修改struts.xml

<?xmlversion="1.0" encoding="UTF-8" ?>

<!DOCTYPEstruts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

         <package name="default"namespace="/" extends="struts-default">

                   <actionname="login" class="com.frank.action.LoginAction">

                            <resultname="success">/success.jsp</result>

                            <resultname="input">/fail.jsp</result>

                   </action>

         </package>

</struts>  

修改index.jsp

<%@page language="java" import="java.util.*"pageEncoding="UTF-8"%>

<%@taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

 

<title>MyJSP 'index.jsp' starting page</title>

</head>

 

<body>

         <s:form action="login">

                   <s:textfieldname="name" value="steve"></s:textfield>

                   <s:textfieldname="password" value="123"></s:textfield>

                   <s:submit></s:submit>

         </s:form>

</body>

</html>

 

添加success.jsp

<%@page language="java" import="java.util.*"pageEncoding="UTF-8"%>

<%@taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

 

<title>MyJSP 'success.jsp' starting page</title>

</head>

 

<body>

         <s:text name="password"/>

         <hr />

         <s:propertyvalue="password" />

         <hr />

         ${password}

         <hr />

</body>

</html>

 

添加fail.jsp

<%@page language="java" import="java.util.*"pageEncoding="UTF-8"%>

<%@taglib prefix="s" uri="/struts-tags"%>

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

 

<title>MyJSP 'fail.jsp' starting page</title>

</head>

 

<body>登录失败,用户名或密码错误.

</body>

</html>

当前web.xml如下,直接启动会报spring监听错误,因为刚才已经添加了spring支持struts的lib包。

 

                           

 

添加spring监听,重新启动会提示找不到spring配置文件。

 

 

 

 

2.        添加spring

右键-->myeclipse-->add spring capabilities

 

 

勾选spring 3.0 aop lib,spring 3.0 core lib,spring 3.0 persistence corelib,spring 3.0 persistence jdbc lib,spring 3.0 web lib;

点选copy checked library contents to project folder

 

 

当前web.xml如下,重新启动tomcat,成功。

 

 

 

打开浏览器,输入http://localhost:8088/king-back,(tomcat端口未修改过的应该为8080),出现如下界面。

 

 

直接点击submit,成功跳转到success.jsp,界面如下。

 

 

如果修改用户名为frank,如下

 

 

点击submit后跳转到fail.jsp如下

 

 

3.        添加hibernate

先配置好数据源驱动,如下

 

 

右键-->myeclipse-->add hibernate capabilities

 

 

点选hibernate 3.3,勾选enable hibernate annotations support;

勾选hibernate 3.3 annotations&entity manager,hibernate 3.3 core lib;

点选copy checked library jars to project folder and add to build-path

 

 

点选spring configuration file,交给spring配置数据源

 

 

勾选existing spring configuration file

 

 

选择配置好的数据源驱动

 

 

去掉create seesionfactory class的勾。然后点击完成。

 

 

三、数据反向生成

1.        新建文件夹com.frank.model,准备放置生成的实体类和dao类

 

2.        在项目中新建data.sql文件,内容如下,连接mysql的test库,新建表student

DROPTABLE IF EXISTS `student`;

CREATETABLE `student` (

  `id` int(11) NOT NULL,

  `name` varchar(20) default NULL,

  `role_id` int(11) default NULL,

  PRIMARY KEY (`id`)

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

------------------------------

--Records of student

-- ----------------------------

INSERTINTO `student` VALUES ('1', '张三', '1');

INSERTINTO `student` VALUES ('2', '李四', '2');

INSERTINTO `student` VALUES ('3', '王五', '1');

 

SELECT * FROM student;

3.        生成Dao和实体类过程如下

打开Test库,选择student表,右键hibernate reverse engineering

 

 

出现如下视图,通过browse选择king-back项目和com.frank.model文件夹

 

结果如下,

勾选create pojo<> db table mapping informationà点选addhibernate mapping annotations to pojoà保留update hibernate configurationwith mapping resource location;

去掉create abstract class勾;

勾选java data access object(dao) à勾选generate precisefindby methodsà点选spring dao

 

Id generator 选择native

 

结果如下

 

四、编写测试

1.        新建test类

packagetest;

 

importjava.util.List;

 

importorg.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

 

importcom.frank.model.Student;

importcom.frank.model.StudentDAO;

 

publicclass Test {

 

         public static void main(String[] args){

                   ApplicationContext context =new ClassPathXmlApplicationContext(

                                     "applicationContext.xml");

                   StudentDAO dao = (StudentDAO)context.getBean("StudentDAO");

                   List<Student> list =dao.findAll();

                   int n = list.size();

                   for (int i = 0; i < n;i++) {

                            Student c =list.get(i);

                            String name =c.getName();

                            System.out.println(name);

                   }

         }

}

运行结果如下,说明项目基本上是ok的。

 

2.        修改action类

publicString execute() {

                   getData();

                   if(name.equals("steve") && password.equals("123"))

 

                            return SUCCESS;

 

                   else

                            return INPUT;

         }

 

         private void getData() {

                   ApplicationContext context =new ClassPathXmlApplicationContext(

                                     "applicationContext.xml");

                   StudentDAO dao = (StudentDAO)context.getBean("StudentDAO");

                   List<Student> list =dao.findAll();

                   int n = list.size();

                   for (int i = 0; i < n;i++) {

                            Student c =list.get(i);

                            String name =c.getName();

                            System.out.println(name);

                   }

         }

刷新浏览器,查看控制台打印结果。

 

 

五、添加注解配置

1.        修改struts.xml

<?xmlversion="1.0" encoding="UTF-8" ?>

<!DOCTYPEstruts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN""http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

         <!-- 开启使用开发模式,详细错误提示-->

         <constantname="struts.devMode" value="true" />

         <!-- 将对象交给spring管理 -->

         <constantname="struts.objectFactory" value="spring" />

         <!-- 指定资源编码类型 -->

         <constant name="struts.i18n.encoding"value="UTF-8" />

         <!-- 指定每次请求到达,重新加载资源文件-->

         <constantname="struts.i18n.reload" value="true" />

         <!-- 指定每次配置文件更改后,自动重新加载-->

         <constantname="struts.configuration.xml.reload" value="false" />

         <!-- 国际化资源文件 -->

         <constant name="struts.custom.i18n.resources"value="content/Language" />

         <!-- 浏览器缓存 -->

         <constantname="struts.serve.static.browserCache" value="false" />

         <!-- 默认后缀名 -->

         <constantname="struts.action.extension" value="do,action,jhtml,,"/>

         <!-- Struts Annotation -->

         <constantname="actionPackages" value="com.frank.action" />

</struts>

2.        修改LoginAction,在execute方法上添加

@Action(value= "login", results = {

                            @Result(name =INPUT, location = "/index.jsp"),

                            @Result(name= SUCCESS, location = "/WEB-INF/content/success.jsp") })

3.        action注解完成,可以测试通过,接下来添加service注解等

4.        修改applicationContext.xml

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"

         xmlns:context="http://www.springframework.org/schema/context"

         xsi:schemaLocation="http://www.springframework.org/schema/beans

          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

          http://www.springframework.org/schema/context

          http://www.springframework.org/schema/context/spring-context-3.0.xsd">

 

 

         <bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource">

                   <propertyname="driverClassName" value="com.mysql.jdbc.Driver">

                   </property>

                   <propertyname="url"value="jdbc:mysql://localhost:3306/test"></property>

                   <propertyname="username" value="root"></property>

                   <propertyname="password" value="admin"></property>

         </bean>

         <bean id="sessionFactory"

                   class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

                   <propertyname="dataSource">

                            <refbean="dataSource" />

                   </property>

                   <propertyname="hibernateProperties">

                            <props>

                                     <propkey="hibernate.dialect">

                                               org.hibernate.dialect.MySQLDialect

                                     </prop>

                            </props>

                   </property>

                   <propertyname="annotatedClasses">

                            <list>

                                     <value>com.frank.model.Student</value>

                            </list>

                   </property>

         </bean>

 

         <!-- 使用 annotation 自动注册bean,并检查@Controller,@Service, @Repository注解已被注入 -->

         <context:component-scanbase-package="com.frank" />

 

</beans>

5.        Service、dao 的接口和实现类

StudentService.java

public interfaceStudentService {

         /**

          * 根据主键查询Student

          * @param id

          * @return

          */

         public Student findById(Integer id);

}

 

 

StudentServiceImpl.java

@Service

public classStudentServiceImpl implements StudentService {

         @Resource

         private StudentDAO studentDAO;

 

         @Override

         public Student findById(Integer id) {

                   // TODO Auto-generated methodstub

                   returnstudentDAO.findById(id);

         }

 

}

 

StudentDAO.java

public interfaceStudentDAO{

         public abstract void save(StudenttransientInstance);

 

         public abstract void delete(StudentpersistentInstance);

 

         public abstract StudentfindById(java.lang.Integer id);

 

         public abstract List<Student>findByExample(Student instance);

 

         public abstract ListfindByProperty(String propertyName, Object value);

 

         public abstract List<Student>findByName(Object name);

 

         public abstract List findAll();

 

         public abstract Student merge(StudentdetachedInstance);

 

         public abstract voidattachDirty(Student instance);

 

         public abstract voidattachClean(Student instance);

}

 

StudentDAOImpl.java

@Repository

public classStudentDAOImpl extends HibernateDaoSupport implements StudentDAO {

         private static final Logger log =LoggerFactory

                            .getLogger(StudentDAOImpl.class);

         // property constants

         public static final String NAME ="name";

         private SessionFactory sessionFacotry;

 

         @Resource

         public voidsetSessionFacotry(SessionFactory sessionFacotry) {

                   super.setSessionFactory(sessionFacotry);

         }

 

         protected void initDao() {

                   // do nothing

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#save(com.frank.model.Student)

          */

         @Override

         public void save(StudenttransientInstance) {

                   log.debug("savingStudent instance");

                   try {

                            getHibernateTemplate().save(transientInstance);

                            log.debug("savesuccessful");

                   } catch (RuntimeException re){

                            log.error("savefailed", re);

                            throw re;

                   }

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#delete(com.frank.model.Student)

          */

         @Override

         public void delete(StudentpersistentInstance) {

                   log.debug("deletingStudent instance");

                   try {

                            getHibernateTemplate().delete(persistentInstance);

                            log.debug("deletesuccessful");

                   } catch (RuntimeException re){

                            log.error("deletefailed", re);

                            throw re;

                   }

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#findById(java.lang.Integer)

          */

         @Override

         public StudentfindById(java.lang.Integer id) {

                   log.debug("gettingStudent instance with id: " + id);

                   try {

                            Student instance =(Student) getHibernateTemplate().get(

                                               "com.frank.model.Student",id);

                            return instance;

                   } catch (RuntimeException re){

                            log.error("getfailed", re);

                            throw re;

                   }

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#findByExample(com.frank.model.Student)

          */

         @Override

         public List<Student>findByExample(Student instance) {

                   log.debug("findingStudent instance by example");

                   try {

                            List<Student>results = (List<Student>) getHibernateTemplate()

                                               .findByExample(instance);

                            log.debug("findby example successful, result size: "

                                               +results.size());

                            return results;

                   } catch (RuntimeException re){

                            log.error("findby example failed", re);

                            throw re;

                   }

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#findByProperty(java.lang.String,

          * java.lang.Object)

          */

         @Override

         public List findByProperty(StringpropertyName, Object value) {

                   log.debug("findingStudent instance with property: " + propertyName

                                     + ",value: " + value);

                   try {

                            String queryString ="from Student as model where model."

                                               +propertyName + "= ?";

                            returngetHibernateTemplate().find(queryString, value);

                   } catch (RuntimeException re){

                            log.error("findby property name failed", re);

                            throw re;

                   }

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#findByName(java.lang.Object)

          */

         @Override

         public List<Student>findByName(Object name) {

                   return findByProperty(NAME,name);

         }

 

         /*

          * (non-Javadoc)

          *

          * @see com.frank.dao.impl.S#findAll()

          */

         @Override

         public List findAll() {

                   log.debug("finding allStudent instances");

                   try {

                            String queryString ="from Student";

                            returngetHibernateTemplate().find(queryString);

                   } catch (RuntimeException re){

                            log.error("findall failed", re);

                            throw re;

                   }

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#merge(com.frank.model.Student)

          */

         @Override

         public Student merge(StudentdetachedInstance) {

                   log.debug("mergingStudent instance");

                   try {

                            Student result =(Student) getHibernateTemplate().merge(

                                               detachedInstance);

                            log.debug("mergesuccessful");

                            return result;

                   } catch (RuntimeException re){

                            log.error("mergefailed", re);

                            throw re;

                   }

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#attachDirty(com.frank.model.Student)

          */

         @Override

         public void attachDirty(Studentinstance) {

                   log.debug("attachingdirty Student instance");

                   try {

                            getHibernateTemplate().saveOrUpdate(instance);

                            log.debug("attachsuccessful");

                   } catch (RuntimeException re){

                            log.error("attachfailed", re);

                            throw re;

                   }

         }

 

         /*

          * (non-Javadoc)

          *

          * @seecom.frank.dao.impl.S#attachClean(com.frank.model.Student)

          */

         @Override

         public void attachClean(Studentinstance) {

                   log.debug("attachingclean Student instance");

                   try {

                            getHibernateTemplate().lock(instance,LockMode.NONE);

                            log.debug("attachsuccessful");

                   } catch (RuntimeException re){

                            log.error("attachfailed", re);

                            throw re;

                   }

         }

 

六、附加功能完善

1.        添加log日志输出

log4j.rootLogger=WARN,console, logFile

 

#Console

log4j.appender.console=org.apache.log4j.ConsoleAppender

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

log4j.appender.console.layout.ConversionPattern=%d%p [%c] - <%m>%n

 

#RollingFile

log4j.appender.logFile=org.apache.log4j.DailyRollingFileAppender

log4j.appender.logFile.File=../logs/king.log

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

log4j.appender.logFile.layout.ConversionPattern=%d %p [%c] -<%m>%n

2.        添加编码转换web.xml

<filter>

                   <filter-name>SetCharacter Encoding</filter-name>

                   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>

                   <init-param>

                            <param-name>encoding</param-name>

                            <param-value>UTF-8</param-value>

                   </init-param>

                   <init-param>

                            <param-name>forceEncoding</param-name>

                            <param-value>true</param-value>

                   </init-param>

         </filter>

         <filter-mapping>

                   <filter-name>SetCharacter Encoding</filter-name>

                   <url-pattern>/*</url-pattern>

         </filter-mapping>

3.        实体类配置修改

<property name="annotatedClasses">

                            <list>

                                     <value>com.frank.model.Student</value>

                            </list>

                   </property>

                   修改为

                   <propertyname="packagesToScan" value="com.*.model" />

4.        数据源添加连接池信息

<!-- Connection Pooling Info -->

                   <propertyname="initialSize" value="5" />

                   <propertyname="maxActive" value="100" />

                   <propertyname="maxIdle" value="30" />

                   <propertyname="maxWait" value="500" />

                   <propertyname="defaultAutoCommit" value="false" />

5.        添加事务和aop支持

<beansxmlns="http://www.springframework.org/schema/beans"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"

         xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"

         xsi:schemaLocation="

           http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans.xsd

           http://www.springframework.org/schema/context

           http://www.springframework.org/schema/context/spring-context.xsd

           http://www.springframework.org/schema/aop

           http://www.springframework.org/schema/aop/spring-aop.xsd

           http://www.springframework.org/schema/tx

            http://www.springframework.org/schema/tx/spring-tx.xsd">

6.        配置事务管理

<!-- 配置事务管理 -->

         <beanid="transactionManager"

                   class="org.springframework.orm.hibernate3.HibernateTransactionManager">

                   <propertyname="sessionFactory" ref="sessionFactory" />

         </bean>

 

         <!-- 配置注解实现管理事务(cglib:proxy-target-class="true") -->

         <tx:annotation-driventransaction-manager="transactionManager"

                   proxy-target-class="true"/>

七、到此,项目搭建已完成,自己可以做一下其它方面的优化和配置,接下来可以做自己喜欢的项目开发了。

 

不知道为什么word里的“-->”到这里成“à”了,另外图片也没有了。

文库地址:http://wenku.baidu.com/view/7887319a680203d8ce2f2476?fr=prin

代码地址:http://download.csdn.net/detail/steve_frank/5559345

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值