一、添加3个框架的JAR包,完成后写配置文件;
1、web配置文件:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 3 <display-name>oa</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 <filter> 13 <filter-name>struts2</filter-name> 14 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 15 </filter> 16 <filter-mapping> 17 <filter-name>struts2</filter-name> 18 <url-pattern>*.action</url-pattern> 19 </filter-mapping> 20 <listener> 21 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 22 </listener> 23 <context-param> 24 <param-name>contextConfigLocation</param-name> 25 <param-value>classpath:applicationContext.xml</param-value> 26 </context-param> 27 </web-app>
2、Struts2配置文件
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> 3 <struts> 4 5 <!-- 配置开发模式 --> 6 <constant name="struts.devMode" value="true" /> 7 <!-- 把扩展名改为action --> 8 <constant name="struts.action.extension" value="action" /> 9 <!-- 把主题改为simple --> 10 11 12 <package name="default" namespace="/" extends="struts-default"> 13 <action name="test-*" class="testAction" method="{1}"> 14 <result name="list">/WEB-INF/jsp/test/test.jsp</result> 15 <result name="editUI">/WEB-INF/jsp/test/editUI.jsp</result> 16 <result name="addUI">/WEB-INF/jsp/test/addUI.jsp</result> 17 <result name="toList" type="redirectAction">test-list</result> 18 </action> 19 </package> 20 21 </struts>
3、Hibernate配置文件
1 <?xml version=‘1.0‘ encoding=‘UTF-8‘?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 5 <!-- Generated by MyEclipse Hibernate Tools. --> 6 <hibernate-configuration> 7 8 <session-factory> 9 10 <property name="hbm2ddl.auto">update</property> 11 <property name="show_sql">true</property> 12 13 <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> 14 <!-- <property name="connection.url">jdbc:mysql://127.0.0.1:3306/oa</property> 15 <property name="connection.username">root</property> <property name="connection.password">admin</property> 16 <property name="connection.driver_class">com.mysql.jdbc.Driver</property> 17 <property name="myeclipse.connection.profile">mysql</property> --> 18 19 <mapping resource="oa/test/model/Model.hbm.xml" /> 20 </session-factory> 21 22 </hibernate-configuration>
4、jdbc.properites文件
1 driver=com.mysql.jdbc.Driver 2 url=jdbc:mysql://127.0.0.1:3306/oa 3 user=root 4 password=admin
5、applicationContext.xml配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" 4 xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" 5 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 6 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 7 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 8 9 <context:component-scan base-package="oa.test,oa.hibernate"></context:component-scan> 10 <context:property-placeholder location="classpath:jdbc.properties" /> 11 12 13 <bean id="sessionFactory" 14 class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 15 <property name="configLocation" value="classpath:hibernate.cfg.xml"> 16 </property> 17 <property name="dataSource"> 18 <bean class="com.mchange.v2.c3p0.ComboPooledDataSource"> 19 <property name="jdbcUrl" value="${url}" /> 20 <property name="driverClass" value="${driver}" /> 21 <property name="user" value="${user}" /> 22 <property name="password" value="${password}" /> 23 <!-- 其他配置 --> 24 <!-- 初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 --> 25 <property name="initialPoolSize" value="3" /> 26 <!-- 连接池中保留的最小连接数。Default: 3 --> 27 <property name="minPoolSize" value="3" /> 28 <!-- 连接池中保留的最大连接数。Default: 15 --> 29 <property name="maxPoolSize" value="5" /> 30 <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 --> 31 <property name="acquireIncrement" value="3" /> 32 <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 33 0 --> 34 <property name="maxStatements" value="8" /> 35 <!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 36 0 --> 37 <property name="maxStatementsPerConnection" value="5" /> 38 <!-- 最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> 39 <property name="maxIdleTime" value="1800" /> 40 41 </bean> 42 </property> 43 </bean> 44 <bean id="transactionManager" 45 class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 46 <property name="sessionFactory" ref="sessionFactory" /> 47 </bean> 48 <tx:annotation-driven transaction-manager="transactionManager" /> 49 </beans>
二、测试,使用JUnit4测试;
1、添加一个TestAction类:
1 package cn.feeaooa.oa; 2 3 4 import javax.annotation.Resource; 5 6 import org.springframework.context.annotation.Scope; 7 import org.springframework.stereotype.Controller; 8 9 import com.opensymphony.xwork2.ActionSupport; 10 11 @SuppressWarnings("serial") 12 @Controller 13 @Scope("prototype") 14 public class TestAction extends ActionSupport { 15 16 @Resource 17 private TestService testService; 18 19 @Override 20 public String execute() throws Exception { 21 // TODO 自动生成的方法存根 22 System.out.println("TestAction.execute()"); 23 testService.saveTowUser(); 24 return "success"; 25 } 26 }
2、添加一个TestSpring类,用于测试JavaBean
1 package cn.feeaooa.oa; 2 3 import org.hibernate.SessionFactory; 4 import org.junit.Test; 5 import org.springframework.context.ApplicationContext; 6 import org.springframework.context.support.ClassPathXmlApplicationContext; 7 8 9 public class SpringTest { 10 11 private ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); 12 13 @SuppressWarnings("unused") 14 @Test 15 public void testBean() throws Exception{ 16 TestAction testAction = (TestAction)ac.getBean("testAction"); 17 System.out.println("SpringTest.testBean()"); 18 } 19 20 @Test 21 public void testSessionFactory() throws Exception{ 22 SessionFactory sessionFactory = (SessionFactory)ac.getBean("sessionFactory"); 23 System.out.println(sessionFactory); 24 } 25 26 @Test 27 public void testTransaction() throws Exception{ 28 TestService testService = (TestService)ac.getBean("testService"); 29 testService.saveTowUser(); 30 } 31 }
...
三、完成所有测试后,写数据库的操作类;
1、添加一个BaseDAO接口:
1 package cn.oa.base; 2 3 import java.util.List; 4 5 6 public interface BaseDAO<T> { 7 /** 8 * 保存实体 9 * @param entity 10 */ 11 void save(T entity); 12 /** 13 * 删除实体 14 * @param id 15 */ 16 void delete(Long id); 17 /** 18 * 更新实体 19 * @param entity 20 */ 21 void update(T entity); 22 /** 23 * 按id查询,返回对象 24 * @param id 25 * @return 26 */ 27 T getById(Long id); 28 /** 29 * 按多个id查询,返回数组 30 * @param ids 31 * @return 32 */ 33 List<T> getByIds(Long[] ids); 34 /** 35 * 查询所有实体 36 * @return 37 */ 38 List<T> findAll(); 39 40 }
2、添加BaseDAOImpl对BaseDAO接口实现
1 package cn.oa.base; 2 3 import java.lang.reflect.ParameterizedType; 4 import java.util.List; 5 6 import javax.annotation.Resource; 7 8 import org.hibernate.Session; 9 import org.hibernate.SessionFactory; 10 import org.hibernate.sql.Update; 11 12 @SuppressWarnings("unchecked") 13 public abstract class BaseDAOImpl<T> implements BaseDAO<T> { 14 15 @Resource 16 private SessionFactory sessionFactory; 17 private Class<T> clazz; 18 19 public BaseDAOImpl() { 20 // 使用反射技术得到T的真实类型 21 ParameterizedType pt = (ParameterizedType) this.getClass() 22 .getGenericSuperclass(); // 获取当前new的对象的 泛型的父类 类型 23 this.clazz = (Class<T>) pt.getActualTypeArguments()[0]; // 获取第一个类型参数的真实类型 24 System.out.println("clazz ---> " + clazz); 25 } 26 /** 27 * 获取可用的session 28 * @return 29 */ 30 protected Session getSession() { 31 return sessionFactory.getCurrentSession(); 32 } 33 /** 34 * 保存实体 35 */ 36 public void save(T entity) { 37 getSession().save(entity); 38 } 39 /** 40 * 删除实体 41 */ 42 public void delete(Long id) { 43 Object obj = getById(id); 44 if (obj != null) { 45 getSession().delete(obj); 46 } 47 } 48 /** 49 * 更新实体 50 * @param entity 51 */ 52 public void update(T entity) { 53 getSession().update(entity); 54 } 55 /** 56 * 按id查询 57 */ 58 public T getById(Long id) { 59 return (T) getSession().get(clazz, id); 60 } 61 /** 62 * 按id查询 63 */ 64 public List<T> getByIds(Long[] ids) { 65 return getSession().createQuery(// 66 "FROM User WHERE id IN(:ids)")// 67 .setParameterList("ids", ids).list(); 68 } 69 /** 70 * 查询所有实体 71 */ 72 public List<T> findAll() { 73 return getSession().createQuery(// 74 "FROM " + clazz.getSimpleName())// 75 .list(); 76 } 77 }
3、设计对象模型类
1 package oa.test.model; 2 3 public class Model { 4 private Long id; 5 private String name; 6 public Long getId() { 7 return id; 8 } 9 public void setId(Long id) { 10 this.id = id; 11 } 12 public String getName() { 13 return name; 14 } 15 public void setName(String name) { 16 this.name = name; 17 } 18 }
4、添加模型类配置文件
1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <hibernate-mapping package="oa.test.model"> 5 <class name="Model" table="my_Model"> 6 <id name="id"> 7 <generator class="native"/> 8 </id> 9 <property name="name" length="40"/> 10 </class> 11 </hibernate-mapping>
5、添加接口ModelDAO类
1 package oa.test.dao; 2 3 import oa.test.model.Model; 4 import cn.oa.base.BaseDAO; 5 6 public interface ModelDAO extends BaseDAO<Model> { 7 8 }
6、添加模型ModelDAOImpl类对ModelDAO接口实现
1 package oa.test.dao.Impl; 2 3 import org.springframework.stereotype.Repository; 4 5 import oa.test.dao.ModelDAO; 6 import oa.test.model.Model; 7 import cn.oa.base.BaseDAOImpl; 8 9 @Repository 10 public class ModelDAOImpl extends BaseDAOImpl<Model> implements ModelDAO { 11 12 13 }
7、添加事物类接口ModelService
1 package oa.test.service; 2 3 import java.util.List; 4 5 import oa.test.model.Model; 6 7 public interface ModelService { 8 List<Model> findAll(); 9 void delete(Long id); 10 void save(Model model); 11 Model getById(Long id); 12 void update(Model model); 13 }
8、在Action类中接受页面请求及对请求的实现
1 package oa.test.action; 2 3 import java.util.List; 4 5 import javax.annotation.Resource; 6 7 import oa.test.model.Model; 8 import oa.test.service.ModelService; 9 10 import org.springframework.context.annotation.Scope; 11 import org.springframework.stereotype.Controller; 12 13 import com.opensymphony.xwork2.ActionContext; 14 import com.opensymphony.xwork2.ActionSupport; 15 import com.opensymphony.xwork2.ModelDriven; 16 17 @SuppressWarnings("serial") 18 @Controller 19 @Scope("prototype") 20 public class TestAction extends ActionSupport implements ModelDriven<Model> { 21 22 @Resource 23 private ModelService modelService; 24 25 private Model model = new Model(); 26 27 public Model getModel() { 28 return model; 29 } 30 31 public void setModel(Model model){ 32 this.model = model; 33 } 34 35 public String list() throws Exception{ 36 List<Model> list = modelService.findAll(); 37 ActionContext.getContext().put("list", list); 38 return "list"; 39 } 40 41 public String addUI() throws Exception{ 42 return "addUI"; 43 } 44 45 public String add() throws Exception{ 46 modelService.save(model); 47 return "toList"; 48 } 49 50 public String del() throws Exception{ 51 modelService.delete(model.getId()); 52 return "toList"; 53 } 54 55 public String editUI() throws Exception{ 56 model = modelService.getById(model.getId()); 57 ActionContext.getContext().getValueStack().push(model); 58 return "editUI"; 59 } 60 61 public String edit() throws Exception{ 62 modelService.update(model); 63 List<Model> list = modelService.findAll(); 64 ActionContext.getContext().put("list", list); 65 return "toList"; 66 } 67 }
9、添加list.jsp页面
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <%@ taglib prefix="s" uri="/struts-tags" %> 3 <% 4 String path = request.getContextPath(); 5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 6 %> 7 8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 9 <html> 10 <head> 11 <base href="<%=basePath%>"> 12 13 <title>My JSP ‘test.jsp‘ starting page</title> 14 15 <meta http-equiv="pragma" content="no-cache"> 16 <meta http-equiv="cache-control" content="no-cache"> 17 <meta http-equiv="expires" content="0"> 18 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> 19 <meta http-equiv="description" content="This is my page"> 20 <!-- 21 <link rel="stylesheet" type="text/css" href="styles.css"> 22 --> 23 24 </head> 25 26 <body> 27 This is my JSP page. <br>adasd<br> 28 <table cellspacing="1" cellpadding="1" border="1" style="text-align: center;margin: 0 auto;"> 29 <tr> 30 <th width="150">编号</th><th width="150">名称</th><th width="150">操作</th> 31 </tr> 32 <s:iterator value="#list"> 33 <tr> 34 <td>${id}</td> 35 <td>${name}</td> 36 <td><a href="test-editUI.action?id=${id}">修改</a>/<a href="test-del.action?id=${id}" onclick="return confirm(‘确定要删除吗?‘)">删除</a></td> 37 </tr> 38 </s:iterator> 39 <tr><td></td><td></td> 40 <td><a href="test-addUI.action">添加</a></td> 41 </tr> 42 </table> 43 </body> 44 </html>
效果:
增删该查是完成了,但是还有一个问题就是中文乱码问题,明天再看看Hibernate配置。