java之hiberante之集合映射之list映射
这篇讲解 集合映射之List映射
1.通常对于集合,在hibernate中的处理都是使用set来完成。但是hibernate也提供了对于其他几种集合的映射。
在这里实现List的映射,List是有序的集合,所以需要在表中有一列数据用来表示顺序。
2.集合映射一般存在于一对多中,使用案例是 category 和 book
3.类结构
Book.java
public class Book implements Serializable{
private int id;
private String name;
private String author;
private double price;
private Date pubDate;
public Book() {
}
public Book(String name, String author, double price, Date pubDate) {
super();
this.name = name;
this.author = author;
this.price = price;
this.pubDate = pubDate;
} 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;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Date getPubDate() {
return pubDate;
}
public void setPubDate(Date pubDate) {
this.pubDate = pubDate;
}
@Override
public String toString() {
return "Book [id=" + id + ", name=" + name + ", author=" + author + ", price=" + price + ", pubDate=" + pubDate
+ "]";
}
}
Category.java
public class Category implements Serializable{
private int id;
private String name;
private List<Book> books = new ArrayList<>();
public Category() {
} public Category(String name) {
super();
this.name = name;
} 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;
}
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
}
4.映射文件
Book.hbm.xml
<hibernate-mapping package="cn.sxt.pojo">
<class name="Book" table="t_book">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="author"/>
<property name="price"/>
<property name="pubDate"/>
</class>
</hibernate-mapping>
Category.hbm.xml
<hibernate-mapping package="cn.sxt.pojo">
<class name="Category" table="t_category">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<!-- 一对多的关联映射 -->
<list name="books">
<key column="cid"></key>
<!-- idx有hibernate来进行维护 -->
<index column="idx"/>
<one-to-many class="Book"/>
</list>
</class>
</hibernate-mapping>
5.测试
public class HibernateTest {
/**
* 生成数据库表的工具方法
* */
@Test
public void testCreateDB(){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
//第一个参数 是否打印sql脚本
//第二个参数 是否将脚本导出到数据库中执行
se.create(true, true);
}
/**
* 初始化表数据
* 使用一对多的方式来保存数据,会执行update语句来更新外键
* 使得效率会比多对一的方式效率低
*/
@Test
public void testInit(){
Session session = null;
Transaction tx = null;
try {
session = HibernateUtil.getSession();
tx = session.beginTransaction();
Category c1 = new Category("计算机类");
Category c2 = new Category("文学");
Category c3 = new Category("历史");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Book b1 = new Book("java","sun",30,df.parse("1995-05-23"));
Book b2 = new Book("struts","apache",40,df.parse("2006-09-12"));
Book b3 = new Book("明朝那些事儿","当年明月",70,df.parse("2008-05-23"));
Book b4 = new Book("水浒传","老撕",20,df.parse("1985-05-23"));
//设置关系
c1.getBooks().add(b1);
c1.getBooks().add(b2);
c2.getBooks().add(b4);
c3.getBooks().add(b3);
session.save(c1);
session.save(c2);
session.save(c3);
session.save(b1);
session.save(b2);
session.save(b3);
session.save(b4);
tx.commit(); } catch (Exception e) {
if(tx!=null)
tx.rollback();
}finally {
HibernateUtil.close();
}
}
/**
* 在查询多的一端数据时可以获取一的一端的数据
*/
@Test
public void testGetData(){
Session session = HibernateUtil.getSession();
Category c1 = (Category)session.get(Category.class, 1);
System.out.println(c1.getId()+"----"+c1.getName());
System.out.println("-----------------");
for(Book book:c1.getBooks()){
System.out.println(book);
}
HibernateUtil.close();
}
}
java之hiberante之集合映射之list映射的更多相关文章
- Java精选笔记_集合【Map(映射)接口】
Map(映射)接口 简介 该集合存储键值对,一对一对的往里存,并且键是唯一的.要保证map集合中键的唯一性. 从Map集合中访问元素时,只要指定了Key,就能找到对应的Value. 关键字是以后用于检 ...
- Java多线程系列--“JUC集合”04之 ConcurrentHashMap
概要 本章是JUC系列的ConcurrentHashMap篇.内容包括:ConcurrentHashMap介绍ConcurrentHashMap原理和数据结构ConcurrentHashMap函数列表 ...
- Java多线程系列--“JUC集合”05之 ConcurrentSkipListMap
概要 本章对Java.util.concurrent包中的ConcurrentSkipListMap类进行详细的介绍.内容包括:ConcurrentSkipListMap介绍ConcurrentSki ...
- Java核心技术点之集合框架
1. 概述 Java集合框架由Java类库的一系列接口.抽象类以及具体实现类组成.我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据.集合类型就是容纳这些对象的一个容 ...
- 黑马程序员——JAVA基础之Map集合
------- android培训.java培训.期待与您交流! ---------- Map集合: 该集合存储键值对.一对一对往里存.而且要保证键的唯一性. 和Set很像,其实Set底层就是使用了M ...
- Java学习日记-10 集合
集合(Collection) 1. 什么是集合? 集合是一组对象组成的一个整体,又称为容器,集合类属于java.util包.集合不同于数组的地方在于,一是它的容量是可变的,二是集合中只能存储对象,不能 ...
- Java学习笔记之集合
集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...
- Java开发笔记(六十六)映射:HashMap和TreeMap
前面介绍了两种集合的用法,它们的共性为每个元素都是唯一的,区别在于一个无序一个有序.虽说往集合里面保存数据还算容易,但要从集合中取出数据就没那么方便了,因为集合居然不提供get方法,没有get方法怎么 ...
- 【集合】Java中的具体集合(一)
Java中不止提供了集合框架中的接口,还提供了许多具体的实现. Java中的具体集合 集合类型 描述 ArrayList 一种可以动态增长和缩减的索引序列 LinkedList 一种可以在任何位置进行 ...
随机推荐
- <每日 1 OJ> -Table
上图是一个Mysql查询结果图,我们看到这个表格非常漂亮,只需要使用”+”和”-”两个符号就可以打印,现在你的任务是打印一个n×m的表格我们定义单位长度(水平方向有三个”-”,竖直方向有一个”| ”, ...
- keepalived haproxy 主备配置
global_defs { router_id k8s_master} vrrp_script chk_http_port {script "/etc/keepalived/check_ha ...
- Java编程思想之四控制执行流程
程序必须再执行过程中控制它的世界,并做出选择.在Java中,你要使用执行控制语句来做出选择. 4.1true和false 所有条件语句都利用条件表达式的真或假来决定执行路径. Java不允许使用数字作 ...
- Netty - PooledByteBufAllocator
堆外内存, 就是非JVM管理的,由os管理的内存,等同于c语言里面的mallco分配的内存 故堆外内存的好处, 1. 不会有GC回收,缓解gc压力 2. 避免一次copy,发生到socket buff ...
- odoo开发笔记 -- 还原数据库后,异常:ir_attachment: IOError: [Errno 2] No such file or directory: u'/var/...'
场景描述: 恢复Odoo数据后,抛出错误导致无法进入页面 -- ::, INFO aeo odoo.addons.base.ir.ir_attachment: _read_file reading / ...
- Android闪屏问题的分析思路
http://www.devba.com/index.php/archives/6157.html Android闪屏问题的分析思路 作者:孤风一剑 发布:2015-01-22 12:35 ...
- 两行命令查看自己笔记本连接的wifi密码
打开cmd.exe窗口 第一行命令 netsh wlan show profiles 可以查看所有曾经连接过的wifi 第二命令 netsh wlan show profiles "vivo ...
- Python3基础 内置函数 dir 查询对象的方法列表
Python : 3.7.3 OS : Ubuntu 18.04.2 LTS IDE : pycharm-community-2019.1.3 ...
- 配置cisco设备记录用户命令
R1(config)# aaa new-model R1(config)# aaa accounting commands 0 default start-stop group local R1(co ...
- LeetCode 104. Maximum Depth of Binary Tree(二叉树深度)
Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...