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.xml4、创建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
- Hibernate开发之创建POJO-配置文件-映射文件
- hibernate配置文件,映射文件
- 使用MyEclipse创建POJO类映射文件
- 利用Ant和Xdoclet从pojo类生成hibernate的映射文件并生成hibernate的配置文件
- Hibernate配置详解 --POJO映射文件 – 类映射
- hibernate配置文件和映射文件
- 【hibernate】配置文件与映射文件
- Hibernate(myeclipse创建Hibernate配置文件、创建对象-关系映射文件)
- Hibernate之配置文件以及对象关系映射文件了解
- Hibernate配置文件之映射文件配置(一)
- Hibernate配置文件之映射文件配置(二)
- hibernate映射文件开发
- 使用IDE(myeclipse)逆向生成hibernate映射文件和pojo
- 手动配置hibernate项目--POJO、关系映射文件
- HibernateTools-代码生成pojo对象和hibernate映射文件
- POJO类以及映射配置文件
- Hibernate之复合主键映射并总配置文件不引入映射文件
- Hibernate开发之配置文件
- java中HashMap详解
- CentOS下安装postgresql 9.4
- 计算机视觉(ComputerVision, CV)相关领域的网站链接
- App打包上线和打包测试版
- Linux下安装与配置snmp服务
- Hibernate开发之创建POJO-配置文件-映射文件
- CCF 201512-4 送货
- C++实验2-标准体重
- kettle-插件开发
- Java千百问_03基本语法(001)_局部变量、类变量、实例变量有什么区别
- Java_WEB开发_struts2学习的总结_Iterate标签遍历
- 常用向量和矩阵的范数
- Android Studio导入ECMobile问题
- CMake 学习笔记整理(7)