hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架。hibernate可以自动生成SQL语句,自动执行,可以随心所欲的使用对象编程思维来操纵数据库。
不同数据库语法细节上存在差异,hibernate可根据方言自动应付底层数据库访问所存在的细节差异,将HQL有针对的转化为某一数据库所支持的SQL语句。
GBase8s Hibernate方言包,针对GBase8s数据库定制的语法解析包,本文通过实例介绍如何通过hibernate方言包实现连接GBase8s数据库,实现数据添加与查询过程。
1、首先,工程中引入GBase8s hibernate方言包、hibernate原生包文件,以及GBase8s驱动程序。
2、配置文件
1)配置hibernate.cfg.xml文件
<!-- 配置数据库连接的基本信息: -->
<property name="hibernate.connection.driver_class">
com.gbasedbt.jdbc.Driver
</property>
<property name="hibernate.connection.url">
jdbc:gbasedbt-sqli://172.16.33.240:5555/test:GBASEDBTSERVER=ol_gbasedbt1210_2;
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">redhat</property>
<!-- 配置Hibernate方言,用于针对不同数据库生成不同底层SQL语句 -->
<property name="hibernate.dialect">
gbase.hibernate.dialect.GBaseDialect
</property>
<!-- 显示SQL -->
<property name="show_sql">true</property>
<!-- 格式化SQL -->
<property name="hibernate.format_sql">true</property>
<!-- 关闭事物自动提交 -->
<property name="hibernate.connection.autocommit">false</property>
<!-- hbm:映射 to DDL -->
<!-- update:如果数据库中没有表,创建一个新的表,如果有,直接使用这个表,并可以更新表的结构。 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<mapping resource="com/hibernate/util/student.hbm.xml" />
</session-factory>
hibernate.cfg.xml文件主要参数说明
1)hibernate.connection.driver_class属性,配置为GBase8s驱动类名称定义为
com.gbasedbt.jdbc.Driver
2)hibernate.connection.url属性,为GBase8s数据库url
3)hibernate.connection.username属性,为GBase8s数据库用户名
4)hibernate.connection.password属性,为GBase8s数据库密码
5)hibernate.dialect属性,为GBase8s数据库方言,定义为
gbase.hibernate.dialect.GBaseDialect
6)hibernate.connection.url属性,为GBase8s数据库url
7)hibernate对象-关系映射文件配置为com/hibernate/util/student.hbm.xml
2)配置对象-关系映射文件,com/hibernate/util/student.hbm.xml
com/hibernate/util/student.hbm.xml文件如下:
private int id;
private String name;
private int age;
/**
* @return the age
*/
public int getAge() {
return this.age;
}
/**
* @param age
* the name to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name
* the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id
* the id to set
*/
public void setId(int id) {
this.id = id;
}
}
4、执行用例
1)插入数据
public void insertUser(){
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
try {
SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
Session session = null;
session = sessionFactory.openSession();
//开始事物
Transaction transaction = session.beginTransaction();
Student s = new Student();
s.setId(1);
s.setAge(20);
s.setName(“zhangsan”);
session.save(s);
transaction.commit();
session.close();
sessionFactory.close();
}catch (Exception e) {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
e.printStackTrace();
}
}
1)插入数据
public void selectUsers(){
ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();
try {
SessionFactory sessionFactory = new MetadataSources(serviceRegistry).buildMetadata().buildSessionFactory();
Session session = null;
session = sessionFactory.openSession();
String hql="select u.name,u.age from Student u";
Query q= session.createQuery(hql);
List<Object[]> list=q.list();
for (int i = 0; i < list.size(); i++) {
Object[] os=list.get(i);
System.out.println("name:"+os[0]+"age:"+os[1]);
}
session.close();
sessionFactory.close();
}catch (Exception e) {
StandardServiceRegistryBuilder.destroy( serviceRegistry );
e.printStackTrace();
}
}
通过以上步骤实现通过hibernate方言包,实现数据的插入和查询。