hibernate关系注解方式

一对一双向注解方式

需求:

1.      通过hibernate 1对1双向映射关系,使用注解方式,在数据库中,自动创建一个观众表(t_viewer),和一个电影票表(t_ticket)

2.      观众表字段如下:id(观众号),name(观众姓名)

3.      电影票表字段如下:id(票号),name(座位名)

4.      在观众表中插入小组同学的数据

5.      在电影票表中插入电影票数据

要求:

1.每个小组同学一张票

把以上的数据以及数据间1对1关系编程实现.

具体实现:

项目结构:

编写model类

Ticket类

package com.model;

 

import java.io.Serializable;

 

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.OneToOne;

import javax.persistence.Table;

 

@Entity

@Table(name="t_ticket")

public classTicket  implements Serializable {

 

   private int tid;

   private String tname;

   private  Viewer viewer;

  

   @Id

   @GeneratedValue(strategy=GenerationType.IDENTITY)

   @Column(name="tid")

   public int getTid() {

      return tid;

   }

   public void setTid(int tid) {

      this.tid = tid;

   }

  

   @Column(name="tname",length=20)

   public String getTname() {

      return tname;

   }

   public void setTname(String tname) {

      this.tname = tname;

   }

   //一对一viewer类中ticket属性映射到ticket类,故save viewer的时候就能save ticket

   @OneToOne(mappedBy="ticket",cascade=CascadeType.ALL)

   public Viewer getViewer() {

      return viewer;

   }

   public void setViewer(Viewer viewer) {

      this.viewer = viewer;

   }

  

}

Viewer类

package com.model;

 

import java.io.Serializable;

 

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.OneToOne;

import javax.persistence.Table;

 

 

 

@Entity

@Table(name="t_viewer")

public classViewer implements Serializable {

 

   private int vid;

   private String vname;

   private Ticket ticket;

  

   @Id

   @GeneratedValue(strategy=GenerationType.IDENTITY)

   @Column(name="vid")

   public int getVid() {

      return vid;

   }

   public void setVid(int vid) {

      this.vid = vid;

   }

  

   @Column(name="vname")

   public String getVname() {

      return vname;

   }

   public void setVname(String vname) {

      this.vname = vname;

   }

  

 

   //一对一关系,连接的列名是ticket的tid属性

   @OneToOne(cascade=CascadeType.ALL)

   @JoinColumn(name="tid")

   public Ticket getTicket() {

      return ticket;

   }

   public void setTicket(Ticket ticket) {

      this.ticket = ticket;

   }

  

  

  

}

配置hibernate.cfg.xml

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE hibernate-configurationPUBLIC

"-//Hibernate/HibernateConfiguration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

   <session-factory>

       <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="hibernate.connection.password">123456</property>

        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hiber?useUnicode=true&amp;characterEncoding=UTF-8</property>

        <property name="hibernate.connection.username">root</property>

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="hbm2ddl.auto">create</property>

      

       

        <!-- 注解方式 -->

        <mapping class="com.model.CopyGoods_item"/>

        <mapping class="com.model.CopyGoods_type"/>

        <mapping class="com.model.Ticket"/>

        <mapping class="com.model.Viewer"/>

        <!-- 配置文件方式 -->

        

 

</session-factory>

</hibernate-configuration>

 

测试类

package com.Test;

 

import org.hibernate.Session;

import org.hibernate.Transaction;

 

import com.db.util.HiberDBUtil;

import com.model.Ticket;

import com.model.Viewer;

 

 

public class TestForOtO {

 

