{"id":8,"date":"2013-04-01T19:44:53","date_gmt":"2013-04-01T19:44:53","guid":{"rendered":"http:\/\/www.yeetrack.com\/post\/2013-04-01\/Hibernate%E6%A0%B7%E4%BE%8B%E5%B7%A5%E7%A8%8B---Java%20Annotation"},"modified":"2013-09-27T22:36:45","modified_gmt":"2013-09-27T14:36:45","slug":"hibernate%e6%a0%b7%e4%be%8b%e5%b7%a5%e7%a8%8b-javaannotation","status":"publish","type":"post","link":"https:\/\/www.yeetrack.com\/?p=8","title":{"rendered":"Hibernate\u6837\u4f8b\u5de5\u7a0b&#8212;Java Annotation"},"content":{"rendered":"<h3>Hibernate\u6837\u4f8b\u5de5\u7a0b---Java Annotation<\/h3>\n<p>Jdbc\u7f16\u7a0b\u4e2d\uff0c\u4f7f\u7528Dao\u5c42insert\u3001update\u3001delete\u3001select\u7b49\u4e8e\u6570\u636e\u5e93\u4ea4\u4e92\uff0c\u5728Hibernate\u4e2d\u6839\u636e\u7b80\u5355\u7684Java\u5bf9\u8c61\uff08pojo\uff09\u4e0e\u5b9e\u4f53\u7c7b\u7684\u6620\u5c04\u914d\u7f6e\u81ea\u52a8\u751f\u6210sql\u8bed\u53e5\uff0c\u662f\u52a8\u6001\u751f\u6210\u7684\u3002\u4e0b\u9762\u662f\u4e2a\u7b80\u5355\u7684\u4f8b\u5b50\uff0c\u5de5\u7a0b\u4f7f\u7528maven\u7ba1\u7406\u3002<\/p>\n<p><!--more--><\/p>\n<p>pom.xml\u6587\u4ef6\u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre><code>&lt;project xmlns=&quot;http:\/\/maven.apache.org\/POM\/4.0.0&quot; xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\nxsi:schemaLocation=&quot;http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd&quot;&gt;\n&lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\n&lt;groupId&gt;com.yeetrack&lt;\/groupId&gt;\n&lt;artifactId&gt;hibernate&lt;\/artifactId&gt;\n&lt;packaging&gt;war&lt;\/packaging&gt;\n&lt;version&gt;0.0.1-SNAPSHOT&lt;\/version&gt;\n&lt;name&gt;hibernate Maven Webapp&lt;\/name&gt;\n&lt;url&gt;http:\/\/maven.apache.org&lt;\/url&gt;\n&lt;dependencies&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;junit&lt;\/groupId&gt;\n  &lt;artifactId&gt;junit&lt;\/artifactId&gt;\n  &lt;version&gt;3.8.1&lt;\/version&gt;\n  &lt;scope&gt;test&lt;\/scope&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\n    &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;\n    &lt;version&gt;4.2.0.Final&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;log4j&lt;\/groupId&gt;\n    &lt;artifactId&gt;log4j&lt;\/artifactId&gt;\n    &lt;version&gt;1.2.17&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n    &lt;groupId&gt;mysql&lt;\/groupId&gt;\n    &lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\n    &lt;version&gt;5.1.24&lt;\/version&gt;\n&lt;\/dependency&gt;\n&lt;\/dependencies&gt;\n&lt;build&gt;\n&lt;finalName&gt;hibernate&lt;\/finalName&gt;\n&lt;\/build&gt;\n&lt;\/project&gt;\n<\/code><\/pre>\n<p>\u5b9e\u4f53\u7c7b\uff08Entity\uff09\u662f\u4e0e\u6570\u636e\u5e93\u6709\u6620\u5c04\u5173\u7cfb\u7684Java\u7c7b\uff0c\u8fd9\u4e2aJava\u7c7b\u7684\u6240\u6709\u5c5e\u6027\u90fd\u8981\u6709<code>getter<\/code>\u548c<code>setter<\/code>\u65b9\u6cd5\uff0c\u4e0b\u9762\u7684Cat\u7c7b\u5c31\u662f\u4e00\u4e2a\u5b9e\u4f53\u7c7b\u3002\u5b9e\u4f53\u7c7b\u8fd8\u8981\u914d\u7f6e\u8868\u540d\uff08@Table\uff09\u3001\u4e3b\u952e\uff08@id\uff09\u3001\u666e\u901a\u5c5e\u6027\uff08@Column\uff09\uff0cCat.java\u5bf9\u5e94\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre><code>package com.yeetrack.hibernate;\n\nimport java.util.Date;\n\nimport javax.persistence.Column;\nimport javax.persistence.Entity;\nimport javax.persistence.GeneratedValue;\nimport javax.persistence.GenerationType;\nimport javax.persistence.Id;\nimport javax.persistence.JoinColumn;\nimport javax.persistence.ManyToOne;\nimport javax.persistence.Temporal;\nimport javax.persistence.TemporalType;\nimport javax.persistence.Table;\n\n\/**\n* \n* @author youthflies\n* @Entity \u8868\u793a\u8be5\u7c7b\u80fd\u591f\u88abHibernate\u6301\u4e45\u5316\n* @Table \u6307\u5b9a\u8be5Entity\u6307\u5b9a\u6570\u636e\u5e93\u8868\u540d\n* @id \u6307\u5b9a\u4e3b\u952e\n* @Column \u6307\u5b9a\u5c5e\u6027\u5bf9\u5e94\u7684\u6570\u636e\u8868\u7684\u5217\u540d\n* \n*\/\n\n@Entity\n@Table(name = &quot;tb_cat&quot;)\npublic class Cat\n{\n\n    @Id\n    @GeneratedValue (strategy = GenerationType.AUTO)  \/\/\u6307\u5b9a\u81ea\u589e\u957f\uff0csql\u8bed\u53e5auto_increment\n    private Integer id;\n\n    @Column(name = &quot;name&quot;)\n    private String name;\n\n    @Column(name=&quot;description&quot;)\n    private String description;\n\n    @ManyToOne\n    @JoinColumn(name = &quot;mother_id&quot;)  \/\/\u6307\u5b9a\u5b9e\u4f53\u7c7b\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u8fd9\u91cc\u4e00\u4e2acat mother\u53ef\u4ee5\u6709\u591a\u4e2acat\n    private Cat mother;\n\n    @Temporal(TemporalType.TIMESTAMP)\n    @Column(name=&quot;createDate&quot;)\n    private Date createDate;\n\n    public Integer getId()\n    {\n        return id;\n    }\n\n    public void setId(Integer id)\n    {\n        this.id = id;\n    }\n\n    public String getName()\n    {\n        return name;\n    }\n\n    public void setName(String name)\n    {\n        this.name = name;\n    }\n\n    public String getDescription()\n    {\n        return description;\n    }\n\n    public void setDescription(String description)\n    {\n        this.description = description;\n    }\n\n    public Cat getMother()\n    {\n        return mother;\n    }\n\n    public void setMother(Cat mother)\n    {\n        this.mother = mother;\n    }\n\n    public Date getCreateDate()\n    {\n        return createDate;\n    }\n\n    public void setCreateDate(Date createDate)\n    {\n        this.createDate = createDate;\n    }   \n\n}  \n<\/code><\/pre>\n<p>Hibernate\u914d\u7f6e\u6587\u4ef6<code>hibernate.cfg.xml<\/code>\uff0c\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre><code>&lt;?xml version='1.0' encoding='utf-8'?&gt; \n\n&lt;!DOCTYPE hibernate-configuration PUBLIC \n      &quot;-\/\/Hibernate\/Hibernate Configuration DTD 3.0\/\/EN&quot; \n      &quot;http:\/\/hibernate.sourceforge.net\/hibernate-configuration-3.0.dtd&quot;&gt;\n\n&lt;hibernate-configuration&gt;\n        &lt;session-factory&gt;\n            &lt;!-- jdbc\u914d\u7f6e --&gt;\n            &lt;property name=&quot;connection.driver_class&quot;&gt;com.mysql.jdbc.Driver&lt;\/property&gt;\n            &lt;property name=&quot;connection.url&quot;&gt;jdbc:mysql:\/\/127.0.0.1:3306\/test?CharactorEncoding=utf-8&lt;\/property&gt;\n            &lt;property name=&quot;connection.username&quot;&gt;root&lt;\/property&gt;\n            &lt;property name=&quot;connection.password&quot;&gt;toor&lt;\/property&gt;\n            &lt;!-- \u4f7f\u7528mysql\u6570\u636e\u5e93\u683c\u5f0f\u7684sql\u8bed\u53e5 --&gt;\n            &lt;property name=&quot;dialect&quot;&gt;org.hibernate.dialect.MySQLDialect&lt;\/property&gt;\n            &lt;property name=&quot;show_sql&quot;&gt;true&lt;\/property&gt;\n            &lt;!-- \u6307\u5b9aHibernate\u542f\u52a8\u65f6\u81ea\u52a8\u521b\u5efa\u8868\u7ed3\u6784 --&gt;\n            &lt;property name=&quot;hbm2ddl.auto&quot;&gt;create&lt;\/property&gt;\n            &lt;!-- \u4e3a\u6bcf\u4e2a\u7ebf\u7a0b\u751f\u6210\u4e00\u4e2asession --&gt;\n            &lt;property name=&quot;current_session_context_class&quot;&gt;thread&lt;\/property&gt;\n            &lt;!-- \u6307\u5b9aCat\u7c7b\u4e3aHibernate\u5b9e\u4f53\u7c7b --&gt;\n            &lt;mapping class=&quot;com.yeetrack.hibernate.Cat&quot;&gt;&lt;\/mapping&gt;\n        &lt;\/session-factory&gt;\n&lt;\/hibernate-configuration&gt;  \n<\/code><\/pre>\n<p><code>&lt;mapping class=&quot;&quot;<\/code>\u544a\u8bc9Hibernate\uff0cCat\u662f\u4e2a\u5b9e\u4f53\u7c7b\uff0cHibernate\u5c06\u7ba1\u7406Cat\u4e0e\u5bf9\u5e94\u7684\u6570\u636e\u5e93\u8868\u3002<\/p>\n<p>Hibernate\u5de5\u5177\u7c7b\uff0c<strong>HibernageUtil.java<\/strong>,\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre><code>package com.yeetrack.hibernate;\n\nimport org.hibernate.SessionFactory;\nimport org.hibernate.cfg.AnnotationConfiguration;\n\/**\n * \n * @author youthflies\n *\n *\/\n@SuppressWarnings(&quot;deprecation&quot;)\npublic class HibernateUtil\n{\n\n    private static final SessionFactory sessionFactory;\n\n    static\n    {\n        sessionFactory = new AnnotationConfiguration().configure(&quot;hibernate.cfg.xml&quot;).buildSessionFactory();\n    }\n\n    public static SessionFactory getSessionFactory()\n    {\n        return sessionFactory;\n    }\n}\n<\/code><\/pre>\n<p>Hibernate\u4f7f\u7528log4j\u6765\u8f93\u51fa\u65e5\u5fd7\uff0c\u8fd9\u91cc\u914d\u7f6e\u4e00\u4e0b\uff0c\u5728classpath\u4e2d\u65b0\u5efa<strong>log4j.properties<\/strong>, \u5185\u5bb9\u5982\u4e0b\uff1a<\/p>\n<pre><code>### direct log messages to stdout ###  \nlog4j.appender.stdout=org.apache.log4j.ConsoleAppender  \nlog4j.appender.stdout.Target=System.out  \nlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout  \nlog4j.appender.stdout.layout.ConversionPattern= %5p %c{1}:%L - %m%n  \n\n#\u8bbe\u7f6e\u65e5\u8bb0\u7ea7\u522b\u4e3ainfo\uff0c\u8f93\u51fa\u5230\u63a7\u5236\u53f0\nlog4j.rootLogger=info, stdout   \n\n### log just the SQL  \nlog4j.logger.org.hibernate.SQL=debug  \n\n### log JDBC bind parameters ###  \n#log4j.logger.org.hibernate.type=info  \n#log4j.logger.org.hibernate.type=debug  \n\n### log schema export\/update ###  \nlog4j.logger.org.hibernate.tool.hbm2ddl=debug  \n<\/code><\/pre>\n<p>Hibernate\u662fORM\u6846\u67b6\uff0c\u5b83\u4fdd\u5b58\u6570\u636e\u65f6\uff0c\u5148\u901a\u8fc7<strong>HibernateSessionUtil<\/strong>\u7684<strong>SessionFactory<\/strong>\u5f00\u542f\u4e00\u4e2asession\u4f1a\u8bdd\uff0c\u7136\u540e\u5f00\u542f\u4e00\u4e2aTransaction\uff08\u4e8b\u52a1\uff09\uff0c\u518d\u6267\u884c\u4fdd\u5b58\u4ee3\u7801\uff0c\u6700\u540e\u63d0\u4ea4\u4e8b\u52a1\u3001\u5173\u95edsession\u3002\u4e0b\u9762\u662f\u7b80\u5355\u7684\u6d4b\u8bd5\u4ee3\u7801\uff08CatTest.java)\uff1a<\/p>\n<pre><code>package com.yeetrack.hibernate;\n\nimport java.util.Date;\nimport java.util.List;\n\nimport org.hibernate.Session;\nimport org.hibernate.Transaction;\n\npublic class CatTest\n{\n\n\/**\n * @param args\n *\/\npublic static void main(String[] args)\n{\n    \/\/ TODO Auto-generated method stub\n    Cat mother = new Cat();\n    mother.setName(&quot;mother cat's name&quot;);\n    mother.setDescription(&quot;The Mama cat&quot;);\n    mother.setCreateDate(new Date());\n\n    Cat kitty = new Cat();\n    kitty.setMother(mother);\n    kitty.setName(&quot;kitty&quot;);\n    kitty.setDescription(&quot;The baby cat&quot;);\n    kitty.setCreateDate(new Date());\n\n    Cat mimmy = new Cat();\n    mimmy.setMother(mother);\n    mimmy.setName(&quot;mimmy&quot;);\n    mimmy.setDescription(&quot;The baby cat&quot;);\n    mimmy.setCreateDate(new Date());\n\n    Session session = HibernateUtil.getSessionFactory().openSession(); \/\/\u6253\u5f00Hibernate \u5bf9\u8bdd\n    Transaction trans = session.beginTransaction();   \/\/\u6253\u5f00\u4e00\u4e2a\u4e8b\u52a1\n\n    \/\/\u4fdd\u5b58Cat\n    session.persist(mother);\n    session.persist(kitty);\n    session.persist(mimmy);\n\n    \/\/\u5229\u7528Hibernate createQuery \u67e5\u8be2\u6570\u636e\u5e93tb_cat\u8868\u4e2d\u7684\u6240\u6709\u6570\u636e\n    List&lt;Cat&gt; catList = session.createQuery(&quot; from Cat &quot;).list();\n    StringBuffer result = new StringBuffer();\n    result.append(&quot;\u6570\u636e\u5e93\u4e2d\u7684\u6570\u636e:n&quot;);\n\n    for(Cat cc : catList)\n    {\n        result.append(&quot;Cat baby:&quot;+cc.getName()+&quot;, &quot;);\n        result.append(&quot;cat mother:&quot;+(cc.getMother() == null ? &quot;\u6ca1\u6709\u8bb0\u5f55&quot; : cc.getMother().getName()));\n        result.append(&quot;rn&quot;);\n    }\n    trans.commit();\n    session.close();\n    System.out.println(result.toString());\n    }\n\n}\n<\/code><\/pre>\n<p>\u8fd0\u884c\u7ed3\u679c\uff1a<\/p>\n<pre><code> INFO Version:37 - HCANN000001: Hibernate Commons Annotations {4.0.1.Final}\nINFO Version:41 - HHH000412: Hibernate Core {4.2.0.Final}\nINFO Environment:239 - HHH000206: hibernate.properties not found\nINFO Environment:342 - HHH000021: Bytecode provider name : javassist\nINFO Configuration:1933 - HHH000043: Configuring from resource: hibernate.cfg.xml\nINFO Configuration:1952 - HHH000040: Configuration resource: hibernate.cfg.xml\nWARN DTDEntityResolver:74 - HHH000223: Recognized obsolete hibernate namespace http:\/\/hibernate.sourceforge.net\/. Use namespace http:\/\/www.hibernate.org\/dtd\/ instead. Refer to Hibernate 3.6 Migration Guide!\nINFO Configuration:2074 - HHH000041: Configured SessionFactory: null\nINFO DriverManagerConnectionProviderImpl:98 - HHH000402: Using Hibernate built-in connection pool (not for production use!)\nINFO DriverManagerConnectionProviderImpl:134 - HHH000115: Hibernate connection pool size: 20\nINFO DriverManagerConnectionProviderImpl:137 - HHH000006: Autocommit mode: false\nINFO DriverManagerConnectionProviderImpl:151 - HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql:\/\/127.0.0.1:3306\/test?CharactorEncoding=utf-8]\nINFO DriverManagerConnectionProviderImpl:156 - HHH000046: Connection properties: {user=root, password=****}\nINFO Dialect:128 - HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect\nINFO TransactionFactoryInitiator:68 - HHH000399: Using default transaction strategy (direct JDBC transactions)\nINFO ASTQueryTranslatorFactory:48 - HHH000397: Using ASTQueryTranslatorFactory\nINFO SchemaExport:343 - HHH000227: Running hbm2ddl schema export\n    DEBUG SchemaExport:353 - Import file not found: \/import.sql\n    DEBUG SQL:104 - alter table tb_cat drop foreign key FKCB83D685D794462\n    Hibernate: alter table tb_cat drop foreign key FKCB83D685D794462\n    DEBUG SQL:104 - drop table if exists tb_cat\n    Hibernate: drop table if exists tb_cat\nDEBUG SQL:104 - create table tb_cat (id integer not null auto_increment, createDate datetime, description varchar(255), name varchar(255), mother_id integer, primary key (id))\n    Hibernate: create table tb_cat (id integer not null auto_increment, createDate datetime, description varchar(255), name varchar(255), mother_id integer, primary key (id))\nDEBUG SQL:104 - alter table tb_cat add index FKCB83D685D794462 (mother_id), add constraint FKCB83D685D794462 foreign key (mother_id) references tb_cat (id)\n     Hibernate: alter table tb_cat add index FKCB83D685D794462 (mother_id), add constraint FKCB83D685D794462 foreign key (mother_id) references tb_cat (id)\n        INFO SchemaExport:405 - HHH000230: Schema export complete\n    DEBUG SQL:104 - insert into tb_cat (createDate, description, mother_id, name) values (?, ?, ?, ?)\n     Hibernate: insert into tb_cat (createDate, description, mother_id, name) values (?, ?, ?, ?)\n    DEBUG SQL:104 - insert into tb_cat (createDate, description, mother_id, name) values (?, ?, ?, ?)\n    Hibernate: insert into tb_cat (createDate, description, mother_id, name) values (?, ?, ?, ?)\nDEBUG SQL:104 - insert into tb_cat (createDate, description, mother_id, name) values (?, ?, ?, ?)\n    Hibernate: insert into tb_cat (createDate, description, mother_id, name) values (?, ?, ?, ?)\n    DEBUG SQL:104 - select cat0_.id as id1_0_, cat0_.createDate as createDa2_0_, cat0_.description as descript3_0_, cat0_.mother_id as mother5_0_, cat0_.name as name4_0_ from tb_cat cat0_\n    Hibernate: select cat0_.id as id1_0_, cat0_.createDate as createDa2_0_, cat0_.description as descript3_0_, cat0_.mother_id as mother5_0_, cat0_.name as name4_0_ from tb_cat cat0_\n\u6570\u636e\u5e93\u4e2d\u7684\u6570\u636e:\nCat baby:mother cat's name, cat mother:\u6ca1\u6709\u8bb0\u5f55\nCat baby:kitty, cat mother:mother cat's name\nCat baby:mimmy, cat mother:mother cat's name\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Hibernate\u6837\u4f8b\u5de5\u7a0b&#8212;Java Annotation Jdbc\u7f16\u7a0b\u4e2d\uff0c\u4f7f\u7528Dao\u5c42insert\u3001update\u3001delete\u3001select\u7b49\u4e8e\u6570\u636e\u5e93\u4ea4\u4e92\uff0c\u5728Hibernate\u4e2d\u6839\u636e\u7b80\u5355\u7684Jav&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pgc_sgb_lightbox_settings":"","footnotes":""},"categories":[33],"tags":[8,7,5],"class_list":["post-8","post","type-post","status-publish","format-standard","hentry","category-coding","tag-java","tag-7","tag-5"],"views":3644,"_links":{"self":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/8","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8"}],"version-history":[{"count":1,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/8\/revisions"}],"predecessor-version":[{"id":183,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=\/wp\/v2\/posts\/8\/revisions\/183"}],"wp:attachment":[{"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yeetrack.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}