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

目录:

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对应的该工程配置文件




  
	
	

        oracle.jdbc.driver.OracleDriver         
        jdbc:oracle:thin:@localhost:1521:XE         
        zhaod         
        zhaodeng    

                 
        org.hibernate.dialect.Oracle10gDialect

                 
        true
	
  	 


这里应注意加上一行

 

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



附:原配置文件:




  
	

        org.h2.Driver          
        jdbc:h2:target/db/hibernate-spatial;mode=PostgreSQL;DB_CLOSE_DELAY=-1          
        sa         
          

                 
        1

                 
        org.hibernate.dialect.H2Dialect

                 
        thread

                 
        org.hibernate.cache.NoCacheProvider

                 
        true

                 
        update
  		filesystem   
  		target/indexes   
  		
  		     
  		
  	 


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

Student.hbm.xml




    
    	
    		
    			student_seq
    		
    	
		
		
		
		
    

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




    
    	
    		
    			student_seq
    		
    	
		
		
		
		
    

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

注:表示一个主键的生成机制。即具体通过何种方式来生成。 生成方式包括:
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();
		}

	}

}

运行结果为:

Hibernate开发之创建POJO-配置文件-映射文件_第1张图片


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













你可能感兴趣的:(计算机)