对Oracle数据库的部门表进行增删改查:
话不多说;
1.实体类可以不写.hbm.xml文件直接写注解方式:
package com.jadeon.entity;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@SuppressWarnings("serial")
@Entity
@Table(name = "dept")
public class Dept implements Serializable {
private Integer deptno;
private String dname;
private String loc;
public Dept() {
super();
}
public Dept(String dname, String loc) {
super();
this.dname = dname;
this.loc = loc;
}
public Dept(Integer deptno,String dname, String loc) {
super();
this.deptno = deptno;
this.dname = dname;
this.loc = loc;
}
@Id
@Column(name="deptno")
@GenericGenerator(name="myGenerator",strategy="increment")
@GeneratedValue(generator="myGenerator")
public Integer getDeptno() {
return deptno;
}
public void setDeptno(Integer deptno) {
this.deptno = deptno;
}
@Column(name="dname")
public String getDname() {
return dname;
}
public void setDname(String dname) {
this.dname = dname;
}
@Column(name="loc")
public String getLoc() {
return loc;
}
public void setLoc(String loc) {
this.loc = loc;
}
}
2.dao接口
package com.jadeon.dao;
import java.util.List;
public interface BasicDao<T> {
public void saveBasic(T o);
public void updateBasicById(T o);
public void delBasicById(T o);
public T selectBasicById(T o,String column,Object byId);
public List<T> seletctAllBasic(T o);
}
实现dao接口类
package com.jadeon.dao.impl;
import java.util.List;
import org.hibernate.criterion.Restrictions;
import com.jadeon.dao.BasicDao;
import com.jadeon.util.DBHelper;
public class BasicDaoImpl<T> implements BasicDao<T> {
@Override
public void saveBasic(T o) {
DBHelper.openSession().save(o);
}
@Override
public void updateBasicById(T o) {
DBHelper.openSession().merge(o);
}
@Override
public void delBasicById(T o) {
DBHelper.openSession().delete(o);
}
@SuppressWarnings("unchecked")
@Override
public T selectBasicById(T o, String column, Object byId) {
return (T) DBHelper.openSession().createCriteria(o.getClass()).add(Restrictions.eq(column, byId))
.uniqueResult();
}
@SuppressWarnings("unchecked")
@Override
public List<T> seletctAllBasic(T o) {
return DBHelper.openSession().createCriteria(o.getClass()).list();
}
}
3.service接口类
package com.jadeon.service;
import java.util.List;
import com.jadeon.entity.Dept;
public interface DeptService {
public void saveDept(Dept info);
public void updateDeptById(Dept info);
public Dept selectDeptById(Integer byId);
public List<Dept> seletctAllDept();
public void delDeptById(Integer byId);
}
实现service接口类
package com.jadeon.service.impl;
import java.util.List;
import com.jadeon.dao.BasicDao;
import com.jadeon.dao.impl.BasicDaoImpl;
import com.jadeon.entity.Dept;
import com.jadeon.service.DeptService;
public class DeptServiceImpl implements DeptService {
private BasicDao<Dept> dao = new BasicDaoImpl<Dept>();
@Override
public void saveDept(Dept info) {
dao.saveBasic(info);
}
@Override
public void updateDeptById(Dept info) {
dao.updateBasicById(info);
}
@Override
public void delDeptById(Integer byId) {
Dept info = dao.selectBasicById(new Dept(), "deptno", byId);
dao.delBasicById(info);
}
@Override
public Dept selectDeptById(Integer byId) {
return dao.selectBasicById(new Dept(), "deptno", byId);
}
@Override
public List<Dept> seletctAllDept() {
return dao.seletctAllBasic(new Dept());
}
}
4.帮助类(DBHelper):
package com.jadeon.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class DBHelper {
private static SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
private static Session session;
public static Session openSession(){
//判断session是否打开
if (session == null || !session.isOpen())
session = sessionFactory.openSession();
return session;
}
}
5.strutsxml和Hibernate.cfg.xml、web.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="dept_*" class="com.jadeon.action.DeptAction" method="{1}">
<result name="success">/allDept.jsp</result>
<result name="update">/updateDept.jsp</result>
</action>
</package>
</struts>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:localhost:1521:orcl</property>
<property name="hibernate.connection.username">scott</property>
<property name="hibernate.connection.password">tiger</property>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.show_sql">true</property>
<!-- <mapping resource="com/jadeon/entity/Dept.hbm.xml"/> -->
<mapping class="com.jadeon.entity.Dept"/>
</session-factory>
</hibernate-configuration>
<?xml version="1.0" encoding="UTF-8"?>
<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_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>spring_02_proxy</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
6.代理类:
package com.jadeon.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import org.hibernate.Session;
public class TranscationDynamicProxy implements InvocationHandler{
private Object obj;//需要代理的目标对象
private Session session;
public TranscationDynamicProxy() {
super();
}
public TranscationDynamicProxy(Object obj,Session session) {
super();
this.obj = obj;
this.session = session;
}
/***
* 实例化代理对象
*
* @param args
* @return
*/
public static Object newInstance(Object args,Session session){//将目标对象传入进行代理
// 1. 实例化对象
// 2. 定义的接口,所需要完成事情
// 3. 开始做事情
return Proxy.newProxyInstance(
args.getClass().getClassLoader(),
args.getClass().getInterfaces(),
new TranscationDynamicProxy(args,session));//返回代理对象
}
// 开始做事情 什么时候触发呢?
// 在实例化LogDynamicProxy对象时 会触发该方法
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object result = null;
try {
System.out.println("begin recording log...");
session.beginTransaction().begin();
result = method.invoke(obj, args);//调用invoke方法,result 存储该方法的返回值
session.beginTransaction().commit();
System.out.println("end recording log...");
} catch (Exception e) {
e.printStackTrace();
session.beginTransaction().rollback();
} finally {
//session.close();
}
return result;
}
}
7.action测试类:
package com.jadeon.action;
import java.util.ArrayList;
import java.util.List;
import com.jadeon.entity.Dept;
import com.jadeon.proxy.TranscationDynamicProxy;
import com.jadeon.service.DeptService;
import com.jadeon.service.impl.DeptServiceImpl;
import com.jadeon.util.DBHelper;
import com.opensymphony.xwork2.ActionSupport;
@SuppressWarnings("serial")
public class DeptAction extends ActionSupport {
private List<Dept> infos = new ArrayList<Dept>();
private Dept info = new Dept();
DeptService service = (DeptService) TranscationDynamicProxy.newInstance(new DeptServiceImpl(), DBHelper.openSession());
public String getAllDept() {
infos = service.seletctAllDept();
return "success";
}
public String savaDept() {
service.saveDept(info);
return getAllDept();
}
public String updateDeptById() {
if (info.getDname() == null && info.getDeptno() > 0 && info.getLoc() == null) {
info = service.selectDeptById(info.getDeptno());
return "update";
}else{
service.updateDeptById(info);
return getAllDept();
}
}
public String delDeptById() {
service.delDeptById(info.getDeptno());
return getAllDept();
}
public List<Dept> getInfos() {
return infos;
}
public void setInfos(List<Dept> infos) {
this.infos = infos;
}
public Dept getInfo() {
return info;
}
public void setInfo(Dept info) {
this.info = info;
}
}
主页面:
<html>
<head>
<title>DEPT TABLE INFORMATION</title>
</head>
<body>
<center>
<a href="dept_getAllDept">SELECT ALL DEPT INFORMATION</a>
</center>
</body>
</html>
查询和删除部门.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>DEPT TABLE INFORMATION</title>
</head>
<body>
<center>
<table>
<tr><th colspan="4"><h2>DEPT TABLE INFORMATION</h2></th></tr>
<tr>
<th>DEPTNO</th>
<th>DNAME</th>
<th>LOC</th>
<th colspan="2"> OPERATION</th>
</tr>
<c:forEach items="${infos}" var="dept">
<tr>
<td>${dept.deptno}</td>
<td>${dept.dname}</td>
<td>${dept.loc}</td>
<td>
<a href="dept_delDeptById?info.deptno=${dept.deptno}">delete</a>
|
<a href="dept_updateDeptById?info.deptno=${dept.deptno}">update</a>
</td>
</tr>
</c:forEach>
</table>
<a href="addDept.jsp">add</a>
</center>
</body>
</html>
添加部门.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>DEPT TABLE INFORMATION</title>
<link rel="stylesheet" type="text/css" href="CSS/style.css">
</head>
<body>
<center>
<form action="dept_savaDept" method="post">
<table>
<tr><th colspan="2"><h2>UPDATE TABLE INFORMATION</h2></th></tr>
<tr>
<th>DNAME</th>
<th>LOC</th>
</tr>
<tr>
<td><input type="text" name="info.dname" /></td>
<td><input type="text" name="info.loc" /></td>
</tr>
</table>
<input type="submit" value="YES"/>
</form>
</center>
</body>
</html>
修改部门.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!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>DEPT TABLE INFORMATION</title>
<link rel="stylesheet" type="text/css" href="CSS/style.css">
</head>
<body>
<center>
<form action="dept_updateDeptById" method="post">
<input type="hidden" name="info.deptno" value="${info.deptno}"/>
<table>
<tr><th colspan="2"><h2>UPDATE TABLE INFORMATION</h2></th></tr>
<tr>
<th>DNAME</th>
<th>LOC</th>
</tr>
<tr>
<td><input type="text" name="info.dname" value="${info.dname}"/></td>
<td><input type="text" name="info.loc" value="${info.loc}"/></td>
</tr>
</table>
<input type="submit" value="YES"/>
</form>
</center>
</body>
</html>