    public static void main(String[] args) {

      

       Session session=HiberDBUtil.getSession();

      

       Ticket ticket1=new Ticket();

       ticket1.setTname("1");

       Viewer viewer1=new Viewer();

       viewer1.setVname("小静");

       viewer1.setTicket(ticket1);

      

      

       Ticket ticket2=new Ticket();

       ticket2.setTname("2");

       Viewer viewer2=new Viewer();

       viewer2.setVname("小珊");

       viewer2.setTicket(ticket2);

      

       Transaction tr = session.beginTransaction();

        try {

          

            session.save(viewer1);

            session.save(viewer2);

           

            tr.commit();

        } catch (Exception e) {

            tr.rollback();

        }finally{

            HiberDBUtil.closeSession();

        }

      

    }  

}

结果截图:

 

双向多对多注解方式

需求:

6.      通过hibernate多对多双向映射关系,使用XML文件配置方式,在数据库中,自动创建一个权限表(t_role),和一个组表(t_group)

7.      权限表字段如下:id(权限号),name(权限名称)

8.      组表字段如下:id(组号),name(组名)

9.      在权限表中插入如下数据:

读文件权限

写文件权限

服务器管理权限

管理用户权限

10.  在组表在权限表中插入如下数据:

系统管理员

一般用户

访问者

11.  要求实现下面关系:

(1)    访问者只可以读文件

(2)    一般用户拥有读,写文件权限

(3)    系统管理员拥有以上所有权限.

把以上的数据以及多对多关系编程实现.

组表中添加权限

具体实现:

项目结构:

编写model类

Role类

package com.model;

 

import java.io.Serializable;

import java.util.HashSet;

import java.util.Set;

 

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

 

@Entity

@Table(name="t_role")

public classRole implements Serializable {

 

   private int rid;

   private String rname;

   private Set<Group> group=new HashSet<Group>();

  

   @Id

   @Column(name="rid")

   public int getRid() {

      return rid;

   }

   public void setRid(int rid) {

      this.rid = rid;

   }

  

   @Column(name="rname")

   public String getRname() {

      return rname;

   }

   public void setRname(String rname) {

      this.rname = rname;

   }

   //Group类中的role属性映射到Role类中,故save group的时候就能save role

   @ManyToMany(mappedBy="role",cascade=CascadeType.ALL)

   public Set<Group>getGroup() {

      return group;

   }

   public voidsetGroup(Set<Group> group) {

      this.group = group;

   }

}

Group类

package com.model;

 

import java.io.Serializable;

import java.util.HashSet;

import java.util.Set;

 

import javax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.JoinTable;

import javax.persistence.ManyToMany;

import javax.persistence.Table;

import javax.persistence.JoinColumn;;

 

@Entity

@Table(name="t_group")

public classGroup implements Serializable {

 

   private int gid;

   private String gname;

   private Set<Role> role=new HashSet<Role>();

  

   @Id

   @Column(name="gid")

   public int getGid() {

      return gid;

   }

 

   public void setGid(int gid) {

      this.gid = gid;

   }

  

  

   @Column(name="gname")

   public String getGname() {

      return gname;

   }

  

   public void setGname(String gname) {

      this.gname = gname;

   }

  

   //产生中间表,定义中间表的表名和列的属性

   @ManyToMany(cascade=CascadeType.ALL)

    @JoinTable(

            name="t_role_group",

            joinColumns=@JoinColumn(name="gid"),

            inverseJoinColumns=@JoinColumn(name="rid")

    )

   public Set<Role>getRole() {

      return role;

   }

  

   public void setRole(Set<Role>role){

      this.role = role;

   }

  

  

  

}

配置hibernate.cfg.xml

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/HibernateConfiguration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

  <session-factory>

      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="hibernate.connection.password">123456</property>

        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hiber?useUnicode=true&amp;characterEncoding=UTF-8</property>

        <property name="hibernate.connection.username">root</property>

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="hbm2ddl.auto">create</property>

      

       

        <!-- 注解方式 -->

        <mapping class="com.model.CopyGoods_item"/>

        <mapping class="com.model.CopyGoods_type"/>

        <mapping class="com.model.Ticket"/>

        <mapping class="com.model.Viewer"/>

        <mapping class="com.model.Group"/>

        <mapping class="com.model.Role"/>

        <!-- 配置文件方式 -->

        

 

