Hibernate开发之创建POJO-配置文件-映射文件
2016-03-24 10:51
405 查看
目录:
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、查询表
1.2、删除表中已有记录
1.3、确定已有sequence
2、创建java project工程
创建class Stident
3、创建hibernate.cfg.xml
与oracle对应的该工程配置文件
这里应注意加上一行
<mapping resource="com/iotek/basic/pojo//Student.hbm.xml"/>
否则会出现Unknown entity 错误(汗)
附:原配置文件:
4、创建POJO对应的映射文件*.hbm.xml
一个POJO对应一个映射文件
Student.hbm.xml
后问题就出在这里(问题为:ORA-02289: 序列不存在),应改为:
即,将generator的sequence改为increment(适用所有数据库)
5、创建Configuration对象,读取hibernate.cfg.xml
运行结果为:
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 2016 Copyright (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 stub Student stu = new Student(); stu.setName("zhaox"); stu.setAddress("beijing"); stu.setGender("female"); stu.setAge(18); // 创建Configuration,读取hibernate.cfg.xml Configuration config = new Configuration(); config.configure("hibernate.cfg.xml"); // 创建SessionFactory SessionFactory 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,即为关闭connection session.close(); } } }
运行结果为:
SQL> col sequence_name format a20; SQL> select * from student; ID NAME ---------- ---------------------------------------- ADDRESS ---------------------------------------- GENDER AGE ---------------------------------------- ---------- 1 zhaox beijing female 18 SQL>
相关文章推荐
- 已经下载过的sdk引入安装到eclipse
- 第三周总结
- 第三次附加作业
- 怎样理解Servlet的单实例多线程
- 作业:C++作业2
- 跟着Google学Android —— 2.1 孩子再多 也要兼顾 —— 支持不同设备
- XRecyclerView实现RecyclerView下拉刷新上来加载 自己做了部分修改,使代码更简洁易用
- Android Studio的导入开源框架的示例
- [Error] Error parsing XML: unbound prefix
- 常用向量和矩阵的范数
- kettle-插件开发
- 实验:C++实验2-项目1
- CCF 201512-4 送货
- git 操作
- C++作业2
- Java_WEB开发_struts2学习的总结_Iterate标签遍历
- html5进度条
- swift !?
- java中HashMap详解
- Leetcode 50 Pow(x, n) 两种方式求解