程序的运行流程顺序:
由上顺序,浏览器->Action部分为自动运行,但后面Service等接口与前面代码如何关联不大,所以先配置完前面struts、hibernate文件后从后面功能往回写比较方便。
所用的包,类和配置文件
新建界面jsp文件
register.jsp,listAll.jsp,getSinglePerson.jsp,updatePerson.jsp,注册,所有用户,查看单个用户,更新页面
register.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<body>
<form action="savePerson.action">
username:<input type="text" name="username" size="20"><br>
password:<input type="password" name="password" size="20"><br>
age:<input type="text" name="age" size="20"><br>
<input type="submit" value="submit">
</form>
</body>
</html>
listAll.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<script type="text/javascript">
function del(){
if(confirm("确定删除吗?")){
return true;
}
return false;
}
</script>
</head>
<body>
<table width="80%" align="center" border="1">
<tr>
<th>username</th>
<th>password</th>
<th>age</th>
<th>registerDate</th>
<th>update</th>
<th>delete</th>
</tr>
<s:iterator value="#request.list" id="person">
<tr>
<td>
<s:a href="getSinglePerson.action?id=%{#person.id}"><s:property value="username"/></s:a>
</td>
<td>
<s:property value="password"/>
</td>
<td>
<s:property value="age"/>
</td>
<td>
<s:property value="registerDate"/>
</td>
<td> <s:a href="toupdatePerson.action?id=%{#person.id}">update</s:a>
</td>
<td><s:a href="deletePerson.action?id=%{#person.id}" οnclick="return del();">delete</s:a>
</td>
</tr>
</s:iterator>
</table>
</body>
</html>
getSinglePerson.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
username:<s:property value="#request.person.username"></s:property>
password:<s:property value="#request.person.password" />
age:<s:property value="#request.person.age"/>
registerDate:<s:property value="#request.person.registerDate"/>
</body>
</html>
updatePerson.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<body>
<form action="updatePerson">
username:<s:textfield name="username" value="%{#request.person.username}"></s:textfield>
password:<s:textfield name="password" value="%{#request.person.password}"></s:textfield>
age:<s:textfield name="age" value="%{#request.person.age}"></s:textfield>
registerDate:<s:textfield name="registerDate" value="%{#request.person.registerDate}" readonly="true"></s:textfield>
<s:hidden name="id" value="%{#request.person.id}" ></s:hidden>
<input type="submit" value="更改" />
</form>
</body>
</html>
模型,andy.model.Person.java
package andy.model;
import java.sql.Date;
public class Person {
//省略get/set方法
private Integer id;
private String username;
private String password;
private Integer age;
private Date registerDate;
}
hibernate配置文件,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="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/mydata</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property><!-- org.hibernate.dialect.Oracle11Dialect -->
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
映射文件Person.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="andy.model.Person" table="person">
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id>
<property name="username" column="username" type="string"></property>
<property name="password" column="password" type="string"></property>
<property name="age" column="age" type="int"></property>
<property name="registerDate" column="registerDate" type="date"></property>
</class>
</hibernate-mapping>
至此,先写后面接口,即是数据库->DAO->Service->Action,这样可以减少程序报错
工具类,andy.util.HibernateUtil.java
package andy.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try{
Configuration config=new Configuration().configure();//通过hibernate.hbm.xml获取数据库配置
sessionFactory = config.buildSessionFactory();//连接数据库
}catch(Exception e){
e.printStackTrace();
}
}
public static Session openSession(){
Session session=sessionFactory.openSession();
return session;
}
public static void close(Session session){
if(null!=session)
session.close();
}
}
DAO的抽象类,andy.dao.PersonDAO.java
package andy.dao;
import java.util.List;
import andy.model.Person;
public interface PersonDAO {
//DAO层抽象方法定义
public void savePerson(Person person);
public List<Person> listAllPerson();
public void removePerson(Integer id);
public Person getSinglePerson(Integer id);
public void updatePerson(Person person);
}
DAO的实现类,andy.dao.impl.PersonDAOImpl.java
package andy.dao.impl;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import andy.dao.PersonDAO;
import andy.model.Person;
import andy.util.HibernateUtil;
public class PersonDAOImpl implements PersonDAO {
//DAO层抽象方法定义
@Override
public void savePerson(Person person) {
//保存用户
//获取session对象及Transaction事务
Session session=HibernateUtil.openSession();
Transaction tx=session.beginTransaction();
try{ //操作数据库进行保存
session.save(person);
tx.commit();
}catch(Exception e){
if(null!=tx){
tx.rollback();//如果操作失败,执行回滚
}
}
finally{
HibernateUtil.close(session);//操作完数据库关闭连接
}
}
@SuppressWarnings("unchecked")
@Override
public List<Person> listAllPerson() {
// 获取所有用户列表信息
Session session=HibernateUtil.openSession();
Transaction tx=session.beginTransaction();
List<Person> list =null;
try{
Query query=session.createQuery("from Person");//Person是类的名字,而不是表的名字
list=(List<Person>)query.list();
tx.commit();
}catch(Exception ex){
if(null!=tx){
tx.rollback();
}
}
finally{
HibernateUtil.close(session);
}
return list;
}
@Override
public void removePerson(Integer id) {
//删除用户
Session session=HibernateUtil.openSession();
Transaction tx=session.beginTransaction();
try{
Person person=(Person)session.get(Person.class, id);
session.delete(person);
tx.commit();
}catch(Exception ex){
if(null!=tx){
tx.rollback();
}
}finally{
HibernateUtil.close(session);
}
}
@Override
public Person getSinglePerson(Integer id) {
// 获取单个用户信息
Session session = HibernateUtil.openSession();
Transaction tx=session.beginTransaction();
Person person=null;
try{
person =(Person) session.get(Person.class, id);
}catch(Exception e){
if(null!=tx)
tx.rollback();
}finally{
session.close();
}
return person;
}
@Override
public void updatePerson(Person person) {
// 更新用户信息
Session session=HibernateUtil.openSession();
Transaction tx=session.beginTransaction();
try{
session.update(person);
tx.commit();
}catch(Exception e){
if(null!=tx)
tx.rollback();
}finally{
session.close();
}
}
}
Service抽象方法,andy.service.PersonService.java
package andy.service;
import java.util.List;
import andy.model.Person;
public interface PersonService {
//Service层抽象方法定义
public void savePerson(Person person);
public List<Person> listAllPersons();
public void removePerson(Integer id);
public Person getSinglePerson(Integer id);
public void updatePerson(Person person);
}
Service实现,andu.service.impl.PersonServiceImpl.java
package andy.service.impl;
import java.util.List;
import andy.dao.PersonDAO;
import andy.dao.impl.PersonDAOImpl;
import andy.model.Person;
import andy.service.PersonService;
public class PersonServiceImpl implements PersonService {
//Service抽象方法实现类
@Override
public void savePerson(Person person) {
// TODO Auto-generated method stub
PersonDAO personDAO = new PersonDAOImpl();
personDAO.savePerson(person);
}
@Override
public List<Person> listAllPersons() {
// TODO Auto-generated method stub
PersonDAO personDAO = new PersonDAOImpl();
return personDAO.listAllPerson();
}
@Override
public void removePerson(Integer id) {
// TODO Auto-generated method stub
PersonDAO personDAO=new PersonDAOImpl();
System.out.println("获取DAO成功,id为:"+id);
personDAO.removePerson(id);
}
@Override
public Person getSinglePerson(Integer id) {
// TODO Auto-generated method stub
PersonDAO personDAO=new PersonDAOImpl();
return personDAO.getSinglePerson(id);
}
@Override
public void updatePerson(Person person) {
// TODO Auto-generated method stub
PersonDAO personDAO=new PersonDAOImpl();
personDAO.updatePerson(person);
}
}
回头写
Action实现Service接口,andy.action.PersonAction.java
package andy.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import andy.model.Person;
import andy.service.PersonService;
import andy.service.impl.PersonServiceImpl;
public class PersonAction extends ActionSupport{
private int id;
private String username;
private String password;
private int age;
java.sql.Date registerDate;
public java.sql.Date getRegisterDate() {
return registerDate;
}
public void setRegisterDate(java.sql.Date registerDate) {
this.registerDate = registerDate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//用户注册
public String savePerson() throws Exception{
PersonService personService=new PersonServiceImpl();
//获取数据
Person person =new Person();
person.setUsername(username);
person.setPassword(password);
person.setAge(age);
registerDate = new java.sql.Date(
new java.util.Date().getTime());
person.setRegisterDate(registerDate);
//保存数据
personService.savePerson(person);
//获取数据库所有对象+显示
List<Person> list = personService.listAllPersons();
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("list", list);
return SUCCESS;
}
//删除用户
public String deletePerson()throws Exception{
PersonService personService=new PersonServiceImpl();
personService.removePerson(id);
List <Person> list = personService.listAllPersons();
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("list", list);
return SUCCESS;
}
//获取单个用户信息
public String getSinglePerson()throws Exception{
PersonService personService=new PersonServiceImpl();
//通过传递获得某用户ID从而查询获取用户信息
Person person=personService.getSinglePerson(id);
HttpServletRequest request = ServletActionContext.getRequest();
request.setAttribute("person", person);
return SUCCESS;
}
//更新用户信息 --ID --registerDate不允许更改
public String updatePerson()throws Exception{
PersonService personService=new PersonServiceImpl();
//获取更新数据
Person person=personService.getSinglePerson(id);
person.setUsername(username);
person.setPassword(password);
person.setAge(age);
//更新
personService.updatePerson(person);
//返回新列表
List <Person> list = personService.listAllPersons();
HttpServletRequest request= ServletActionContext.getRequest();
request.setAttribute("list", list);
return SUCCESS;
}
}
最后
配置struts.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<package name="hibernate" extends="struts-default">
<action name="savePerson" class="andy.action.PersonAction" method="savePerson">
<result>/listAll.jsp</result>
</action>
<action name="deletePerson" class="andy.action.PersonAction" method="deletePerson">
<result>/listAll.jsp</result>
</action>
<action name="getSinglePerson" class="andy.action.PersonAction" method="getSinglePerson">
<result>/getSinglePerson.jsp</result>
</action>
<action name="toupdatePerson" class="andy.action.PersonAction" method="getSinglePerson">
<result>/updatePerson.jsp</result>
</action>
<action name="updatePerson" class="andy.action.PersonAction" method="updatePerson">
<result>/listAll.jsp</result>
</action>
</package>
</struts>
至此,基于mysql使用struts2+hibernate进行用户管理代码已完成,自己手动实现一下吧~~~