读书人

Hibernate器皿映射技术 Set 的用法(一

发布时间: 2012-11-07 09:56:10 作者: rapoo

Hibernate容器映射技术 Set 的用法(一对多)

//下面的代码完全可以运行。

?

1、数据库脚本的创建


-- 创建表
CREATE TABLE person
(
? id INT PRIMARY KEY ,
? name VARCHAR(20)
) ;
create sequence seq_personn;
commit;
CREATE TABLE emails
(
? id INT? ,
? address VARCHAR(50) ,
? foreign key (id) references person(id) on delete cascade
) ;

?

?

2、pojo类的创建

?

public class Person {
?private Integer id ;
?private String name ;
?// 一个人拥有多个不同的email地址
?private Set emails ;
?public Integer getId() {
??return id;
?}
?public void setId(Integer id) {
??this.id = id;
?}
?public String getName() {
??return name;
?}
?public void setName(String name) {
??this.name = name;
?}
?public Set getEmails() {
??return emails;
?}
?public void setEmails(Set emails) {
??this.emails = emails;
?}
}

?

3、操作方法类的创建

public class PersonOperate {
?private Session session;
?
?public PersonOperate(){
??this.session=new Configuration().configure().buildSessionFactory().openSession();
?}
?//添加操作
?public void insert(Person per) {
??this.session.save(per);
??this.session.beginTransaction().commit();
?}
??//根据id删除操作
?public void delete(int id){
??String hql="delete from Person? where id=?";
??Query q=this.session.createQuery(hql);
??q.setInteger(0, id);
??????? q.executeUpdate();
??????? this.session.beginTransaction().commit();
?}
?//根据id查询操作
?public Person queryById(int id){
??Person p=null;
??String hql="from Person as p where p.id=?";
??Query q=this.session.createQuery(hql);
??q.setInteger(0, id);
//??List list=q.list();
//??if(list.size()>0){
//???p=(Person)list.get(0);
//??}
??
?//下面的方法和上面的方法的作用是一样的。上面的方法效率应该高一些。?
??List list=q.list();
??Iterator ite=list.iterator();
??if(ite.hasNext()){
??p=(Person)ite.next();
??}
??return p;

?}
?//更新操作
?public void update(Person p){
??this.session.update(p);
??this.session.beginTransaction().commit();
?}


}

?

4、测试类的创建

public class TestPersonOperate {

?public static void main(String[] args)throws Exception{
??PersonOperate po=new PersonOperate();
??
??Person p=new Person();
??
??p.setName("jack");
??p.setEmails(new TreeSet());
??p.getEmails().add("www.jack.com");
??p.getEmails().add("www.jack.com");
??p.getEmails().add("www.jack.com");
??p.getEmails().add("www.123.com");

??

//?????? 下面是插入数据的操作
//?????? po.insert(p);
//?? System.out.println("可以成功的插入数据!");
??
//????? 下面是删除操作
//?? ?po.delete(14);
//??System.out.println("可以成功的删除数据!");
??
//????? 下面是根据Id查询操作
//???? Person per=po.queryById(19);
//??System.out.println(per.getName());
??
//????? 下面是更新操作
??Person per=po.queryById(19);
??? ?per.getEmails().add("www.janice.com");
??? ?per.getEmails().add("www.jack.com");
??? ?per.getEmails().add("www.jack.com");
??? ?per.getEmails().add("www.123.com");
??po.update(per);

?}

}

?

5、配置文件的创建

<?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">
<!--
??? Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
??? <class name="org.hibernate5.com.Person" table="PERSON" schema="SCOTT">
??????? <id name="id" type="java.lang.Integer">
??????????? <column name="ID" precision="22" scale="0" />
??????????? <generator type="java.lang.String">
??????????? <column name="NAME" length="20" />
??????? </property>
???????
??????? <set name="emails" table="emails" lazy="false">
???<key column="ID"></key>
???<element type="java.lang.String" column="address"></element>
??</set>
??? </class>
</hibernate-mapping>


完毕!

总结:Hibernate容器映射技术 还有list ,map等,一些用法。

?

读书人网 >软件架构设计

热点推荐