hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
2016-03-05 10:47
459 查看
前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,Hibernate还提供了注解方式配置映射文件,非常灵活,减少了配置文件的冗余,虽然维护起来相对比较麻烦,但是的确很方便开发.现在开发中(据说)也越来越流行使用注解,这里贴一个使用注解开发的小例子.
假设有两张表,一张书籍表Book,一张书籍分类表Category,很明显Book和Category是多对一的关系.使用注解应该这样配置:
新建Book实体类:
新建Category实体类:
将两个实体类添加到Hibernate.cfg.xml中去,注意因为添加的是类,不是xml文件,所以包名之间用的是"."而不是"/"相隔.
以上就完成了配置,是不是相当简单.下面新建一个测试类,测试1:自动生成表2:保存数据3:读取数据:
注意:
1.使用注解需要导入的4个jar包:hibernate-commons-annotations.jar , hibernate-annotations.jar,ejb3-persistence.jar ,hibernate-jpa-2.0-api-1.0.1.Final.jar
2.使用注解配置映射关系,不再需要*.hbm.xml文件,而是在实体类中以注解形式定义映射关系.
3.注解在javax.persistence包下,而不是在hibernate包下,特别注意.
假设有两张表,一张书籍表Book,一张书籍分类表Category,很明显Book和Category是多对一的关系.使用注解应该这样配置:
新建Book实体类:
//entity表示需要持久化的实体类 @Entity //实体类多对应的表 @Table(name="t_book") public class Book { //id主键 @Id //设置主键生成策略,这里的auto表示自增长 与native对应, //(strategy------表示主键生成策略: // GenerationType.AUTO 默认值。表示让ORM框架自动选择,对应hibernate中的native; // GenerationType.TABLE 使用表一保存ID的值; // GenerationType.IDENTITY 根据数据库的Identity字段生成; // GenerationType.SEQUENCE 根据数据库表的Sequence字段生成;) @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String name; private double price; private String author; private Date pubDate; //get/set方法省略 }
新建Category实体类:
@Entity @Table(name="t_category") public class Category { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String name; //一端的配置 @OneToMany(mappedBy="多端的属性") @OneToMany(mappedBy="category") private Set<Book> books=new HashSet<Book>(); //get/set方法省略 }
将两个实体类添加到Hibernate.cfg.xml中去,注意因为添加的是类,不是xml文件,所以包名之间用的是"."而不是"/"相隔.
以上就完成了配置,是不是相当简单.下面新建一个测试类,测试1:自动生成表2:保存数据3:读取数据:
@Test public void testCreateDB(){ Configuration cfg=new Configuration().configure(); SchemaExport se=new SchemaExport(cfg); se.create(true, true); } @Test public void testSave(){ Session session=HibernateUtil.getSession(); Book book=new Book(); book.setAuthor("金庸"); book.setName("鹿鼎记"); book.setPrice(12.35); book.setPubDate(new Date()); Book book1=new Book(); book1.setAuthor("土豆"); book1.setName("斗破苍穹"); book1.setPrice(22.35); book1.setPubDate(new Date()); Category c1=new Category(); c1.setName("武侠类"); book.setCategory(c1); Category c2=new Category(); c2.setName("玄幻类"); book1.setCategory(c2); session.save(book); session.save(book1); session.beginTransaction().commit(); session.close(); } @Test public void testGet(){ Session session =HibernateUtil.getSession(); Book b=(Book)session.get(Book.class, 1); System.out.println("书籍名称:"+b.getName()+",类别:"+b.getCategory().getName()); System.out.println("========================="); Category c=(Category)session.get(Category.class, 1); System.out.print("类别:"+c.getName()+",书籍名称:"); Iterator<Book> it = c.getBooks().iterator(); while(it.hasNext()){ System.out.print(it.next().getName()); } session.beginTransaction().commit(); session.close(); }
注意:
1.使用注解需要导入的4个jar包:hibernate-commons-annotations.jar , hibernate-annotations.jar,ejb3-persistence.jar ,hibernate-jpa-2.0-api-1.0.1.Final.jar
2.使用注解配置映射关系,不再需要*.hbm.xml文件,而是在实体类中以注解形式定义映射关系.
3.注解在javax.persistence包下,而不是在hibernate包下,特别注意.
相关文章推荐
- 3》星辰变
- POJ2396:Budget 有源汇上下界可行流
- SQL读书笔记(七) 数据分组
- poj 1011 Stick(深度优先搜索)
- sed初学者实用说明
- IRP_MJ_SET_INFORMATION
- 《JavaScript权威指南(第六版)》知识点总结(一)
- VIM-Linux Basic
- ELF以及debug
- sed初学者实用说明
- 2》盘龙
- ---很不错的<android CodecCapabilities 图像格式> ---图文并茂
- 51nod 1073 约瑟夫环
- 构建之法阅读笔记01
- PHP程序员玩转算法公开课(第一季)01_五子棋算法_汉诺塔_回溯算法
- bootstrap简介
- AFNetwortking 上传进度
- abstract的使用和接口的区别
- 百度地图总结第一篇--环境集成和Hello Baidu_Map实现
- 特征值与特征向量