当前位置: 首页 >服务端 > spring+hibeate+Struts2 整合(全注解及注意事项)

spring+hibeate+Struts2 整合(全注解及注意事项)

  最近帮同学做毕设,一个物流管理系统,一个点餐系统,用注解开发起来还是很快的,就是刚开始搭环境费了点事,今天把物流管理系统的一部分跟环境都贴出来,有什么不足的,请大神不吝赐教。
  
  1、结构如下
    

  spring+hibeate+Struts2 整合(全注解及注意事项) _ JavaClub全栈架构师技术笔记


  2、jar包如下

   spring+hibeate+Struts2 整合(全注解及注意事项) _ JavaClub全栈架构师技术笔记

  3、首先是spring.xml
  
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="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/beanshttp://www.springframework.org/schema/beans/spring-beans-2.5.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-2.5.xsdhttp://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.5.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.5.xsd"><context:annotation-config /><context:component-scan base-package="cn.lGo" /><context:property-placeholder location="WEB-INF/jdbc.properties" /><bean id="dataSource" destroy-method="close"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="${jdbc.driverClassName}" /><property name="url" value="${jdbc.url}" /><property name="useame" value="${jdbc.useame}" /><property name="password" value="${jdbc.password}" /></bean><bean id="sf"class="org.springframework.orm.hibeate3.annotation.AnnotationSessionFactoryBean"><property name="dataSource" ref="dataSource" /> <property name="packagesToScan"><list><value>cn.lGo.entity</value></list></property><property name="hibeateProperties"><props><prop key="hibeate.dialect">org.hibeate.dialect.MySQLDialect</prop><prop key="hibeate.show_sql">true</prop></props></property></bean> <bean id="hibeateTemplate" class="org.springframework.orm.hibeate3.HibeateTemplate"><property name="sessionFactory" ref="sf"></property></bean><bean id="txManager"class="org.springframework.orm.hibeate3.HibeateTransactionManager"><property name="sessionFactory" ref="sf" /></bean><!-- 配置事务特性 --><tx:advice id="idAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="find*" propagation="NOT_SUPPORTED" read-only="true" isolation="READ_COMMITTED" /><tx:method name="save*" propagation="REQUIRED" isolation="READ_COMMITTED" /><tx:method name="delete*" propagation="REQUIRED" isolation="READ_COMMITTED" /><tx:method name="update*" propagation="REQUIRED" isolation="READ_COMMITTED" /><!-- Action中execute,暂时先用REQUIRED,以后真对查询操作,修改以后在使用NOT_SUPPORTED --><tx:method name="*" propagation="REQUIRED" /></tx:attributes></tx:advice><!-- Aop配置事务作用在那个位置:dao--><aop:config><aop:pointcut expression="execution (* cn.lGo.dao..*.*(..))" id="curd"/><aop:advisor advice-ref="idAdvice" pointcut-ref="curd"/></aop:config></beans>
  这个配置文件就不说了,在之前的文章中有提到过的。

4、web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <display-name></display-name>  <welcome-file-list><welcome-file>login.ftl</welcome-file>  </welcome-file-list>  <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring.xml</param-value>  </context-param>  <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>  <filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-patte>/*</url-patte></filter-mapping></web-app>

 

上述中:
  
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring.xml</param-value>  </context-param>  <listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

 

指的是在项目启动时加载spring的配置文件

<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-patte>/*</url-patte></filter-mapping>

 

指的是配置使用struts2注解

5、一个实体类
package cn.lGo.entity;import javax.persistence.Entity;import javax.persistence.Id;import javax.persistence.Table;@Entity@Table(name="user")public class User {private Integer id;private String name;private String password;private String address;@Idpublic Integer getId() {retu id;}public void setId(Integer id) {this.id = id;}public String getName() {retu name;}public void setName(String name) {this.name = name;}public String getPassword() {retu password;}public void setPassword(String password) {this.password = password;}public String getAddress() {retu address;}public void setAddress(String address) {this.address = address;}}

 

其中要注意的问题是,如果数据库中有字段为user_name,而在实体类中写userName,是不会自动映射的,要加一个注解@Column(name="user_name")。
另外,还有一点实体类中使用hibeate注解时,不要使用数据库的敏感词

6、dao
package cn.lGo.dao;import java.util.List;import cn.lGo.entity.User;public interface UserDao {/** * 根据用户名查找对应用户 * @param userName * @retu */public List<User> findUserByName(String userName);}

 

7、daoImpl 实现类
package cn.lGo.dao.impl;import java.util.List;import javax.annotation.Resource;import org.springframework.orm.hibeate3.HibeateTemplate;import org.springframework.stereotype.Component;import cn.lGo.dao.UserDao;import cn.lGo.entity.User;@Componentpublic class UserDaoImpl implements UserDao {private HibeateTemplate hibeateTemplate;public HibeateTemplate getHibeateTemplate() {retu hibeateTemplate;}@Resourcepublic void setHibeateTemplate(HibeateTemplate hibeateTemplate) {this.hibeateTemplate = hibeateTemplate;}@SuppressWaings("unchecked")public List<User> findUserByName(String userName) {retu hibeateTemplate.find("from User where name= ? ",new Object[]{userName});}}

 

这个在spring注解呢篇中说过。
@Component 是将该类注册到spring中,如果没写属性,就会相当于 <bean name="userDaoImpl" ...首字母小写
@Resource 注入,将sprin容器中name="hibeateTemplate"的 注入进去

