s2h_简单小例子

 

---------?

【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" />

 

转载于:https://www.cnblogs.com/xxsc/p/4624426.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值