博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate笔记--使用注解(annotation)方式配置单(双)向多对一的映射关系
阅读量:6306 次
发布时间:2019-06-22

本文共 3089 字,大约阅读时间需要 10 分钟。

  前面几篇都是介绍的用配置文件来实现实体类到数据库表的映射,这种方式是比较麻烦的,每一个pojo类都需要写一个相应的*.hbm.xml,无疑增加了很多代码量,不过也有优点就是利于维护,为了方便开发,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
books=new HashSet
();//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
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包下,特别注意.

 

转载地址:http://iqnxa.baihongyu.com/

你可能感兴趣的文章
怎样加快数据库查询速度
查看>>
搭建基于MyEclipse的Hadoop开发环境
查看>>
MySQL和Lucene索引对比分析
查看>>
LintCode: Number of Islands
查看>>
asp调用.net xml web services
查看>>
Ubuntu 进入Root方法
查看>>
PLSQL中对cursor 使用的小例子
查看>>
SAP Business One中的快捷键
查看>>
[WinAPI] 获取窗口句柄的几种方法
查看>>
《PHP对象、模式与实践》之高级特性
查看>>
设计模式之代理模式(Proxy)
查看>>
创建游标.存储过程及包
查看>>
ios语音输入崩溃
查看>>
JavaScript——DataListBox(组合框)
查看>>
浅谈ADO.NET中的五个主要对象
查看>>
超简单实现地球坐标转高德地图坐标
查看>>
Insert Oracle CLOB column
查看>>
介绍一个JSONP 跨域访问代理API-yahooapis
查看>>
4.5. JS Minification
查看>>
单元文件结构
查看>>