//下面的代码完全可以运行。
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 class="sequence">
<param name="sequence">seq_personn</param>
</generator>
</id>
<property name="name" 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等,一些用法。