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>









原创粉丝点击