</session-factory>

</hibernate-configuration>

测试类

package com.Test;

import org.hibernate.Session;

import org.hibernate.Transaction;

 

import com.db.util.HiberDBUtil;

import com.model.Group;

import com.model.Role;

 

public classTestForMtM {

 

   public static void main(String[] args) {

     

      Sessionsession=HiberDBUtil.getSession();

     

      Rolerole1=new Role();

      role1.setRid(1);

      role1.setRname("读文件权限");

     

      Rolerole2=new Role();

      role2.setRid(2);

      role2.setRname("写文件权限");

     

      Rolerole3=new Role();

      role3.setRid(3);

      role3.setRname("服务器管理权限");

     

      Rolerole4=new Role();

      role4.setRid(4);

      role4.setRname("管理用户权限");

     

     

      Groupgroup1=new Group();

      group1.setGid(11);

      group1.setGname("系统管理员");

      group1.getRole().add(role1);

      group1.getRole().add(role2);

      group1.getRole().add(role3);

      group1.getRole().add(role4);

     

      Groupgroup2=new Group();

      group2.setGid(12);

      group2.setGname("一般用户");

      group2.getRole().add(role1);

      group2.getRole().add(role2);

     

      Groupgroup3=new Group();

      group3.setGid(13);

      group3.setGname("访问者");

      group3.getRole().add(role1);

     

      Transactiontr = session.beginTransaction();

        try {

          

          session.save(group1);

          session.save(group2);

          session.save(group3);

          session.save(role1);

          session.save(role2);

          session.save(role3);

          session.save(role4);

            tr.commit();

        } catch (Exception e) {

            tr.rollback();

        }finally{

            HiberDBUtil.closeSession();

        }

   }

  

  

}

结果截图

双向一对多注解方式

需求:

1.通过hibernate一对多双向映射关系,使用XML文件配置方式,在数据库中,自动创建商品表(g_item),和商品种类表(g_type)

2.创建商品表(goods_item)的字段如下:

商品ID(goodsId)

商品名称(goodsName)

商品价格(goodsPrice)

商品产地(prcPlace)

商品种类ID(tId)

3.商品种类表(goods_type)的字段如下:

商品种类ID(tId)

商品种类名称ID(tName)

商品种类描述(tDebe)

4.使用add方法,在商品种类表,插入如下的数据:

商品种类ID     商品种类名称商品种类描述

  1001            日常用品 人们每天使用的物品

  1002            食品 包括熟食品,方便食品等

  1003            电器 各种通过电力工作的电子产品

在商品表,插入如下的数据:

商品ID   商品名称商品价格商品产地商品种类ID

10001     牙刷7.85       广州市    1001

10002   火腿肠9.6        浙江金华   1002

10003   方便面    15.8       天津       1002

10004电水壶    213        深圳市     1003

10005   电冰箱    3618      青岛       1004

具体实现:

项目结构:

编写model类

CopyGoods_type类

package com.model;

 

import java.util.HashSet;

import java.util.Set;

 

importjavax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.OneToMany;

import javax.persistence.Table;

 

 

 

@Entity

@Table(name="copy_type")

public class CopyGoods_type {

   /*商品种类ID(tId)

   商品种类名称ID(tName)

   商品种类描述(tDebe)*/

  

   privateint tid;

   privateString tname;

   privateString tdebe;

  

   privateSet<CopyGoods_item> items=new HashSet<CopyGoods_item>();

  

   @Id

   @Column(name="tid")

   publicint getTid() {

      returntid;

   }

   publicvoid setTid(int tid) {

      this.tid= tid;

   }

  

   @Column(name="tname")

   publicString getTname() {

      returntname;

   }

   publicvoid setTname(String tname) {

      this.tname= tname;

   }

  

   @Column(name="tdebe")