8、service
package cn.lGo.service;import java.util.List;import javax.annotation.Resource;import org.springframework.stereotype.Component;import cn.lGo.dao.UserDao;import cn.lGo.entity.User;@Componentpublic class UserService {private UserDao userDao;public UserDao getUserDao() {retu userDao;}@Resource(name="userDaoImpl")public void setUserDao(UserDao userDao) {this.userDao = userDao;}public List<User> findUserByName(String userName){retu userDao.findUserByName(userName);}}

 

@Component还是把name="userService"的bean注册到spring容器
这个@Resource是将name="userDaoImpl"注给userDao,面向接口的编程,更具有灵活性

9、Action
package cn.lGo.action;import java.util.List;import javax.annotation.Resource;import org.apache.struts2.convention.annotation.Namespace;import org.apache.struts2.convention.annotation.ParentPackage;import org.apache.struts2.convention.annotation.Result;import org.apache.struts2.convention.annotation.Results;import org.springframework.stereotype.Component;import com.opensymphony.xwork2.ActionContext;import cn.lGo.entity.User;import cn.lGo.service.UserService;@Component("loginAction")@Namespace(value="/checkUser")@ParentPackage("json-default")@Results({@Result(name="success",type="json")})public class LoginAction {private String userName;private String password;private String flag;private UserService userService;public String getFlag() {retu flag;}public void setFlag(String flag) {this.flag = flag;}@Resourcepublic void setUserService(UserService userService) {this.userService = userService;}public String getUserName() {retu userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {retu password;}public void setPassword(String password) {this.password = password;}public String execute(){System.out.println("LoginAction.execute()");List<User> listUser=userService.findUserByName(userName);if(listUser.size()==0){flag="0";}else{if(listUser.get(0).getPassword().equals(password)){flag="2";User user=new User();user.setName(userName);user.setPassword(password);user.setAddress(listUser.get(0).getAddress());ActionContext.getContext().getSession().put("user", user);}else{flag="1";}}retu "success";}}

 

@Component("loginAction")将action注册到容器,并不是直接通过struts2访问的,他会根据@Namespace(value="/checkUser"),找到action的type(地址),通过spring容器反射出一个这样的action。
另外还需要很注意的一点!!!!! 在action中写的注入是不能有get()方法的,只能由set(),就像文中userService一样,具体不清楚,还望大婶赐教。。。。

10、页面 login.ftl
<!DOCTYPE html><html>  <head><title>Bootstrap 101 Template</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- jQuery (necessary for Bootstrap's JavaScript plugins) --><script src="dist/js/jquery-1.7.1.min.js"></script><!-- Include all compiled plugins (below), or include individual files as needed --><script src="dist/js/bootstrap.min.js"></script><!-- Bootstrap --><link rel="stylesheet" href="dist/css/bootstrap.min.css"><link rel="stylesheet" href="dist/css/bootstrap-theme.css"> <style>body{  text-align: center;} </style>  <script type="text/javascript">  $(function(){  $("#sign").click(function(){  var name=$("#userName").val();  var password=$("#password").val();  if(name==""||password==""){  alert("用户名或密码不能为空");  $("#userName").val("");  $("#password").val("");  retu;  }  if(name=="admin"&&password=="admin"){  location.href="admin/main.ftl";  retu;  }  $.ajax({  "url":"checkUser/login",  "type":"post",  "data":{  "userName":name,  "password":password  },  "dataType":"json",  "success":function(data){  if(data.flag=="0"){  $("#userName").val("");  $("#password").val("");  alert("用户名不存在,请重新输入");  retu;  }else if(data.flag=="1"){  $("#userName").val("");  $("#password").val("");  alert("密码不正确,请重新输入");  retu;  }else if(data.flag=="2"){  location.href="customer/userMain.ftl";  }  }  });  });  });  </script>  </head>  <body >  <div class="container" id="div1">  <p class="navbar-text navbar-left" style="font-weight:bold;">欢迎使用1Go物流管理系统</p>  <div class="jumbotron" >  <form class="form-inline" role="form" >  <div class="form-group"><input type="text" class="form-control" id="userName" placeholder="UserName">  </div>  <div class="form-group"><input type="password" class="form-control" id="password" placeholder="Password">  </div>  <button type="button" class="btn btn-default" id="sign">Sign in</button></form>  </div></div></body></html>

 

前台页面用的是BootStrap3来做的,感觉有种高大上的感觉,hiahiahiahia


这是该项目中的登录部分,麻雀虽小五脏俱全,渐渐的感觉生活少了些刺激感,嫩们怎么寻找生活的刺激。。。





作者:以梦为码
来源链接:https://www.cnblogs.com/volare/p/3709676.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/server/113435.html

标签:Spring注解
分享给朋友:

“spring+hibeate+Struts2 整合(全注解及注意事项)” 的相关文章

[C#]richtextbox实现拖放 2022年05月17日 20:25:47
Logger的级别 2022年05月19日 20:04:12
如何学习一门语言 2022年05月23日 21:03:30
信息系统项目干系人管理 2022年05月24日 20:43:17
信息系统项目管理案例3 2022年05月24日 21:20:05
Servlet JSP 二重修炼:Filter过滤器 2022年05月26日 20:15:41
Nacos Cluster Building 2022年05月26日 21:34:55