Hibernate笔记之5容器映射之List映射

容器映射:
  容器常用于存储对象,将容器的关系映射到表主要有Set,List和Map三种。

例二,List映射:某个人有多本书,但是也可能有基本是相同的书:

首先创建数据库:
-- 删除表
drop table person ;
drop table books ;

-- 创建表
CREATE TABLE person
(
 id INT AUTO_INCREMENT PRIMARY KEY NOT NULL ,
 name VARCHAR(20)
) ;
CREATE TABLE books
(
 id INT  ,
 posit int ,
 title VARCHAR(30) ,
 foreign key (id) references person(id) on delete cascade
) ;

创建POJO类:Person
package wjr.hibernate.demo20_22.list;

import java.util.List;

public class Person {
 private int id;
 private String name;
 private List books;
 public List getBooks() {
  return books;
 }
 public void setBooks(List books) {
  this.books = books;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 
 
}
然后创建映射文件:
<?xml version="1.0"?>
<!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 - Hibernate Tools
-->
<hibernate-mapping>
    <class name="wjr.hibernate.demo20_22.list.Person" table="person" catalog="huanhuan">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native"></generator>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" />
        </property>
        <list name="books" table="books">
         <key column="id"></key>
   <index column="posit"></index>
   <element type="java.lang.String" column="title"></element>
        </list>

    </class>
</hibernate-mapping>
最后就是创建操作类了:
package wjr.hibernate.demo20_22.list;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.cfg.Configuration;

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 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 all = q.list();
  if (all.size() > 0) {
   p = (Person) all.get(0);
  }
  return p;
 }
 
 public void update(Person per)
 {
  this.session.update(per) ;
  this.session.beginTransaction().commit() ;
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  PersonOperate po = new PersonOperate();
  // Person p = new Person();
  // p.setName("LiXingHua");
  // p.setBooks(new ArrayList());
  // p.getBooks().add("Java 核心技术");
  // p.getBooks().add("Java 核心技术");
  // p.getBooks().add("Java 核心技术");
  // p.getBooks().add("Java 核心技术");
  // p.getBooks().add("Java 核心技术");
  // p.getBooks().add("Oracle PL SQL编程");
  // p.getBooks().add("WebSphere 开发指南");
  //
  // po.insert(p);
  Person p = po.queryById(2);
//  System.out.println("姓名:" + p.getName());
//  Iterator iter = p.getBooks().iterator() ;
//  while(iter.hasNext())
//  {
//   System.out.println("  |- "+iter.next()) ;
//  }
  p.getBooks().add("JSP 核心技术") ;
  p.getBooks().add("JSP 核心技术") ;
  p.getBooks().add("JSP 核心技术") ;
  po.update(p) ;
 }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值