利用Hibernate注解生成表

来源:互联网 发布:龙卷风收音机软件 编辑:程序博客网 时间:2024/06/03 19:59

Hibernate4注释

@Entity(name = "tbl_user")  将一个类声明为一个实体bean(即一个持久化POJO类)
@Id注解则声明了该实体bean的标识属性,必填属性
@GenericGeneratorhibernate在JPA的基础上进行了扩展,可以用一下方式引入hibernate独有的主键生成策略。
@Column   name解决属性名和字段名不对应 length限制字符串长度 unique , nullable , precision 数据长度, scale  无小数

hibernate.cfg.xml

    <?xml version='1.0' encoding='UTF-8'?>      <!DOCTYPE hibernate-configuration PUBLIC                "-//Hibernate/Hibernate Configuration DTD 3.0//EN"                "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">      <!-- Generated by MyEclipse Hibernate Tools.                   -->      <hibernate-configuration>            <session-factory>          <property name="myeclipse.connection.profile">mysql</property>          <property name="connection.url">              jdbc:mysql://localhost:3306/forums          </property>          <property name="connection.username">root</property>          <property name="connection.password">root</property>          <property name="connection.driver_class">              com.mysql.jdbc.Driver          </property>          <property name="hibernate.current_session_context_class">thread</property>          <property name="dialect">              org.hibernate.dialect.MySQLDialect          </property>          <property name="show_sql">true</property>          <property name="hibernate.current_session_context_class">thread</property>          <property name="hibernate.hbm2ddl.auto">update</property>                <!-- 连接池 配置 c3p0-->          <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>          <!-- 在连接池中可用数据连接的最大数目 -->          <property name="hibernate.c3p0.max_size">20</property>          <!-- 在连接池中可用数据连接的最小数目 -->          <property name="hibernate.c3p0.min_size">5</property>          <!-- 设定数据库连接的过期时间,以秒为单位,如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除-->          <property name="hibernate.c3p0.timeout">120</property>          <!-- 每3000秒查询所有连接池的空闲连接以秒为单位 -->          <property name="hibernate.c3p0.idle_test_period">3000</property>                <!--当连接池里面的连接用完的时候,C3P0一下获取的新的连接数              <property name="hibernate.c3p0.acquire_increment">2</property>             每次都验证连接是否可用              <property name="hibernate.c3p0.validate">true</property> -->                        <!-- 映射文件引入 -->           <mapping class="csdn.forum.model.TblUser" />           <mapping class="csdn.forum.model.TblTopic" />            <mapping class="csdn.forum.model.TblBoard" />           <mapping class="csdn.forum.model.TblReply" />       </session-factory>            </hibernate-configuration>  



