- 浏览: 647197 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (310)
- C&C++ (14)
- Java (52)
- Python (13)
- Web (10)
- Tomcat (2)
- Struts2 (2)
- Spring (3)
- Hibernate (11)
- SWT (1)
- Linux (35)
- WebService (1)
- 工具 (3)
- 数据库 (10)
- 开源项目 (3)
- 搜索技术 (4)
- 链接记录 (3)
- 搜集信息 (12)
- 工作笔记 (16)
- 星星点点 (20)
- 英文片语 (7)
- 读书笔记 (3)
- 自考资料 (3)
- 习题自解 (1)
- 一例一课 (0)
- 运动积累 (1)
- 留档 (0)
- SQL (5)
- JPA (1)
- JSP (3)
- JSON (1)
- Javascript (5)
- Excel (1)
- vbox (3)
- 虚拟机 (1)
- nat (1)
- secureCRT (1)
- centos (1)
- ssh (1)
- ide (1)
- hive (2)
- impala (1)
- ascii (1)
- redis (1)
- seckill (1)
- nginx (2)
- git (0)
- mq (1)
- maven (1)
- java并发包 (1)
- 阅源 (1)
- mybatis (1)
最新评论
-
dotjar:
awk -F "/" '{print $3 ...
@Marked-linux命令使用 cut/sort/uniq -
DEMONU:
直接将要删除的key记下来,遍历完了,在删除
@Marked-Java 遍历Map时 删除元素 -
LeeXiao:
感谢分享
@Marked-Java 遍历Map时 删除元素 -
nicegege:
受益匪浅
mysql char varchar -
nicegege:
受益匪浅
@Maked-mysql使用规范
多对一映射简例:
1.我使用学生和地址的关系来做示例:
student[s_id,s_name,s_addr]
address[a_id,city]
2.建立数据库表:
create table address( a_id int(10) auto_increment primary key, city varchar(16) )engine=MyISAM CHARACTER SET=utf8; create table student( s_id int(10) auto_increment primary key, s_name varchar(20) not null, s_addr int(10), foreign key (s_addr) references address(a_id) )engine=MyISAM CHARACTER SET=utf8;
3.jar包:和数据库映射:
/hibernate_many2one_1/lib/antlr-2.7.6.jar /hibernate_many2one_1/lib/commons-collections-3.1.jar /hibernate_many2one_1/lib/dom4j-1.6.1.jar /hibernate_many2one_1/lib/hibernate-jpa-2.0-api-1.0.0.Final.jar /hibernate_many2one_1/lib/hibernate3.jar /hibernate_many2one_1/lib/javassist-3.12.0.GA.jar /hibernate_many2one_1/lib/jta-1.1.jar /hibernate_many2one_1/lib/junit-4.9b1.jar /hibernate_many2one_1/lib/mysql6.jar /hibernate_many2one_1/lib/slf4j-api-1.6.1.jar /hibernate_many2one_1/lib/slf4j-simple-1.6.1.jar
hibernate.cfg.xml
<!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/hnie?useUnicode=true&characterEncoding=UTF-8</property> <property name="connection.username">root</property> <property name="connection.password">1234</property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <mapping resource="model/Student.hbm.xml"/> <mapping resource="model/Address.hbm.xml"/> </session-factory> </hibernate-configuration>
4.model层:Address和Student
(1)Address.java
package model; public class Address { private int id; private String city; public int getId() { return id; } private void setId(int id) { this.id = id; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } }
(-1)Address.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="model"> <class name="Address" table="address" lazy="false"> <id name="id" type="integer" column="a_id"> <generator class="identity"/> </id> <property name="city" type="string" column="city"/> </class> </hibernate-mapping>
(2)Student.java
package model; public class Student { private int stuId; private String stuName; private Address address; public int getStuId() { return stuId; } private void setStuId(int stuId) { this.stuId = stuId; } public String getStuName() { return stuName; } public void setStuName(String stuName) { this.stuName = stuName; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
(-2)Student.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="model"> <class name="Student" table="student" lazy="false"> <id name="stuId" type="integer" column="s_id"> <generator class="identity"/> </id> <property name="stuName" type="string" column="s_name" /> <many-to-one name="address" class="Address" column="s_addr" not-null="true" cascade="save-update"/> </class> </hibernate-mapping>
5.获取Session的工具类:
HibernateUtil.java
package util; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateUtil { private static final SessionFactory sessionFactory=buildSessionFactory(); /** init sessionFactory */ private static SessionFactory buildSessionFactory() { SessionFactory sessionFactory=null; try{ sessionFactory=new Configuration().configure().buildSessionFactory(); }catch(Throwable te){ System.err.println("init sessionFactory Error:"+te); te.printStackTrace(); } return sessionFactory; } /** get session */ public static Session getSession(){ Session session=sessionFactory.openSession(); return session; } }
6.dao层:AddressDao.java和StudentDao.java
1).AddressDao操作address表:
package dao; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import util.HibernateUtil; import model.Address; public class AddressDao { /** 增加地址记录; */ public void addAddress(Address addr){ Session session=HibernateUtil.getSession(); Transaction tx=null; try{ tx=session.beginTransaction(); session.save(addr); tx.commit(); }catch(HibernateException he){ tx.rollback(); he.printStackTrace(); }finally{ session.close(); } } /** 使用id查询一条记录; */ public Address getById(int aid){ Session session=HibernateUtil.getSession(); Transaction tx=null; Address addr=null; try{ tx=session.beginTransaction(); addr=(Address)session.load(Address.class,new Integer(aid)); // addr=(Address)session.get(Address.class,new Integer(aid)); tx.commit(); }catch(HibernateException he){ tx.rollback(); he.printStackTrace(); }finally{ session.close(); } return addr; } /** 使用属性列查询所有匹配某个值的记录; */ public List<Address> getByField(String fld,String value){ List<Address> list=null; Session session=HibernateUtil.getSession(); Transaction tx=null; try{ tx=session.beginTransaction(); Query q=session.createQuery("from Address a where a."+fld+"=?"); q.setParameter(0, value); list=q.list(); tx.commit(); }catch(HibernateException he){ tx.rollback(); he.printStackTrace(); }finally{ session.close(); } return list; } /** 更新一条记录; */ public void updateAddress(int id,String city){ Session session=HibernateUtil.getSession(); Transaction tran=null; try{ tran=session.beginTransaction(); Address addr=(Address)session.load(Address.class,new Integer(id)); addr.setCity(city); session.flush(); tran.commit(); }catch(HibernateException he){ tran.rollback(); he.printStackTrace(); }finally{ session.close(); } } /** 使用like通配符删除指定列 */ public void deleteAddress(String fld,String val){ Session session=HibernateUtil.getSession(); Transaction tx=null; try { tx=session.beginTransaction(); /* 1.Criteria查询; */ Criteria criter=session.createCriteria(Address.class).add(Restrictions.like(fld,"%"+val+"%")); Iterator<Address> it=criter.list().iterator(); /* 2.Query查询 Query q=session.createQuery("from Address as s where s.? like ?"); q.setParameter(0, fld); q.setParameter(1, "%"+val+"%"); Iterator<Address> it=q.list().iterator(); */ /* 3.Native sql查询 表名和表中的列名而不是实体类的类名和属性名了 SQLQuery sqlq=session.createSQLQuery("SELECT * FROM address WHERE ? like ?").addEntity(Address.class); sqlq.setParameter(0,fld); sqlq.setParameter(1, "%"+val+"%"); Iterator<Address> it=sqlq.list().iterator(); */ while(it.hasNext()){ session.delete(it.next()); } tx.commit(); } catch (HibernateException he) { tx.rollback(); he.printStackTrace(); } finally { session.close(); } } }
2).StudentDao操作student表
package dao; import java.util.Iterator; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.criterion.Restrictions; import util.HibernateUtil; import model.Student; public class StudentDao { /** 存入一条记录; */ public void addStudent(Student stu){ Session session=HibernateUtil.getSession(); Transaction tx=null; try{ tx=session.beginTransaction(); session.save(stu); tx.commit(); }catch(HibernateException he){ tx.rollback(); he.printStackTrace(); }finally{ session.close(); } } /** 根据id查询学生一条; */ public Student getStudentById(int sid){ Session session=HibernateUtil.getSession(); Transaction tx=null; Student stu=null; try{ tx=session.beginTransaction(); // stu=(Student)session.load(Student.class,new Integer(sid)); stu=(Student)session.get(Student.class,new Integer(sid)); tx.commit(); }catch(HibernateException he){ tx.rollback(); he.printStackTrace(); }finally{ session.close(); } return stu; } /** 查询所有学生; */ public List<Student> getAll(){ List<Student> list=null; Session session=HibernateUtil.getSession(); Transaction tx=null; try{ tx=session.beginTransaction(); list=session.createQuery("from Student as a").list(); tx.commit(); }catch(HibernateException he){ tx.rollback(); he.printStackTrace(); }finally{ session.close(); } return list; } /** 根据指定属性查询学生; */ public List<Student> getByField(String fld,String val){ List<Student> list=null; Session session=HibernateUtil.getSession(); Transaction tx=null; try{ tx=session.beginTransaction(); Query q=session.createQuery("from Student s where s."+fld+"=?"); q.setParameter(0,val); list=q.list(); tx.commit(); }catch(HibernateException he){ tx.rollback(); he.printStackTrace(); }finally{ session.close(); } return list; } /** 修改 stuName */ public void updateName(String oldName,String newName){ Session session=HibernateUtil.getSession(); Transaction tx=null; try{ tx=session.beginTransaction(); /* 1.hibernate3新update */ Query q=session.createQuery("update Student set stuName=? where stuName=?"); q.setParameter(0, newName); q.setParameter(1, oldName); q.executeUpdate(); /* 2.查询删除! Query q=session.createQuery("from Student s where s.stuName= ?"); q.setParameter(0, oldName); Iterator<Student> it=q.list().iterator(); while(it.hasNext()){ Student s=it.next(); s.setStuName(newName); session.update(s); } */ tx.commit(); }catch(HibernateException he){ tx.rollback(); he.printStackTrace(); }finally{ session.close(); } } /** 删除指定列为指定值的记录; */ public void deleteStudent(String fld,String val){ Session session=HibernateUtil.getSession(); Transaction tx=null; try { tx=session.beginTransaction(); /* 4.hibernate3支持删除实体 Query q=session.createQuery("delete Student where "+fld+"=?"); q.setParameter(0, val); q.executeUpdate(); */ /* 1.Criteria查询; Criteria criter=session.createCriteria(Student.class).add(Restrictions.eq(fld,val)); Iterator<Student> it=criter.list().iterator(); */ /* 2.Query查询 */ Query q=session.createQuery("from Student as s where s."+fld+" = ?"); q.setParameter(0, val); Iterator<Student> it=q.list().iterator(); /* 3.Native sql查询 表名和表中的列名而不是实体类的类名和属性名了 SQLQuery sqlq=session.createSQLQuery("delete FROM student WHERE "+fld+" = '"+val+"';").addEntity(Student.class); sqlq.executeUpdate(); */ while(it.hasNext()){ Student s=it.next(); session.delete(s); } tx.commit(); } catch (HibernateException he) { tx.rollback(); he.printStackTrace(); } finally { session.close(); } } }
7.业务层:
1)AddressManager.java
package service; import java.util.List; import dao.AddressDao; import model.Address; public class AddressManager { AddressDao dao=new AddressDao(); /** 增加地址记录; */ public void save(Address addr){ dao.addAddress(addr); } /** 使用id查询一条记录;*/ public Address getById(int id){ return dao.getById(id); } /** 使用属性列查询所有匹配某个值的记录; */ public List<Address> getByField(String fld,String val){ return dao.getByField(fld, val); } /**更新一条记录;*/ public void update(int id,String city){ dao.updateAddress(id,city); } /**使用like通配符删除指定列*/ public void deleteWithLike(String fld,String val){ dao.deleteAddress(fld, val); } }
2)StudentManager.java
package service; import java.util.List; import dao.StudentDao; import model.Student; public class StudentManager { StudentDao dao=new StudentDao(); /** 存入一个学生实体; */ public void save(Student stu){ dao.addStudent(stu); } /** 根据id查询学生一条; */ public Student getById(int id){ return dao.getStudentById(id); } /** 根据指定属性查询学生; */ public List<Student> getByField(String fld,String val){ return dao.getByField(fld, val); } /** 修改 stuName */ public void update(String oldName,String newName){ dao.updateName(oldName, newName); } /** 删除指定列为指定值的记录; */ public void deleteByField(String fld,String val){ dao.deleteStudent(fld, val); } /** 查询所有学生; */ public List<Student> getAll(){ return dao.getAll(); } }
8.Junit4测试:
1)测试业务类AddressManager
package service; import java.util.List; import model.Address; import org.junit.After; import org.junit.Before; import org.junit.Test; public class AddressManagerTest { AddressManager man; @Before public void init(){ man=new AddressManager(); } @After public void close(){ man=null; } /** 增加地址记录; */ @Test public void testSave() { Address addr=new Address(); addr.setCity("天津"); man.save(addr); } /** 使用id查询一条记录; */ @Test public void testGetById() { Address addr=man.getById(3); System.out.println(addr.getCity()); } /** 使用属性列查询所有匹配某个值的记录; */ @Test public void testGetByField() { List<Address> list=man.getByField("city","南京"); for(Address ad:list){ System.out.println(ad.getId()+"="+ad.getCity()); } } /** 更新一条记录; */ @Test public void testUpdate() { man.update(10,"金陵"); } /** 使用like通配符删除指定列 */ @Test public void testDeleteWithLike() { man.deleteWithLike("city","京"); } }
2)测试业务类StudentManager
package service; import java.util.Iterator; import java.util.List; import model.Address; import model.Student; import org.junit.After; import org.junit.Before; import org.junit.Test; public class StudentManagerTest { StudentManager manager; AddressManager aman; @Before public void init(){ manager=new StudentManager(); aman=new AddressManager(); } @After public void close(){ manager=null; aman=null; } /** 测试存储一个学生 */ @Test public void testSave(){ Student s=new Student(); String ct="上海"; List<Address> list=aman.getByField("city",ct); Address addr=null; if(list.size()<1){ addr=new Address(); addr.setCity("上海"); s.setAddress(addr); }else{ addr=list.get(0); s.setAddress(addr); } s.setStuName("彬彬"); manager.save(s); } /** 根据id查询学生一条; */ @Test public void testGetById() { Student s=manager.getById(20); System.out.println(s.getStuName()+s.getAddress().getCity()); } /** 根据指定属性查询学生; */ @Test public void testGetByField() { Iterator<Student> it=manager.getByField("stuName","彬").iterator(); while(it.hasNext()){ Student student=it.next(); System.out.println(student.getStuId()+"-"+student.getStuName()+"-"+student.getAddress().getCity()); } } /** 查询所有学生; */ @Test public void testGetAll() { Iterator<Student> it=manager.getAll().iterator(); while(it.hasNext()){ Student s=it.next(); System.out.println("id:"+s.getStuId()+"-"+"sname:"+s.getStuName()+"-"+"addr:"+s.getAddress().getCity()); } } /** 删除指定列为指定值的记录; */ @Test public void testDeleteByField() { manager.deleteByField("stuName", "彬"); } /** 修改 stuName */ @Test public void testReplaceName() { manager.update("彬彬","彬"); } }
9.over!
在javaeye做笔记可真不错!
- hibernate_many2one_1.zip (27.8 KB)
- 下载次数: 2
发表评论
-
Q: JPA- MappingException: Could not determine type for:
2013-06-06 17:12 1544org.hibernate.MappingExceptio ... -
[hibernate3-摘要]第2节:Hibernate核心应用之Session类的函数
2013-04-27 19:25 910#【openSession和getCurrentSessi ... -
[hibernate3-摘要] 第一节:JPA注解
2013-04-27 19:22 952[hibernate3-摘要]第一节:JPA注解@Entity ... -
hibernate3.6-联合主键注解以及openSession和getCurrentSession区别
2013-04-24 23:34 1371【联合主键】>>>>配置方式:xm ... -
hibernate--Criteria+Restrictions
2012-02-29 15:30 909List cats = session.createCr ... -
Hibernate之第4解之-hibernate_集合映射
2011-04-27 12:13 1977hibernate的集合映射demo: 前提介绍: ... -
hibernate、mysql、中文字符问题
2011-04-21 16:53 1674中文乱码-- 问号 ?? 1:我的Eclipse默认字符集已 ... -
Hibernate之第2解之-hibernate_demo_1_annotation
2011-04-20 17:38 755上一个例子是一个基础的HIbernate的CRUD,不过用的是 ... -
Hibernate之第1解之-hibernate_demo_1
2011-04-20 15:59 3031准备工作做好了,开始Hibernate: 1:建立包:pac ... -
Hibernate之第〇解之准备工作
2011-04-20 11:06 1074从今天开始,小可将自己学习Hibernate的步骤一一登记,以 ...
相关推荐
"Hibernate one-to-many / many-to-one关系映射"是两个基本的关系类型,用于表示实体间的关联。在这个主题中,我们将深入探讨这两种关系映射的原理、配置和实际应用。 一、一对一(one-to-one)与一对多(one-to-...
1. many-to-one关系 many-to-one关系表示在一个实体类中,一个实例可以与另一个实体类的多个实例相关联。例如,在一个学生和班级的关系中,一个班级可以有多个学生,但一个学生只能属于一个班级。在Hibernate中,...
在Java的持久化框架Hibernate中,Many-to-Many关系是一种常见的数据库表之间的关联方式,它表示一个实体可以与多个其他实体进行关联,反之亦然。本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、...
在Java的持久化框架Hibernate中,集合映射是将数据库中的表关系映射到对象模型的重要部分。在现实世界的数据模型中,很多情况下存在多对多(Many-to-Many)的关系,例如学生与课程的关系,用户与角色的关系等。本...
`<set>`标签里的`<one-to-many>`子标签指定了与之关联的类。 在XML映射文件中,`Student.hbm.xml`包含了`<many-to-one>`元素,表示学生对象引用了一个班级对象,通过`classesid`列连接。而`Classes.hbm.xml`则使用...
Hibernate中many-to-one关系的编写_远航的水手
Hibernate中many-to-one关系的编写_远航的水手.htm
### Hibernate Many-to-One (多对一) 及 Cascade (级联) #### 一、Many-to-One(多对一) 在数据库设计中,实体之间的关系主要包括一对一、一对多、多对多等几种类型。而在ORM(对象关系映射)框架Hibernate中,...
标题中的“hibernate_1700_one2many_many2one_bi_crud(5)”指的是一项关于Hibernate框架的教程,重点在于介绍一对多(One-to-Many)和多对一(Many-to-One)双向关联关系的创建、读取、更新和删除(CRUD)操作。...
本程序包含: hibenate 上传图片,二进制数据,大文本,集合映射的多种关系,onetoone,ontomany,manytomany等关系详细代码示例以及注释,全部由本人测试通过,对理解hibernate配置有极大帮助。
在深入探讨Hibernate中的many2one关系之前,我们首先需要理解Hibernate框架本身以及它在Java开发领域扮演的角色。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用程序提供了一种将对象模型与...
在Hibernate中,`one-to-many`关系是常见的实体间关系之一,表示一个实体可以与多个其他实体相关联。本文将深入探讨`Hibernate one-to-many`注解的使用和实现细节。 ### 一、`@OneToMany`注解概述 `@OneToMany`...
本文将深入探讨Hibernate中一对多(One-to-Many)关系的处理方式,特别是通过外键映射和inverse属性的应用场景。 #### 一对多关系概念 一对多关系在数据库设计中非常常见,它指的是一个实体可以与多个其他实体关联...
本示例将详细讲解如何在Hibernate中实现多对多(many-to-many)的关系映射。 在数据库设计中,多对多关系是指两个实体之间存在多个关联,比如学生和课程的关系,一个学生可以选修多门课程,一门课程也可以被多个...
在Hibernate中,一对一唯一外键关联映射可以通过 `<many-to-one>` 标签来配置。例如,以下是Person实体与IdCard实体的一对一唯一外键关联映射配置: ```xml <class name="Person" table="person2" > <many...
为了使用 `publisher` 属性,我们需要在 `Book` 类的 Hibernate 映射文件中添加 `<many-to-one>` 映射。这将在 `BOOK` 表中添加一个名为 `PUBLISHER_ID` 的列,并存储关联出版商的 ID。 ```xml <!-- 其他属性的...
在Java的持久化框架Hibernate中,One-to-Many映射是一种常见的关系映射方式,它表示一个实体(比如一个用户)可以与多个其他实体(比如用户的订单)进行关联。在这个场景下,"用户"是一方,称为"One","订单"是另...
本实例将详细讲解如何在Hibernate中实现Many-to-One关系映射,这是一种常见的数据库关联,表示一个实体可以与多个其他实体相关联。 在Many-to-One关系中,通常一个实体(如部门)可以有多个相关实体(如员工),而...
在Java持久化框架Hibernate中,`one_to_many`映射是一种常见的关系模型,它表示一个实体(类)可以与多个其他实体(类)关联。在这个关系中,一个实体(通常是"one"端)对应多个实体实例("many"端)。在数据库中,...