   publicString getTdebe() {

      returntdebe;

   }

   publicvoid setTdebe(String tdebe) {

      this.tdebe= tdebe;

   }

  

   //item类中的type映射到type类中,保存item类的时候就能保存type

   @OneToMany(cascade=CascadeType.ALL,mappedBy="type")

   public Set<CopyGoods_item> getItems() {

      returnitems;

   }

   publicvoid setItems(Set<CopyGoods_item> items) {

      this.items= items;

   }

  

 

}

 

 

CopyGoods_item类

package com.model;

 

importjavax.persistence.CascadeType;

import javax.persistence.Column;

import javax.persistence.Entity;

import javax.persistence.Id;

import javax.persistence.JoinColumn;

import javax.persistence.ManyToOne;

import javax.persistence.Table;

 

 

@Entity

@Table(name="copy_item")

public class CopyGoods_item {

 

   privateint goodsId;

   privateString goodsName;

   privatedouble goodsPrice;

   privateString prcPlace;

  

   privateCopyGoods_type type;

  

   @Id

   @Column(name="goodsId")

   publicint getGoodsId() {

      returngoodsId;

   }

   publicvoid setGoodsId(int goodsId) {

      this.goodsId= goodsId;

   }

  

  

   @Column(name="goodsName")

   publicString getGoodsName() {

      returngoodsName;

   }

   publicvoid setGoodsName(String goodsName) {

      this.goodsName= goodsName;

   }

  

   @Column(name="goodsPrice")

   publicdouble getGoodsPrice() {

      returngoodsPrice;

   }

   publicvoid setGoodsPrice(double goodsPrice) {

      this.goodsPrice= goodsPrice;

   }

  

   @Column(name="prcPlace")

   publicString getPrcPlace() {

      returnprcPlace;

   }

   publicvoid setPrcPlace(String prcPlace) {

      this.prcPlace= prcPlace;

   }

  

   //多对一关系,设置连接的列是 type类中的tId

   @ManyToOne(cascade=CascadeType.ALL)

   @JoinColumn(name="tId")

   publicCopyGoods_type getType() {

      returntype;

   }

   publicvoid setType(CopyGoods_type type) {

      this.type= type;

   }

  

 

  

  

}

 

配置hibernate.cfg.xml

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/HibernateConfiguration DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

  <session-factory>

      <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

        <property name="hibernate.connection.password">123456</property>

        <property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hiber?useUnicode=true&amp;characterEncoding=UTF-8</property>

        <property name="hibernate.connection.username">root</property>

        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <property name="hbm2ddl.auto">create</property>

      

       

        <!-- 注解方式 -->

        <mapping class="com.model.CopyGoods_item"/>

        <mapping class="com.model.CopyGoods_type"/>

        <mapping class="com.model.Ticket"/>

        <mapping class="com.model.Viewer"/>

        <mapping class="com.model.Group"/>

        <mapping class="com.model.Role"/>

        <!-- 配置文件方式 -->

        

 

</session-factory>

</hibernate-configuration>

测试类

package com.Test;

import org.hibernate.Session;

import org.hibernate.Transaction;

import com.db.util.HiberDBUtil;

import com.model.CopyGoods_item;

import com.model.CopyGoods_type;

import com.model.CopyGoods_item;

import com.model.CopyGoods_type;

public class TestOne {

