Hibernate开发之创建POJO-配置文件-映射文件

来源:互联网 发布:淘宝键盘哪个牌子好 编辑:程序博客网 时间:2024/04/29 03:58

目录:

1、确定已在oracle数据库中建表

1.1、查询表

1.2、删除表中已有记录

1.3、确定已有sequence

2、创建java project工程

创建class Student

2.1 添加jar包:ojdbc6.jar,以及...\hibernate-release-5.1.0.Final\lib\required下的所有jar包

3、创建hibernate.cfg.xml

4、创建POJO对应的映射文件*.hbm.xml

5、创建Configuration对象,读取hibernate.cfg.xml

详细如下:


1、确定已在oracle数据库中建表

1.1、查询表

SQL*Plus: Release 11.2.0.2.0 Production on 星期四 3月 24 09:41:08 2016Copyright (c) 1982, 2014, Oracle.  All rights reserved.SQL> conn zhaod输入口令:已连接。SQL> desc student; 名称                                      是否为空? 类型 ----------------------------------------- -------- ---------------------------- ID                                        NOT NULL NUMBER(10) NAME                                      NOT NULL VARCHAR2(20) ADDRESS                                            VARCHAR2(20) GENDER                                             VARCHAR2(20) AGE                                                NUMBER(3)

1.2、删除表中已有记录

SQL> delete from student;已删除0行。SQL> commit;提交完成。SQL>

1.3、确定已有sequence

SQL> col sequence_name format a20;  SQL> select sequence_name,min_value,max_value from all_sequences;    SEQUENCE_NAME         MIN_VALUE  MAX_VALUE  -------------------- ---------- ----------  SCHEDULER$_JOBSUFFIX          1 1.0000E+28  _S    DM$EXPIMP_ID_SEQ              1 1.0000E+28  HS_BULK_SEQ                   1 1.0000E+28  XDB$NAMESUFF_SEQ              1      99999  SDO_IDX_TAB_SEQUENCE          1 1.0000E+27  TMP_COORD_OPS           1000000    2000000  SAMPLE_SEQ                    1 1.0000E+28  WWV_FLOW_SESSION_SEQ          1 1.0000E+28  WWV_SEQ                       1 1.0000E+28    SEQUENCE_NAME         MIN_VALUE  MAX_VALUE  


2、创建java project工程
创建class Stident