解析文件hibernate.hbm.xml的类HibernateSessionFactory.java
    package csdn.forum.util;            import org.hibernate.Session;      import org.hibernate.SessionFactory;      import org.hibernate.boot.registry.StandardServiceRegistryBuilder;      import org.hibernate.cfg.Configuration;      import org.hibernate.service.ServiceRegistry;            public class HibernateSessionFactory {          static Configuration cfg;          static SessionFactory sessionFactory;          static ServiceRegistry serviceRegistry;          static {              cfg = new Configuration().configure();// 默认找文件hibernate.hbm.xml              // 创建服务注册对象              serviceRegistry = new StandardServiceRegistryBuilder().applySettings(                      cfg.getProperties()).build();              // 创建Factory工厂              sessionFactory = cfg.buildSessionFactory(serviceRegistry);          }                // 获取session对象          public static Session getSession() {              // 打开session              return sessionFactory.getCurrentSession();          }      }  


fetch在Hibernate里用时默认值:FetchType.LAZY,它要求程序运行时延迟加载所有的集合和实体。
fetch设置为FetchType.EAGER,它提示程序在首次访问数据时应马上加载所有的集合和实体mappedBy默认值:如果关系是单向的,则该关联提供程序确定拥有该关系的字段。如果关系是双向的,则将关联相反(非拥有)方上的mappedBy元素设置为拥有此关系的字段或属性的名称

@BatchSize(size=10) 对查询抓取的优化方案,通过指定一个主键或外键列表,Hibernate使用单条SELECT语句获取一批对象实例或集合。

TblBoard.java

    package csdn.forum.model;            import java.util.ArrayList;      import java.util.List;      import javax.persistence.CascadeType;      import javax.persistence.Column;      import javax.persistence.Entity;      import javax.persistence.FetchType;      import javax.persistence.GeneratedValue;      import javax.persistence.Id;      import javax.persistence.JoinColumn;      import javax.persistence.ManyToOne;      import javax.persistence.OneToMany;            import org.hibernate.annotations.GenericGenerator;      @Entity(name = "tbl_board")      public class TblBoard {          private String id;          private String name;                    private TblBoard parentBoard;          private List<TblBoard> board = new ArrayList<TblBoard>();          private List<TblTopic> topics=new ArrayList<TblTopic>();          // @id必填          @GenericGenerator(name = "generator", strategy = "uuid.hex")          // hibernate独有的16进制算法          @Id          @GeneratedValue(generator = "generator")          @Column(name = "id", unique = true, nullable = false, length = 32)          public String getId() {              return id;          }                public void setId(String id) {              this.id = id;          }          @Column(name ="name")          public String getName() {              return name;          }                public void setName(String name) {              this.name = name;          }          @ManyToOne(cascade = {CascadeType.ALL})          @JoinColumn(name = "parent_id")          public TblBoard getParentBoard() {              return parentBoard;          }                public void setParentBoard(TblBoard parentBoard) {              this.parentBoard = parentBoard;          }                    @OneToMany(cascade = {CascadeType.ALL},fetch = FetchType.LAZY,mappedBy = "parentBoard")//在1这方加入@OneToMany(cascade = {CascadeType.ALL},mappedBy = "user") ,只调用session.sa//ve(user);      //在多这方加入@ManyToOne(cascade = {CascadeType.ALL}) @JoinColumn(name = "user_id"),只调用s//ession.save(topic);          public List<TblBoard> getBoard() {              return board;          }                public void setBoard(List<TblBoard> board) {              this.board = board;          }          @OneToMany(cascade = {CascadeType.ALL},fetch = FetchType.LAZY,mappedBy = "board")          public List<TblTopic> getTopics() {              return topics;          }                public void setTopics(List<TblTopic> topics) {              this.topics = topics;          }            }  




TblReply.Java


    package csdn.forum.model;            import java.util.Date;            import javax.persistence.CascadeType;      import javax.persistence.Column;      import javax.persistence.Entity;      import javax.persistence.GeneratedValue;      import javax.persistence.Id;      import javax.persistence.JoinColumn;      import javax.persistence.ManyToOne;      import javax.persistence.Temporal;      import javax.persistence.TemporalType;            import org.hibernate.annotations.GenericGenerator;      @Entity(name = "tbl_reply")       public class TblReply{                    private String id;          private String title;          private String content;          private Date publishTime;          private Date modifyTime;          private TblUser user;          private TblTopic tblTopic;                    @GenericGenerator(name = "generator", strategy = "uuid.hex")          @Id          @GeneratedValue(generator = "generator")          @Column(name = "id", unique = true, nullable = false, length = 32)          public String getId() {              return id;          }          public void setId(String id) {              this.id = id;          }          @Column(name = "title", length = 32)          public String getTitle() {              return title;          }          public void setTitle(String title) {              this.title = title;          }          @Column(name = "content", length = 2000)          public String getContent() {              return content;          }          public void setContent(String content) {              this.content = content;          }          @Temporal(TemporalType.DATE)          @Column(name = "publishTime")          public Date getPublishTime() {              return publishTime;          }          public void setPublishTime(Date publishTime) {              this.publishTime = publishTime;          }          @Temporal(TemporalType.DATE)          @Column(name = "modifyTime")          public Date getModifyTime() {              return modifyTime;          }          public void setModifyTime(Date modifyTime) {              this.modifyTime = modifyTime;          }          @ManyToOne(cascade = {CascadeType.ALL})          @JoinColumn(name = "user_id")          public TblUser getUser() {              return user;          }          public void setUser(TblUser user) {              this.user = user;          }          @ManyToOne(cascade = {CascadeType.ALL})          @JoinColumn(name = "topic_id")          public TblTopic getTblTopic() {              return tblTopic;          }          public void setTblTopic(TblTopic tblTopic) {              this.tblTopic = tblTopic;          }                }  




TblTopic.java

    package csdn.forum.model;            import java.util.ArrayList;      import java.util.Date;      import java.util.List;            import javax.persistence.CascadeType;      import javax.persistence.Column;      import javax.persistence.Entity;      import javax.persistence.FetchType;      import javax.persistence.GeneratedValue;      import javax.persistence.Id;      import javax.persistence.JoinColumn;      import javax.persistence.ManyToOne;      import javax.persistence.OneToMany;      import javax.persistence.Temporal;      import javax.persistence.TemporalType;            import org.hibernate.annotations.BatchSize;      import org.hibernate.annotations.GenericGenerator;            @Entity(name = "tbl_topic")       public class TblTopic  {                private String id;          private String title;          private String content;          private Date pubishTime;          private Date modifyTime;          private TblUser user;          private TblBoard board;          private List<TblReply> replys=new ArrayList<TblReply>();                    @GenericGenerator(name = "generator", strategy = "uuid.hex")          @Id          @GeneratedValue(generator = "generator")          @Column(name = "id", unique = true, nullable = false, length = 32)          public String getId() {              return id;          }          public void setId(String id) {              this.id = id;          }          @Column(name = "title", length = 32)          public String getTitle() {              return title;          }          public void setTitle(String title) {              this.title = title;          }          @Column(name = "content", length = 2000)          public String getContent() {              return content;          }          public void setContent(String content) {              this.content = content;          }          @Temporal(TemporalType.DATE)          @Column(name = "publishTime")          public Date getPubishTime() {              return pubishTime;          }          public void setPubishTime(Date pubishTime) {              this.pubishTime = pubishTime;          }          @Temporal(TemporalType.DATE)          @Column(name = "modifyTime")          public Date getModifyTime() {              return modifyTime;          }          public void setModifyTime(Date modifyTime) {              this.modifyTime = modifyTime;          }      //  多这方映射user_id          @ManyToOne(cascade = {CascadeType.ALL})          @JoinColumn(name = "user_id")          public TblUser getUser() {              return user;          }          public void setUser(TblUser user) {              this.user = user;          }          @OneToMany(cascade = {CascadeType.ALL},fetch = FetchType.LAZY,mappedBy = "tblTopic")          public List<TblReply> getReplys() {              return replys;          }          public void setReplys(List<TblReply> replys) {              this.replys = replys;          }          @ManyToOne(cascade = {CascadeType.ALL})          @JoinColumn(name = "board_id")          public TblBoard getBoard() {              return board;          }          public void setBoard(TblBoard board) {              this.board = board;          }         }  




 

TblUser.java

    package csdn.forum.model;            import java.util.ArrayList;      import java.util.Date;      import java.util.List;            import javax.persistence.CascadeType;      import javax.persistence.Column;      import javax.persistence.Entity;      import javax.persistence.FetchType;      import javax.persistence.GeneratedValue;      import javax.persistence.Id;      import javax.persistence.OneToMany;      import javax.persistence.Temporal;      import javax.persistence.TemporalType;            import org.hibernate.annotations.GenericGenerator;            @Entity(name="tbl_user")      public class TblUser {          /**           *            */          private static final long serialVersionUID = 1L;          private String id;          private String uname;          private String upass;          private String head;          private Date regTime;          private boolean gender;                              private  List<TblTopic>  topic=new ArrayList<TblTopic>();          private  List<TblReply>  replies=new ArrayList<TblReply>();                //@id必填          @GenericGenerator(name = "generator", strategy = "uuid.hex")//hibernate独有的16进制算法          @Id          @GeneratedValue(generator = "generator")          @Column(name = "id", unique = true, nullable = false, length = 32)          public String getId() {              return id;          }                public void setId(String id) {              this.id = id;          }         @Column (name="uname",length=20)          public String getUname() {              return uname;          }                public void setUname(String uname) {              this.uname = uname;          }            @Column (name="upass",length=20)          public String getUpass() {              return upass;          }                public void setUpass(String upass) {              this.upass = upass;          }            @Column (name="head")          public String getHead() {              return head;          }                public void setHead(String head) {              this.head = head;          }                     @Temporal(TemporalType.DATE)           @Column(name = "regTime")          public Date getRegTime() {              return regTime;          }           public void setRegTime(Date regTime) {              this.regTime = regTime;          }                @Column(name="gender",length=20)          public boolean isGender() {              return gender;          }                public void setGender(boolean gender) {              this.gender = gender;          }          //现在是一的一方直接通过它映射user,user是多的这一方的属性          // @OneToMany(mappedBy="user")          @OneToMany(cascade = {CascadeType.ALL},fetch = FetchType.LAZY,mappedBy = "user")          public List<TblTopic> getTopic() {              return topic;          }                public void setTopic(List<TblTopic> topic) {              this.topic = topic;          }                @OneToMany(cascade={CascadeType.ALL},fetch=FetchType.LAZY,mappedBy="user")          public List<TblReply> getReplies() {              return replies;          }                public void setReplies(List<TblReply> replies) {              this.replies = replies;          }                            }  





测试类TestUser.java

    package csdn.forum.test;            import java.util.Date;      import java.util.List;            import org.hibernate.Query;      import org.hibernate.Session;      import org.junit.Test;            import csdn.forum.model.TblBoard;      import csdn.forum.model.TblReply;      import csdn.forum.model.TblTopic;      import csdn.forum.model.TblUser;      import csdn.forum.util.HibernateSessionFactory;            public class TestUser {          @Test          public void save() {              Session session = HibernateSessionFactory.getSession();              session.getTransaction().begin();              /*               * //1.保存java板块包含jsp,ajax,struts2,hiberante子版块 TblBoard java =new               * TblBoard(); java.setName("java");               *                * TblBoard jsp =new TblBoard(); jsp.setName("jsp"); TblBoard struts2               * =new TblBoard(); struts2.setName("struts2"); TblBoard hiberante =new               * TblBoard(); hiberante.setName("hiberante"); //相互持有               * java.getBoard().add(jsp); java.getBoard().add(struts2);               * java.getBoard().add(hiberante); jsp.setParentBoard(java);               * struts2.setParentBoard(java); hiberante.setParentBoard(java);               *                *                * session.save(java); session.getTransaction().commit();               */                    // 2.利用csdn用户身份,在struts2板块下发表帖子              /*               * TblUser user=new TblUser(); user.setUname("csdn"); TblBoard               * struts2=(TblBoard               * )session.get(TblBoard.class,"2c96c05e44da48600144da4861f60002");               * TblTopic topic=new TblTopic(); topic.setTitle("struts  TblBoard");               * topic.setUser(user); topic.setBoard(struts2); topic.setPubishTime(new               * Date()); user.getTopic().add(topic); session.save(topic);               * session.getTransaction().commit();               */                    /*               * //3.利用admin用户身份,给帖子回帖 TblUser user=new TblUser();               * user.setUname("admin"); TblTopic topic1=(TblTopic)               * session.get(TblTopic.class,"2c96c05e44da44660144da4469390000");               * TblReply reply=new TblReply(); reply.setTitle("reply title");               * reply.setUser(user); user.getReplies().add(reply);               * reply.setTblTopic(topic1); topic1.getReplys().add(reply);               * session.getTransaction().commit();               */                    // 4.利用admin用户身份,修改回帖内容              /*               * Query query=session.createQuery(               * "from csdn.forum.model.TblReply  r where r.user.uname='admin'");               * TblReply reply=(TblReply) query.list().get(0);               * reply.setTitle("update"); session.save(reply);               * session.getTransaction().commit();               */                    // 5.利用admin用户身份,查看回帖//根据帖子查看回帖,查看下面的所有回帖                    /*               * Query query=session.createQuery(               * "from csdn.forum.model.TblReply t where t.user.uname='admin'");               * List<TblReply> lisst=query.list();               *                * for(TblReply tabl:lisst){ System.out.println("1111111111111");               * System.out.println(tabl.getContent()); }               * session.getTransaction().commit();               */                    // 6.利用csdn用户身份,删除回帖,条件限制为有回帖存在不允许删除              /*               * Query query1=session.createQuery(               * "from csdn.forum.model.TblTopic  t where t.user.uname='csdn'");               * TblTopic topic1=(TblTopic) query1.list().get(0);               * if(topic1.getReplys().size()==0){ session.delete(topic1); }else{               * System.out.println("提示不能删除"); }               *                * session.getTransaction().commit();               */                    // 7.统计struts2板块下的发帖数              // Query              // query2=session.createQuery("select count(*) from csdn.forum.model.TblTopic  t where t.board.name='struts2'");                    /*               * Query query2 = session.createQuery(               * " from csdn.forum.model.TblTopic t where t.board.name='struts2'");               *                * System.out.println(query2.list().size()+"---"); //               * System.out.println(query2.list().get(0)); //               * System.out.println(query2.list().get(1)); //               * System.out.println(query2.list().get(2));               * session.getTransaction().commit();               */              // 8.查询struts2板块下所有帖子按时间倒序排列              /*               * Query query=session.createQuery(               * "from csdn.forum.model.TblTopic t where t.board.name='struts2' order by t.pubishTime  desc"               * ); //System.out.println(query); for(int               * i=0;i<query.list().size();i++){ TblTopic topic=(TblTopic)               * query.list().get(i); System.out.println(topic.getTitle()); }               */                    // 9.查询帖子下所有回帖,按时间倒序排列              /*               * Query query=session.createQuery(               * "from csdn.forum.model.TblReply t where t.tblTopic.title='struts  TblBoard' order by t.publishTime  desc"               * ); //System.out.println(query); for(int               * i=0;i<query.list().size();i++){ TblReply topic=(TblReply)               * query.list().get(i); System.out.println(topic.getTitle()); }               */                                          /*               *                * 查询父亲java板块               * TblBoard board = (TblBoard) session.get(TblBoard.class,                      "2c96c05e44da48600144da4861dd0000");              System.out.println(board);              session.getTransaction().commit();*/                                                        // 10.查出最后发表帖子标题               Query query = session               .createQuery("from csdn.forum.model.TblTopic t  order by t.pubishTime  asc");               // System.out.println(query);               TblTopic topic=(TblTopic) query.list().get(query.list().size()-1);               System.out.println(topic.getTitle());          }      }  



0 0
原创粉丝点击