         publicstatic void main(String[] args) {

                    Session session=HiberDBUtil.getSession();

                           

                            CopyGoods_typetype1=new CopyGoods_type();

                            type1.setTid(1001);

                            type1.setTname("日常用品");

                            type1.setTdebe("人们每天使用的物品");

                           

                            CopyGoods_typetype2=new CopyGoods_type();

                            type2.setTid(1002);

                            type2.setTname("食品");

                            type2.setTdebe("包括熟食品,方便食品等");

                           

                            CopyGoods_typetype3=new CopyGoods_type();

                            type3.setTid(1003);

                            type3.setTname("电器");

                            type3.setTdebe("各种通过电力工作的电子产品");

                           

               

                            CopyGoods_itemitem1=new CopyGoods_item();

                            item1.setGoodsId(10001);

                            item1.setGoodsName("牙刷");

                            item1.setGoodsPrice(7.85);

                            item1.setPrcPlace("广州市");

                           

                           

                            CopyGoods_itemitem2=new CopyGoods_item();

                            item2.setGoodsId(10002);

                            item2.setGoodsName("火腿肠");

                            item2.setGoodsPrice(7.85);

                            item2.setPrcPlace("广州市");

                           

                           

                            CopyGoods_itemitem3=new CopyGoods_item();

                            item3.setGoodsId(10003);

                            item3.setGoodsName("方便面 ");

                            item3.setGoodsPrice(15.8);

                            item3.setPrcPlace("天津 ");

                           

                           

                            CopyGoods_itemitem4=new CopyGoods_item();

                            item4.setGoodsId(10004);

                            item4.setGoodsName("电水壶 ");

                            item4.setGoodsPrice(213);

                            item4.setPrcPlace("深圳市");

                  

                           

                            CopyGoods_itemitem5=new CopyGoods_item();

                            item5.setGoodsId(10005);

                            item5.setGoodsName("电冰箱 ");

                            item5.setGoodsPrice(3618);

                            item5.setPrcPlace("青岛 ");

                           

                           

                           

                           

                            item1.setType(type1);

                            item2.setType(type2);

                            item3.setType(type2);

                            item4.setType(type3);

                            item5.setType(type3);

                           

                           

                           

                            Transactiontr = session.beginTransaction();

                 try {

                     session.save(item1);

                     session.save(item2);

                     session.save(item3);

                     session.save(item4);

                     session.save(item5);

                     tr.commit();

                 } catch (Exception e) {

                     tr.rollback();

                 }finally{

                     HiberDBUtil.closeSession();

                 }

         }

        

        

}

结果截图:

附加=HiberDBUtil

packagecom.db.util;

import org.hibernate.Session;

importorg.hibernate.SessionFactory;

importorg.hibernate.cfg.Configuration;

public classHiberDBUtil {

      private static StringCONFIG_FILE_LOCATION="/com/cfg/hibernate.cfg.xml";

      private static Configuration config=new Configuration();

      private static SessionFactory sessionFac;

      private static ThreadLocal<Session>tdlocal=new ThreadLocal<Session>();

      private static Stringconfigfile=CONFIG_FILE_LOCATION;

     

      //静态数据块  加载配置文件,生成sessionFactory

      static{

           try{

                 //加载配置文件

                 config.configure(configfile);

                 //通过配置文件加载sessionFactory

                 sessionFac=config.buildSessionFactory();

           }catch(Exception e){

                 e.printStackTrace();

           }

          

          

      }

     

     

      private HiberDBUtil(){

          

      }

     

     

      public static Session getSession(){

          

           Session session=(Session)tdlocal.get();

           if(null==session||!session.isOpen()){

                 if(sessionFac==null){

                      reBuildSessonFac();

                 }

                 session=(sessionFac!=null)?sessionFac.openSession():null;

                 tdlocal.set(session);

           }

          

           return session;

      }

     

      public static void  reBuildSessonFac(){

           try{

                 //加载配置文件

                 config.configure(configfile);

                 //通过配置文件加载sessionFactory

                 sessionFac=config.buildSessionFactory();

           }catch(Exception e){

                 e.printStackTrace();

           }

      }

     

      public static void closeSession(){

           Session session=tdlocal.get();

           tdlocal.set(null);

          

           if(session!=null){

                 session.close();

           }

     

      }

     

      public static SessionFactorygetSessionFactory(){

           return sessionFac;

      }

}

猜你喜欢

转载自blog.csdn.net/hzs33/article/details/51656376
今日推荐