Struts2、Spring和Hibernate的整合
来源:互联网 发布:苹果手机监视软件 编辑:程序博客网 时间:2024/05/28 05:18
整合Hibernate和spring需要的依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>Maven_SSH</groupId> <artifactId>Maven_SSH</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>Maven_SSH Maven Webapp</name> <url>http://maven.apache.org</url> <!-- 改版本用 properties里面的键可以随便写 --> <properties> <spring.version>4.3.10.RELEASE</spring.version> <struts.version>2.3.33</struts.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- 引入Servlet依赖 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.0-b07</version> <scope>provided</scope></dependency><!-- 加入hibernate核心库 --><dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.10.Final</version></dependency><!-- 引入MySQL依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version></dependency><!-- 加入Spring核心库依赖 --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring整合Hibernate依赖 --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version></dependency><!-- spring 的AspectJ依赖,解析事务切点 --><dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version></dependency> <!-- 加入c3p0数据库连接池依赖 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version></dependency><!-- 引入struts2依赖 --><dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts.version}</version></dependency><!-- struts2整合Spring插件的整合包 --><dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-spring-plugin</artifactId> <version>${struts.version}</version></dependency> <!--json-lib依赖--> <dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency> </dependencies> <build> <finalName>Maven_SSH</finalName> </build></project>
第一步:把Hibernate写好,先把Hibernate需要的依赖导进来,写一个entity的类package com.zking.entity;public class Person {private int pid;private String pname;private String psex;private int page;public Person() {}public Person(int pid) {this.pid = pid;}public Person(String pname, String psex, int page) {this.pname = pname;this.psex = psex;this.page = page;}public Person(int pid, String pname, String psex, int page) {super();this.pid = pid;this.pname = pname;this.psex = psex;this.page = page;}public int getPid() {return pid;}public void setPid(int pid) {this.pid = pid;}public String getPname() {return pname;}public void setPname(String pname) {this.pname = pname;}public String getPsex() {return psex;}public void setPsex(String psex) {this.psex = psex;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}}在写一个person.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2017-8-29 21:34:37 by Hibernate Tools 3.5.0.Final --><hibernate-mapping> <class name="com.zking.entity.Person" table="PERSON"> <id name="pid" type="int"> <column name="PID" /> <generator class="native" /> </id> <property name="pname" type="java.lang.String"> <column name="PNAME" /> </property> <property name="psex" type="java.lang.String"> <column name="PSEX" /> </property> <property name="page" type="int"> <column name="PAGE" /> </property> </class></hibernate-mapping>在把Hibernate.cfg.xml写好
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <!-- 整合之后就不要了 --> <!-- <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> --> <property name="show_sql">true</property> <property name="format_sql">true</property><!-- 整合之后就不要了 --><!-- <mapping resource="com/zking/entity/Person.hbm.xml"/> --> </session-factory></hibernate-configuration>最后把Hibernate测试一下再把spring的依赖导进来package com.zking.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.junit.Test;import com.zking.entity.Person;public class TestHibernate {@Testpublic void test(){Configuration configuration=new Configuration().configure();SessionFactory sessionFactory=configuration.buildSessionFactory();Session session=sessionFactory.openSession();Transaction transaction=session.beginTransaction();session.save(new Person("郁郁", "男", 41));transaction.commit();session.close();sessionFactory.close();}}第二步:写一个db.properties,连接数据库用的,不过这一步还没有和数据库连接
uname=rootupass=rooturl=jdbc:mysql://localhost:3306/testdriver_class=com.mysql.jdbc.DriverinitPoolSize=3maxPoolSize=20所有我们要写一个applicationContext-public.xml,在这里面引入db.properties<?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:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"><!-- 1.引入db.properties --><context:property-placeholder location="classpath:db.properties"/><!-- 2.配置数据源 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="user" value="${uname}"></property><property name="password" value="${upass}"></property><property name="jdbcUrl" value="${url}"></property><property name="driverClass" value="${driver_class}"></property><property name="initialPoolSize" value="${initPoolSize}"></property><property name="maxPoolSize" value="${maxPoolSize}"></property></bean><!-- 3.配置sessionFactory --><bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"><!-- 01.引入数据源 --><property name="dataSource" ref="dataSource"></property><!-- 02.加载Hibernate配置文件 --><property name="configLocation" value="classpath:hibernate.cfg.xml"></property><!-- 03.加载Hibernate映射文件 --><property name="mappingLocations" value="classpath:com/zking/entity/*.hbm.xml"></property></bean><!-- 4.配置事务 --><bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 5.配置事务的属性 --><!-- 事务的底层是advice通知 --><tx:advice id="myAdvice" transaction-manager="transactionManager"><tx:attributes><!-- propagation="REQUIRED"需要有属性 --><tx:method name="add*" propagation="REQUIRED"/><tx:method name="update*" propagation="REQUIRED"/><tx:method name="delete*" propagation="REQUIRED"/><tx:method name="*"/></tx:attributes></tx:advice><!-- 6.配置事务的切点 --><aop:config><aop:pointcut expression="execution(* com.zking.dao.*.*(..))" id="myCut"/><aop:advisor advice-ref="myAdvice" pointcut-ref="myCut"/></aop:config></beans>spring的applicationContext不只可以写applicationContext-public.xml,还可以有dao、biz、action等名字可以随便写,但是要“applicationContext-”要一致,否则会报错。applicationContext-dao.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:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 配置personDaoImp --><bean id="personDaoImp" class="com.zking.dao.PersonDaoImp"><property name="sessionFactory" ref="sessionFactory"></property></bean></beans>applicationContext-biz.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:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 配置personBizImp --><bean id="personBizImp" class="com.zking.biz.PersonBizImp"><property name="personDao" ref="personDaoImp"></property></bean></beans>applicationContext-action.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:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"><!-- 配置PersonAction --><bean id="personAction" class="com.zking.action.PersonAction" scope="prototype"><property name="personBiz" ref="personBizImp"></property></bean></beans>在这我就只写dao方法了,其他的和以前差不多,只是在里面我们不是用new了,用的是注入举个栗子:在biz里我们要调用dao里的方法:public PersonDao personDao;
public PersonDao getPersonDao() {
return personDao;
}
public void setPersonDao(PersonDao personDao) {
this.personDao = personDao;
}//添加
public void addPerson(Person person) {
personDao.addPerson(person);
}package com.zking.dao;import java.io.Serializable;import java.util.List;import org.hibernate.Session;import org.hibernate.SessionFactory;import com.zking.entity.Person;public class PersonDaoImp implements PersonDao{//注入一个sessionFactoryprivate SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;}public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}public Session getSession(){return sessionFactory.getCurrentSession();}//添加public void addPerson(Person person) {Person users=new Person(person.getPname(), person.getPsex(), person.getPage());Serializable Serializable = getSession().save(users); int a=(Integer) Serializable; System.out.println(a);}//修改public void updatePerson(Person person) {Person persons=getSession().get(Person.class, person.getPid());persons.setPname(person.getPname());persons.setPsex(person.getPsex());persons.setPage(person.getPage());getSession().update(persons);}//删除 public void deletePerson(int pid) {Person person=new Person();person.setPid(pid);getSession().delete(person);}//查询 public List<Person> getAll() {//查询所有List<Person> list=getSession().createQuery("from Person").list();return list;}//分页查询public List<Person> getAll(int pageNo, int pageSize) {//分页List<Person> list=getSession().createQuery("from Person").setFirstResult((pageNo-1)*pageSize).setMaxResults(pageSize).list();return list;}public int IntCount() {int n=Integer.parseInt(getSession().createQuery("select count(*) from Person").uniqueResult().toString());return n;}}在写一个personAction.java
package com.zking.action;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;import com.zking.biz.PersonBiz;import com.zking.entity.Person;import net.sf.json.JSON;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class PersonAction extends ActionSupport{HttpServletResponse resp=ServletActionContext.getResponse();HttpServletRequest req=ServletActionContext.getRequest();private Person person;private PersonBiz personBiz;private int pid;private String pname;private String psex;private int page;//添加public String add() throws Exception {System.out.println("进来了PersonAction。。。add");resp.setContentType("text/html; charset=UTF-8");req.setCharacterEncoding("UTF-8");personBiz.addPerson(new Person(pname, psex, page));return null;}//修改public String update() throws Exception{System.out.println("进来了PersonAction。。。update"); resp.setContentType("text/html; charset=UTF-8");req.setCharacterEncoding("UTF-8");personBiz.updatePerson(new Person(pname, psex, page));return null;}//删除public String delete() throws Exception{System.out.println("进来了PersonAction。。。delete");resp.setContentType("text/html; charset=UTF-8");req.setCharacterEncoding("UTF-8");System.out.println(pid);personBiz.deletePerson(pid);return null;}//分页查询public String select() throws IOException{resp.setContentType("text/html; charset=UTF-8");//设置当前页int intPage =new Integer(req.getParameter("page"));//设置每页显示的数量int intPageSize =new Integer(req.getParameter("rows"));List<Person> list=personBiz.getAll(intPage, intPageSize);int n=personBiz.IntCount();JSONArray jsonarray=JSONArray.fromObject(list);JSONObject js=new JSONObject();js.put("total", ""+n);js.put("rows", jsonarray);PrintWriter pw=resp.getWriter();pw.write(js.toString());pw.close();return null;}public PersonBiz getPersonBiz() {return personBiz;}public void setPersonBiz(PersonBiz personBiz) {this.personBiz = personBiz;}public Person getPerson() {return person;}public void setPerson(Person person) {this.person = person;}public int getPid() {return pid;}public void setPid(int pid) {this.pid = pid;}public String getPname() {return pname;}public void setPname(String pname) {this.pname = pname;}public String getPsex() {return psex;}public void setPsex(String psex) {this.psex = psex;}public int getPage() {return page;}public void setPage(int page) {this.page = page;}}写好了spring之后进行springHibernate的测试
package com.zking.test;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.zking.dao.PersonDao;import com.zking.entity.Person;public class TestSpringHibernate {@Testpublic void test1(){ApplicationContext ac=new ClassPathXmlApplicationContext(new String[]{"applicationContext-public.xml","applicationContext-dao.xml"});PersonDao personDao=(PersonDao) ac.getBean("personDaoImp");personDao.addPerson(new Person("李里", "男", 30));}}第三步:与Struts2整合,写一个struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts><constant name="struts.enable.DynamicMethodInvocation" value="true" /> <package name="mypackage" extends="struts-default"> <action name="personAtion*" class="personAction" method="{1}"></action> </package></struts>我用easyui写了一个简单的增删改查的页面<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title> <!-- 引入easyui库 --><link rel="stylesheet" type="text/css" href="easyui/themes/default/easyui.css"> <link rel="stylesheet" type="text/css" href="easyui/themes/icon.css"><script type="text/javascript" src="easyui/jquery.min.js"></script> <script type="text/javascript" src="easyui/jquery.easyui.min.js"></script> <script type="text/javascript" src="easyui/locale/easyui-lang-zh_CN.js"></script><script type="text/javascript">var DBindex; $(function(){$('#dg').datagrid({ url:'personAtionselect.action', pagination: true, //显示分页 pageSize: 3, //页大小 pageList: [3, 6, 9, 11], //页大小下拉选项此项各value是pageSize的倍数 fitColumn: true, //列自适应宽度 striped: true, //行背景交换 nowap: true, //列内容多时自动折至第二行 nowrap : false, idField: 'pid', //主键 loadMsg:'正在拼命加载中...', columns:[[ {field:'pid',title:'编号',width:75,align:'center'}, {field:'pname',title:'姓名',width:75,align:'center',"editor":{type:'validatebox'}}, {field:'psex',title:'性别',width:75,align:'center',"editor":{type:'validatebox'}}, {field:'page',title:'年龄',width:75,align:'center',"editor":{type:'validatebox'}}, ]],onDblClickRow:function(index,row){ DBindex=index; $('#dg').datagrid('beginEdit',index); },onClickRow:function(index,row){ DBindex=index; },toolbar: [{iconCls: 'icon-add',text:"添加",handler: function(){DBindex=0;$('#dg').datagrid('insertRow',{index:0,// 索引从0开始row: {}});$('#dg').datagrid('beginEdit',0);}},'-',{iconCls: 'icon-remove',text:"删除",handler: function(){var row=$('#dg').datagrid("getRows")[DBindex];if(row!=null){var pid=row["pid"];$.post("personAtiondelete.action",{"pid":pid},function(data){$('#dg').datagrid('reload');});}}},'-',{iconCls: 'icon-save',text:"保存",handler: function(){$('#dg').datagrid('endEdit',DBindex); var row=$('#dg').datagrid("getRows")[DBindex]; if(row!=null){var pname=row["pname"];var psex=row["psex"];var page=row["page"];$.post("personAtionadd.action",{"pname":pname,"psex":psex,"page":page},function(data){$('#dg').datagrid('reload');}); }}},'-',{iconCls: 'icon-edit',text:"修改",handler: function(){$('#dg').datagrid('endEdit',DBindex); var row=$('#dg').datagrid("getRows")[DBindex]; if(row!=null){var pid=row["pid"];var pname=row["pname"];var psex=row["psex"];var page=row["page"];$.post("personAtionupdate.action",{"pid":pid,"pname":pname,"psex":psex,"page":page},function(data){$('#dg').datagrid('reload');}); }}}]}); });</script></head><body> <div align="center"><table id="dg" style="width:301px;height:500px"></table> </div></body> </html>还要配置web.xml<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app> <display-name>Archetype Created Web Application</display-name> <!-- 加载spring alt+\ 必须按照context-param->filter->listener的顺序来--> <!-- needed for ContextLoaderListener --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext-*.xml</param-value></context-param> <!-- 加载Struts2 --> <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-pattern>*.action</url-pattern> </filter-mapping><!-- Bootstraps the root web application context before servlet initialization --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener></web-app>
阅读全文
0 0
- Struts2、Spring和Hibernate的整合
- Struts2-Spring和Hibernate整合
- struts2 spring hibernate的整合
- struts2+hibernate+spring的整合
- Struts2+Spring+Hibernate的整合
- Struts2+Spring+Hibernate的整合
- SSH框架整合(Spring整合Struts2,和Spring整合Hibernate)
- Struts2,Hibernate和Spring之间的框架整合
- 整合Struts2,Hibernate和Spring的一个简单例子
- Struts2和Hibernate的整合
- spring和mybatis ,hibernate, struts2框架整合
- Spring整合Hibernate和Struts2 (SSH)
- struts2+hibernate+spring整合
- struts2 spring hibernate 整合
- Spring struts2 hibernate 整合
- struts2+spring+hibernate整合
- struts2+spring+hibernate整合
- struts2+spring+hibernate整合
- vs2013 代码c++智能提示选中
- IOS编程常用的快捷键(Xcode)
- java利用poi创建excel文件并写入数据
- 理解javascript中的with关键字
- java日志处理组件log4j--log4j.xml配置详解
- Struts2、Spring和Hibernate的整合
- Doxygen注释规范
- Java 小数部分保留几位小数
- 51单片机调时电子钟
- easyui合并列,每列大小会相等,如何处理?
- 分布式DB四问 1如何实现高效主键2如何解决分布式事务3如何解决数据扩容4如何进行高效的数据聚合?
- python—matplotlib数据可视化实例注解系列-----之箱状图
- 最好的vsftpd配置教程
- PHP实现微信支付(jsapi支付)和退款(无需集成支付SDK)