package com.iotek.basic.pojo;import java.io.Serializable;public class Student implements Serializable {private Long id;private String name;private String address;private String gender;private Integer age;public Student() {super();}public Student(Long id, String name, String address, String gender, Integer age) {super();this.id = id;this.name = name;this.address = address;this.gender = gender;this.age = age;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}

3、创建hibernate.cfg.xml
与oracle对应的该工程配置文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC   "-//Hibernate/Hibernate Configuration DTD//EN"   "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>  <session-factory>        <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>                 <property name="connection.url">jdbc:oracle:thin:@localhost:1521:XE</property>                 <property name="connection.username">zhaod</property>                 <property name="connection.password">zhaodeng</property>            <!-- SQL dialect -->                 <property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>        <!-- Echo all executed SQL to stdout -->                 <property name="show_sql">true</property>  </session-factory> </hibernate-configuration>


这里应注意加上一行

 <mapping resource="com/iotek/basic/pojo//Student.hbm.xml"/>

否则会出现Unknown entity 错误(汗)



附:原配置文件:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC   "-//Hibernate/Hibernate Configuration DTD//EN"   "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration>  <session-factory>        <property name="connection.driver_class">org.h2.Driver</property>      <!-- 驱动 -->            <property name="connection.url">jdbc:h2:target/db/hibernate-spatial;mode=PostgreSQL;DB_CLOSE_DELAY=-1</property><!-- url -->                  <property name="connection.username">sa</property>   <!-- 用户名 -->              <property name="connection.password"></property> <!-- 密码 -->         <!-- JDBC connection pool (use the built-in) 连接池-->                 <property name="connection.pool_size">1</property>        <!-- SQL dialect 方言:实现hibernate与不同数据库的连接-->                 <property name="dialect">org.hibernate.dialect.H2Dialect</property>        <!-- Enable Hibernate's automatic session context management -->                 <property name="current_session_context_class">thread</property>        <!-- Disable the second-level cache  -->                 <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>        <!-- Echo all executed SQL to stdout -->                 <property name="show_sql">true</property>        <!-- Drop and re-create the database schema on startup -->                 <property name="hbm2ddl.auto">update</property>  <property name="hibernate.search.default.directory_provider">filesystem</property>     <property name="hibernate.search.default.indexBase">target/indexes</property>       <mapping class="org.hibernate.search.test.spatial.POI"/>         </session-factory> </hibernate-configuration>

4、创建POJO对应的映射文件*.hbm.xml
一个POJO对应一个映射文件

Student.hbm.xml

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.iotek.basic.pojo">    <class name="Student" table="STUDENT">    <id name="id" column="ID" type="long">    <generator class="sequence">    <param name="sequence">student_seq</param>    </generator>    </id><property name="name" type="string" column="NAME"/><property name="address" type="string" column="ADDRESS"/><property name="gender" type="string" column="GENDER"/><property name="age" type="int" column="AGE"/>    </class></hibernate-mapping>

后问题就出在这里(问题为:ORA-02289: 序列不存在),应改为:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.iotek.basic.pojo">    <class name="Student" table="STUDENT">    <id name="id" column="ID" type="long">    <generator class="increment">    <param name="sequence">student_seq</param>    </generator>    </id><property name="name" type="string" column="NAME"/><property name="address" type="string" column="ADDRESS"/><property name="gender" type="string" column="GENDER"/><property name="age" type="int" column="AGE"/>    </class></hibernate-mapping>

即,将generator的sequence改为increment(适用所有数据库)

注:<generator>表示一个主键的生成机制。即具体通过何种方式来生成。 生成方式包括:increment:生成long, short或者int类型的主键,不能在cluster环境下使用。适用于所有数据库 identity:生成long, short或者int类型的主键。适用于DB2, MySQL, MS SQL Server,  Sybase and HypersonicSQL sequence :生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase. hilo:生成long, short或者int类型的主键。需要提供一个数据库的表来存放生成的主键信息。当采用应用服务器的JTA提供的数据库连接或者用户自定义的数据库连接的时候,不要使用这种主键生成方式。适用于所有数据库 seqhilo:采用给定的数据库的sequence来生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase.                                                               uuid.hex:采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库 uuid.string:同样采用128位的UUID算法。将生成的字符编码位16位。适用于除PostgreSQL.以外的数据库 native:根据具体连接的数据库从identity, sequence或者hilo选择一种来生成主键。适用的数据库根据选择的生成方式确定。 assigned: 交给应用自己给主键赋值。要注意的是赋值必须在调用save()方法之前完成。适用的数据库根据选择的生成方式确定。

5、创建Configuration对象,读取hibernate.cfg.xml

package com.iotek.basic;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;import org.hibernate.Transaction;import com.iotek.basic.pojo.Student;public class StudentTest {public static void main(String[] args) {// TODO Auto-generated method stubStudent stu = new Student();stu.setName("zhaox");stu.setAddress("beijing");stu.setGender("female");stu.setAge(18);// 创建Configuration,读取hibernate.cfg.xmlConfiguration config = new Configuration();config.configure("hibernate.cfg.xml");// 创建SessionFactorySessionFactory factory = config.buildSessionFactory();// 创建Session,获取数据库连接Session session = factory.openSession();// 通过session完成数据库的CRUD()Transaction trans = null;try {// 启动事务trans = session.beginTransaction();// 保存学生对象session.save(stu);// 提交事务trans.commit();} catch (Exception e) {e.printStackTrace();// 回滚事务trans.rollback();} finally {// 关闭session,即为关闭connectionsession.close();}}}

运行结果为:



SQL> col sequence_name format a20;SQL> select * from student;        ID NAME---------- ----------------------------------------ADDRESS----------------------------------------GENDER                                          AGE---------------------------------------- ----------         1 zhaoxbeijingfemale                                           18SQL>













0 0
原创粉丝点击