1.在之前学习了单表的crud操作。在实际应用中,大都是多表关联操作,这篇会学习如何处理多表之间的关系。

2.考察书籍表和书籍分类表的关系。书籍表和书籍分类表之间是多对一的关系。数据库的表设计为:

3.在java中,如何使用类的关系来表明表与表之间关系

Book.java

public class Book implements Serializable{
private int id;
private String name;
private String author;
private double price;
private Date pubDate;
private Category category;//在多的一端对一的一端的引用
//也就是说在多的一端可以获取到一的一端信息
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;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
}

Category.java

public class Category implements Serializable{
private int id;
private String 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;
}
}

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"/>
<!-- 多对一的关联关系设置 column指定外键的名称 -->
<many-to-one name="category" column="cid"/>
</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"/>
</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);
}
/**
* 初始化表数据
*/
@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"));
b1.setCategory(c1);
Book b2 = new Book("struts","apache",40,df.parse("2006-09-12"));
b2.setCategory(c1);
Book b3 = new Book("明朝那些事儿","当年明月",70,df.parse("2008-05-23"));
b3.setCategory(c3);
Book b4 = new Book("水浒传","老撕",20,df.parse("1985-05-23"));
b4.setCategory(c2);
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();
Book book = (Book)session.get(Book.class, 3);
System.out.println(book.getId()+"--"+book.getName()+"---"+book.getAuthor()+
"---"+book.getPrice()+"---"+book.getPubDate()+"---"+book.getCategory().getName()); HibernateUtil.close();
}
}

注意:初始化数据时,保存顺序,先保存的分类,再保存的书籍

最新文章

  1. 【Install】我是如何安装Linux类系统的
  2. 一次tomcat服务器被入侵解决办法
  3. ASP.NET 免费开源控件
  4. 设计原则 Design Principle
  5. Sum square difference
  6. BZOJ 2073: [POI2004]PRZ( 状压dp )
  7. 关于ADB server didn&#39;t ACK * failed to start daemon *的问题
  8. 流式计算storm,spark文章
  9. bugku 逆向 love
  10. 转载泡泡机器人——IMU预积分总结与公式推导1
  11. KeyPress和KeyDown/KeyUp
  12. Linux---基础指令(一)
  13. 进程池 和 multiprocessing.Pool模块
  14. Openjdk 安装 on centos7
  15. ios scrollView代理的用法
  16. vmware安装centos问题
  17. SpringMVC方法传递集合数组
  18. 基于(Redis | Memcache)实现分布式互斥锁
  19. Hyperic-Sigar简介
  20. 最意想不到的5个APP UI 设计范例

热门文章

  1. 使用ADO.NET
  2. 【pytorch 代码】pytorch 网络结构可视化
  3. python3中Requests将verify设置为False后,取消警告的方式
  4. 【大数据应用技术】作业十一|分布式并行计算MapReduce
  5. 第09组 Alpha冲刺(4/4)
  6. C# System.Web.Mail.MailMessage 发邮件
  7. CentOS 6和 CentOS 7的区别【转】
  8. vue-vuex的使用
  9. 十二、导出python脚本
  10. 什么是 Web server