`
java_lyvee
  • 浏览: 89679 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

hibernate 简单CRUD操作

    博客分类:
  • J2EE
阅读更多
首先我们要搭建好hibernate的开发环境  我是在Eclipse下搭建的
    建立javaProject
   下载hibernate3.2
   加入jar包
   从下载过来的hibernate3.2文件中COPY一份hibernate.cfg.xml 写上你的数据库配置
   搭建日志环境.


hibernate中对实体的CRUD操作 建立了两个实体类 其关系在数据库中是ManyToMany的两张表
pojo:Person
   package com.test.bean;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Cascade;

@Entity
@Table(name="person1")
public class Person {
	@Id
	@Column(name="personId",length=10)
	@GeneratedValue(strategy= GenerationType.AUTO)
	private int personId;
	@Column(name="userName",length=60)
	private String userName;
	@Column(name="password",length=60)
	private String password;
	/**TIMESTAMP :等于java.sql.Timestamp*/
	@Temporal(TemporalType.TIMESTAMP)
	private Date birthday;
	/**
	 * ManyToMany 主控方配置
	 * 其实既然是所谓的多对多就无所谓的被控和主控了 
	 * 这样配置我可以通过删除person 做到删除friend  但是无法通过删除friend 做到删除person
	 * 所以个人认为实应该两边都配置成主控方 希望大家来讨论
	 * 不知道为什么 这里写成CascadeType.PERSIST,CascadeType.MERGE}  不能做到联机更新
	 * 利用sesson.persist()估计能做到联机更新 这个我没去测试, 有时间下次做吧 
	 * fetch=FetchType.LAZY 延迟加载
	 */
	@ManyToMany(fetch=FetchType.LAZY)
	@Cascade(value={CascadeType.SAVE_UPDATE})
	/**name-中间表名称  JoinTable-描述了MTM的数据表关系  joinColumns-定义中间表与person(当前类)的外键关系   inverseJoninCoulums-定义了中间表与另一端的外键关系*/
	@JoinTable(name="person_friend",joinColumns={@JoinColumn(name="p_id")},inverseJoinColumns={@JoinColumn(name="f_id")})
	Set<Friend> friend = new HashSet<Friend>();
	
	/**getter setter*/
	public int getPersonId() {
		return personId;
	}
	public void setPersonId(int personId) {
		this.personId = personId;
	}
	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 Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public Set<Friend> getFriend() {
		return friend;
	}
	public void setFriend(Set<Friend> friend) {
		this.friend = friend;
	}
	
	
	
}


pojo:Friend
    package com.test.bean;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;

@Entity
@Table(name="friend1")
public class Friend {
	@Id
	@Column(name="friendId",length=10)
	@GeneratedValue(strategy= GenerationType.AUTO)
	private Integer friendId;
	@Column(name="fName",length=60)
	private String fName;
	@Column(name="fPass",length=60)
	private String fPass;
	/**ManyToMany 被控方的配置 */
	/**
	 * mappedBy 属性定义了此类为双向关系的维护端 它的值应该是此关系的另一端的属性名(可见Person类中定义的friend)
	 */
	@ManyToMany(fetch=FetchType.LAZY,mappedBy="friend")
	@Cascade(value={CascadeType.SAVE_UPDATE})
	Set<Person> person = new HashSet<Person>();
	public Integer getFriendId() {
		return friendId;
	}
	public void setFriendId(Integer friendId) {
		this.friendId = friendId;
	}
	public String getfName() {
		return fName;
	}
	public void setfName(String fName) {
		this.fName = fName;
	}
	public String getfPass() {
		return fPass;
	}
	public void setfPass(String fPass) {
		this.fPass = fPass;
	}
	public Set<Person> getPerson() {
		return person;
	}
	public void setPerson(Set<Person> person) {
		this.person = person;
	}
}

CRUD---
package com.test.testBean;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

import com.test.bean.Friend;
import com.test.bean.Person;

public class TestPerson {
	private static SessionFactory sessionFactory;
	private static Transaction ts;
	private Date date = new Date();
	/**
	 * 构造方法 里面 创建sessionFactory
	 */
	public  TestPerson(){
		@SuppressWarnings("unused")
		Session session = null;
		try{
		/** SchemaExport 每次都会将表的数据清空*/
		//new SchemaExport(new AnnotationConfiguration().configure()).create(false, true);
		//sessionFactory
		sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();
		System.out.println("创建sessionFactory成功");
		}catch(Exception e){
			e.printStackTrace();
			System.out.println("创建sessionFactory出错");
		}finally{
			
		}
	}
	/**
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		TestPerson tp = new TestPerson();
		//tp.addPF();
		//tp.query();
		//tp.update();
		tp.testRemove();
	}
	/**
	 * 填充数据
	 * @throws Exception 
	 */
	public void addPF() throws Exception{
		Person p = new Person();
		Friend f = new Friend();
		p.setBirthday(date);
		p.setPassword("fffff");
		p.setUserName("fff");
		//---------=============-------------------
		f.setfName("FFFFFF");
		f.setfPass("FFFFFFF");
		this.save(p, f);
	}
	/**
	 * 建立关系 并且保存到数据库
	 * @param p person对象
	 * @param f friend 对象
	 * @return boolean
	 */
	public void save(Person p,Friend f)throws Exception{
		p.getFriend().add(f);
		/**
		 * 这里需要注意下 如果你的f是被控方  那么在save的时候 能save两张表的数据 但是不能建立关系
		 * 即中间表中没有数据
		 */
		Session session = sessionFactory.getCurrentSession();
		org.hibernate.Transaction ts = session.beginTransaction();
		// session.save(f);
		//session.persist(arg0)
		try{
			session.save(p);
			System.out.println("保存成功");
			ts.commit();
		}catch (Exception e) {
			e.printStackTrace();
			System.out.println("保存失败");
			ts.rollback();
		}
	}
	/**
	 * 查询数据
	 * @throws SecurityException
	 * @throws IllegalStateException
	 * @throws RollbackException
	 * @throws HeuristicMixedException
	 * @throws HeuristicRollbackException
	 * @throws SystemException
	 */
	@SuppressWarnings({ "unchecked", "static-access"})
	public void query() throws SecurityException, IllegalStateException, RollbackException, HeuristicMixedException, HeuristicRollbackException, SystemException{
		/**定义hql*/
		String hql="from Person";
		/**获得session*/
		Session session = this.sessionFactory.getCurrentSession();
		/**开始事务*/
		ts = (Transaction) session.beginTransaction();
		/**执行hql语句*/
		Query query = session.createQuery(hql);
		/**定义一个list来存放数据*/
		List<Person>list = new ArrayList<Person>();
		list = query.list();
		 /**遍历LIST*/
		for(Person p: list){
			System.out.println(p.getPassword());
			System.out.println(p.getUserName());
		}
		/**事务提交*/
		ts.commit();
		/**关闭session ts*/
		this.closeSession(session, ts);
		
	}
	/**
	 * 根据ID查询出对象--person
	 * @param personId
	 * @return
	 */
	@SuppressWarnings("static-access")
	public Person queryPersonById(int queryId,String queryHql){
		Session session = this.sessionFactory.getCurrentSession();
		ts = (Transaction) session.beginTransaction();
		Query query = session.createQuery(queryHql);
		query.setInteger(0, queryId);
		Person person =(Person) query.list().get(0);
		return person;
	}
	/**
	 * 根据ID查询出对象--friend
	 * @param personId
	 * @return
	 */
	@SuppressWarnings("static-access")
	public Friend queryFriendById(int queryId,String queryHql){
		Session session = this.sessionFactory.getCurrentSession();
		ts = (Transaction) session.beginTransaction();
		Query query = session.createQuery(queryHql);
		query.setInteger(0, queryId);
		Friend friend =(Friend) query.list().get(0);
		return friend;
	}
	/**
	 * 更新对象
	 * @throws Exception
	 */
	@SuppressWarnings("static-access")
	public void update()throws Exception{
		/**首先查询出对象*/
		//定义查询语句
		String queryHql="from Person p where p.personId=?";
		Person person = queryPersonById(5,queryHql);
		person.setPassword("update--paw123");
		person.setUserName("update--pserson--Lyvee");
		Session session = this.sessionFactory.getCurrentSession();
		ts=session.beginTransaction();
		try{
			session.update(person);
			ts.commit();
		System.out.println("更新成功!!!");
		}catch(Exception e){
			e.printStackTrace();
			//事务回滚
			ts.rollback();
			System.out.println("更新出错啦!!!");
		}
		finally{
		this.closeSession(session, ts);
		}
	}
	/**
	 * 删除方法---通过person删除
	 * @param person
	 * @throws Exception
	 */
	@SuppressWarnings("static-access")
	public void del(Person person)throws Exception{
		Session session = this.sessionFactory.getCurrentSession();
		ts=session.beginTransaction();
		try{
			/**在此 由于我把person配置成了主控制方 故此删除person 由于没有配置联级删除故此被控方Friend仍然会存在 但是中间表记录会删除----关系不存在*/
			session.delete(person);
			ts.commit();
			System.out.println("删除成功!");
		}catch(Exception e){
			e.printStackTrace();
			//回滚事务
			ts.rollback();
			System.out.println("删除失败");
		}finally{
			this.closeSession(session, ts);
		}
	}
	public void del(Friend friend){
		Session session = this.sessionFactory.getCurrentSession();
		ts=session.beginTransaction();
		try{
			/**这里由于friend是被控方 直接删除friend 会报错  我们应该首先断关系 然后delete*/
			Set<Person> persons = friend.getPerson();
			for(Person person :persons){
				person.getFriend().remove(friend);
			}
			session.delete(friend);
			ts.commit();
			System.out.println("删除成功");
		}catch (Exception e) {
			e.printStackTrace();
			System.out.println("删除失败");
			ts.rollback();
		}finally{
			this.closeSession(session, ts);
		}
	}
	/**
	 * 测试删除的方法
	 * @throws Exception
	 */
	public void testRemove() throws Exception{
		Session session = this.sessionFactory.getCurrentSession();
		ts=session.beginTransaction();
		/**根据ID查询出person对象*/
		//Person person = (Person) session.get(Person.class,1);
		Friend friend = (Friend) session.get(Friend.class, 4);
//		del(person);
		del(friend);
	}
	/**
	 * session transacation 关闭
	 * @param session
	 * @param ts
	 * @return boolean
	 */
	public boolean closeSession(Session session,Transaction ts){
		if(ts!=null){
			ts=null;
		}
		return false;
	}
}


  • 描述: jar
  • 大小: 7.6 KB
分享到:
评论

相关推荐

    Struts2+Hibernate+Crud+For_Extjs用户管理程序

    在用户管理程序中,Hibernate通过实体类(如User)映射数据库表,实现了对用户数据的CRUD操作。它提供了Session接口,用于与数据库交互,包括持久化对象、查询数据等。 **3. CRUD操作** CRUD是数据库操作的基本元素...

    Spring4-Struts2-Hibernate4 CRUD Demo_3

    **CRUD操作** CRUD是数据库操作的基本动作,本示例通过SSH框架展示了如何完成以下操作: 1. **创建(Create)**:用户输入新数据,通过Action提交到Service,Service调用Hibernate的save()或persist()方法保存到...

    Hibernate-CRUD:HibernateCRUD

    以下是关于Hibernate CRUD操作的详细知识点: 1. **Hibernate简介**: Hibernate是Java社区中的一个开源项目,它简化了Java应用与关系数据库之间的交互。通过ORM,它可以将Java对象映射到数据库表,使得数据库操作...

    Spring4-Struts2-Hibernate4 CRUD Demo

    这些接口可能包括`UserDAO`,用于处理用户相关的CRUD操作。同时,会有一个Service层,如`UserService`,它利用Spring的DI来注入`UserDAO`,并在业务逻辑中调用DAO的方法。接着,Struts 2的Action类(如`UserAction`...

    Hibernate-CRUD自用基础模板

    Hibernate 提供了一种在Java应用程序中处理数据库对象的抽象层,将数据库的复杂SQL语句转化为简单的Java对象操作。它通过XML或注解方式配置映射文件,定义Java类与数据库表之间的映射关系,实现了数据的透明访问。 ...

    hibernate的CRUD

    **标题:“Hibernate的CRUD操作详解”** 在Java企业级开发中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本文将深入探讨Hibernate如何进行CRUD(创建、读取、更新、删除)操作,...

    Hibernate 配置以及简单的CRUD操作

    以下是一个简单的使用Hibernate进行CRUD操作的例子: ```java // 创建 User user = new User(); user.setName("张三"); session.save(user); // 读取 User user = session.get(User.class, 1L); System.out....

    spring+hibernate CRUD 简单示例

    下面将详细讲解Spring与Hibernate的集成及其在CRUD操作中的应用。 1. **Spring框架**:Spring 是一个全面的企业级应用开发框架,提供依赖注入(DI)、面向切面编程(AOP)、事务管理等核心功能。在本示例中,Spring...

    struts2 spring 2.5 hibernate3整合 CRUD实例含分页

    struts2 spring 2.5 hibernate3整合 CRUD实例含分页 整合版本struts2 spring 2.5 hibernate3 简单的实现了一个用户的CRUD操作(列表展示有分页版本) 设计到了Validate效验,excel生成下载

    Hibernate 增强工具包 - 只做增强不做改变,更加精简持久层CRUD操作

    Hibernate 增强工具包 - 只做增强不做改变,更加精简持久层CRUD操作;纯正血统(完全继承原生 Hibernate 的所有特性);最少依赖(仅仅依赖 Hibernate);自动生成代码(简化操作,使其专注于业务);自定义操作...

    SpringMVC-Hibernate-Crud:简单的SpringMVC和Hibernate Crud示例

    总的来说,"SpringMVC-Hibernate-Crud"项目展示了如何在Java Web应用中有效地整合SpringMVC和Hibernate,以实现高效、灵活的CRUD操作。通过这个项目,开发者不仅可以学习到如何配置和使用这两个框架,还能了解到如何...

    ibatis简单CRUD例子

    5. `SqlSession`:实际执行SQL操作的接口,通过它可以调用Mapper接口的方法完成CRUD操作。 通过这些文件,新手可以学习如何配置Ibatis,以及如何在Java代码中使用Ibatis进行数据操作,从而理解Ibatis的工作原理和...

    CRUD CRUD CRUD

    在IT行业中,CRUD操作广泛应用于各种应用程序,从简单的数据库管理工具到复杂的Web应用,都离不开这四种基本操作。 1. **Create(创建)**: 创建是指在数据库中插入新的记录。例如,在一个用户管理系统中,当注册新...

    ibatis实现CRUD操作

    Ibatis通过XML或注解方式定义和配置SQL映射,将Java对象和数据库记录进行映射,实现了数据的CRUD操作。 在实现CRUD操作时,Ibatis有以下核心组件: 1. SQL Map配置文件:这是Ibatis的核心,用于存放SQL语句及其...

    struts2+hibernate原理写的CRUD

    本项目“struts2+hibernate原理写的CRUD”是一个基于这两个框架实现的简单但完整的数据操作示例,包括创建(Create)、读取(Retrieve)、更新(Update)和删除(Delete)功能,同时具备了分页和分页跳转功能,适用于部门...

    Struts2.2+Hibernate3.3+Spring2.5.6整合 一个简单的CRUD案例

    一个基本的SSH整合配置完成后,就可以编写业务实体(Entity)、持久化层(DAO)、服务层(Service)和控制器(Action)代码来实现CRUD操作了。在Struts2的配置文件`Struts.xml`中定义Action与Service的关联,以及...

    Hibernate关联关系的CRUD和集合映射(annotation)

    本文将深入探讨Hibernate中的关联关系、CRUD操作以及集合映射(基于注解的方式)。关联关系是数据库设计中的核心概念,而Hibernate通过注解使得这种关系在代码中得以体现,简化了开发工作。 ### Hibernate关联关系 ...

    struts2 spring 2.5 hibernate3整合 CRUD实例

    整合版本struts2 spring 2.5 hibernate3 简单的实现了一个用户的CRUD操作 设计到了Validate效验,excel生成下载 不建议下载,这是我自己写的一个测试代码,为以后查资料用的

Global site tag (gtag.js) - Google Analytics