---------?
【StudentAction类的代码】
package action;
import java.util.List;
import service.StudentServiceDAO;
import service.StudentServiceImpl;
import com.demo.pojo.Student;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class StudentAction extends ActionSupport {
private static final long serialVersionUID = 1L;
//创建service层的实例化对象
private StudentServiceDAO service= new StudentServiceImpl();
public String getAllStu(){
List<Student> list= service.getALL();
ActionContext.getContext().getSession().put("list", list);
return "getAllStu";
}
}
------------------------------------------
【com.demo.impl实现类-StudentDAOImpl类的代码】
package com.demo.impl;
import java.util.List;
import org.hibernate.Session;
import utils.HibernateUtil;
import com.demo.inter.StudentDAO;
import com.demo.pojo.Student;
public class StudentDAOImpl implements StudentDAO {
@SuppressWarnings("unchecked")
public List<Student> getALL() {
Session session =HibernateUtil.getSession();
session.beginTransaction();
String hql="from w_student";
List<Student> list =session.createQuery(hql).list();
session.getTransaction().commit();
return list;
}
}
---------------------------------
【com.demo.inter --StudentDAO接口中的代码】?
package com.demo.inter;
import java.util.List;
import com.demo.pojo.Student;
public interface StudentDAO {
public List<Student> getALL();
}
-------------------------------------
【com.demo.pojo--Classes 类的代码】?
package com.demo.pojo;
import java.util.Set;
/**
* 关系的加入:
* 例如:一对多(谁在钱,关系由谁来进行维护),那么此时表示由“一”的一端来负责加载关系
* @author Administrator
*
*/
public class Classes {
private int cid;
private String cname;
//set接口表示可以存储很过个学生(对象)
private Set<Student> students;
public Set<Student> getStudents() {
return students;
}
public void setStudents(Set<Student> students) {
this.students = students;
}
public int getCid() {
return cid;
}
public void setCid(int cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
}
?------------------------
?【Student类中的代码】
package com.demo.pojo;
public class Student {
private int sid;
private String sname;
private Classes classes;
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
--------------------
【com.demo.pojo.--Classes.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="com.demo.pojo.Classes" table="w_classes" >
<id name="cid" column="cid">
<generator class="increment"></generator>
</id>
<property name="cname" column="cname" length="10"></property>
<set name="students" inverse="true" cascade="save-update">
<key column="classes_id"></key>
<one-to-many class="com.demo.pojo.Student"/>
</set>
</class>
</hibernate-mapping>
?---------------
【Student.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="com.demo.pojo.Student" table="w_student" >
<id name="sid" column="sid">
<generator class="increment"></generator>
</id>
<property name="sname" column="sname" length="10"></property>
<many-to-one name="classes" column="classes_id" class="com.demo.pojo.Classes" cascade="save-update"></many-to-one>
</class>
</hibernate-mapping>
-------------------------------
【com.demo.service中的代码 StudentServiceDAO】?
package service;
import java.util.List;
import com.demo.pojo.Student;
public interface StudentServiceDAO {
public List<Student> getALL();
}
?----------
?【com.demo.service中的代码 StudentServiceImpl】?
package service;
import java.util.List;
import com.demo.inter.StudentDAO;
import com.demo.impl.StudentDAOImpl;
import com.demo.pojo.Student;
public class StudentServiceImpl implements StudentServiceDAO {
private StudentDAO dao= new StudentDAOImpl();
public List<Student> getALL(){
return dao.getALL();
}
}
------------------------
【Test 测试类 中的初始化方法】
package test;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.demo.pojo.Classes;
import com.demo.pojo.Student;
import utils.HibernateUtil;
public class ClassesTest {
private Session session;
@Before
public void getSession(){
session = HibernateUtil.getSession();
}
@After
public void getSessionClose(){
session.clear();
session.close();
}
?
@Test
public void testInsert2(){
session.beginTransaction();
try {
for (int i = 0; i < 3; i++) {
Classes c = new Classes();
c.setCname("614"+i);
session.save(c);
for (int j = 0; j < 10; j++) {
Student s = new Student();
s.setSname("张三"+j);
s.setClasses(c);
session.save(s);
}
}
} catch (HibernateException e) {
e.printStackTrace();
session.beginTransaction().rollback();
}
session.beginTransaction().commit();
}
-----------------------
【Utils包中的CreatetTableUtil工具】
package utils;
import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;
/**
* 工具类,读取配置文件,通过配置文件中的mapping的设置创建表到数据库中
* @author Administrator
*
*/
public class CreateTableUtil {
public static void main(String[] args) {
Configuration cfg = new Configuration();
cfg.configure();
//工具利用持久化类和映射文件生成数据库架构
SchemaExport export = new SchemaExport(cfg);
//第一个true是将sql语句输出在控制台,第二个true,根据持久类和配置文件,先删除表,再创建表
export.create(true,true);
}
}
?------------------
【事务的封装】
package utils;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
//读取配置文件,创建sessionFactory
private static SessionFactory sessionFactory;
static{
try{
//配置/读取总的配置文件hibernate.cfg.htm
Configuration cfg = new Configuration().configure();
sessionFactory = cfg.buildSessionFactory();
}catch(Exception e){
e.printStackTrace();
}
}
//读取配置文件,创建sessionFactory
public static SessionFactory getSessionFactory(){
return sessionFactory;
}
//获取session
public static Session getSession(){
Session session = sessionFactory.openSession();
return session;
}
}
-------------
【struts2.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.0.dtd">
<struts>
<!-- 表示使用默认包 ,生成一个test文件夹-->
<package name="yx" extends="struts-default">
<!-- name属性用于找到你要执行的action类(继承了ActionSupport的struts2的扩展类)
在浏览器发送请求,找到对应执行的action类的时候,就是通过这个name属性的作用,name 属性的值
是什么没关系,只要能通过该属性找到对应的类,加载执行即可。
class 属性是包名称.类名称
* 表示你要执行的方法的名字,然后将这个名字作为参数,传递给method属性中的
值{1},这个{1}表示数字占位符,这个{1}用来接收你要执行的方法的名字
-->
<!--
struts2-core jar下的 struts-default.xml文件中
result 用于各种跳转
包括:服务器端跳转?(默认)
客户端的跳转
json 的跳转
io流之间的跳转
文件上传下载的跳转
类之间的跳转
name 属性对应的是action 类中的return的字符串的内容
redirct
type 表示跳转的类型,或者以什么方式往哪里跳转,如果使用默认跳转那么type可以省略不写dispactor
跳转的路径加入/表示当前存在的webroot开始寻找对应的页面,如果不加入/表示从当前的请求路径开始寻找,
那么可能会有404错误产生
因为与跳转文件所在的路径不一致,找不到文件。
-->
<action name="w_*" class="action.StudentAction" method="{1}">
<result name="getAllStu" type="dispatcher">/list.jsp</result>
</action>
</package>
</struts>
-----------------
【hibernate.xml的配置文件】?
<property name="hbm2ddl.auto">update</property>
<mapping resource="com/demo/pojo/Classes.hbm.xml" />
<mapping resource="com/demo/pojo/Student.hbm.xml" />