Hibernate操作GBase 8s数据库示例
这个例子将创建一个简单的 Java 项目结构,并演示如何使用 Hibernate 进行GBase 8s数据库的数据处理工作(插入,选择,更新和删除),以及分页显示。
使用到的工具及组件包括:
Eclipse
JDK-1.8
hibernate-5.3.12 及方言包
Hibernate-5.3.12 及对应的GBase 8s Dialect
GBase 8s 数据库及JDBC驱动2.0.1a2_2
最终的项目目录结构
资源配置文件hibernate.cfg.xml
hibernate.cfg.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <? xml version = "1.0" encoding = "UTF-8" ?> <! DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" < hibernate-configuration > < session-factory > <!-- 必须属性 用户名和密码按照实际的来配置 --> < property name = "connection.username" >gbasedbt</ property > < property name = "connection.password" >GBase123</ property > < property name = "connection.url" >jdbc:gbasedbt-sqli://192.168.1.71:9088/testdb:GBASEDBTSERVER=gbase01;DB_LOCALE=zh_CN.utf8;CLIENT_LOCALE=zh_CN.utf8;IFX_LOCK_MODE_WAIT=30</ property > < property name = "connection.driver_class" >com.gbasedbt.jdbc.IfxDriver</ property > < property name = "dialect" >org.hibernate.dialect.GBasedbtDialect</ property > <!-- 常用属性 --> < property name = "show_sql" >true</ property > <!-- <property name="format_sql">true</property> --> < property name = "hbm2ddl.auto" >create</ property > <!-- 将学生类 映射的xml加入到配置文件 --> < mapping class = "com.gbasedbt.hibernate.Student" /> </ session-factory > </ hibernate-configuration > |
POJO类 Stuent.java
Student.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package com.gbasedbt.hibernate; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public class Student { /** * 建表语句,可通过@Column控制自动创建生成 * create table student (id serial not null, username varchar(60), usertext text, userphoto byte, primary key(id)); */ // 序号, int/serial @Id @GeneratedValue (strategy = GenerationType.IDENTITY) private int id; // 用户名, length指定长度: 不指定使用255, 大于255使用lvarchar @Column (name = "username" , length = 60 ) private String username; // 简历信息, columnDefinition 会覆盖掉length信息, 使用text/clob @Column (columnDefinition = "clob" ) private String usertext; // 照片, byte/blob @Column (name = "userphoto" , columnDefinition = "blob" ) private byte [] userphoto; public String getUsername() { return username; } public void setUsername(String username) { this .username = username; } public String getUsertext() { return usertext; } public void setUsertext(String usertext) { this .usertext = usertext; } public byte [] getUserphoto() { return userphoto; } public void setUserphoto( byte [] userphoto) { this .userphoto = userphoto; } @Override public String toString() { return "学生 [序号 = " + id + "\t姓名 = " + username + "\t简介= " + usertext + "]" ; } } |
操作及测试 StudentTest.java
StudentTest.java 实现CRUD,分页显示功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | package com.gbasedbt.hibernate; import java.util.Iterator; import java.util.List; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class StudentTest { private static SessionFactory sf; public static void main(String[] args) { Configuration cfg = new Configuration(); sf = cfg.configure().buildSessionFactory(); //C 增加学生 for ( int i = 1 ; i < 11 ; i++) { addStudent( "test" + i, "text info " + i, ( "photo byte " + 1 ).getBytes()); } //R 查询所有学生 listStudents(); //R 分页查询学生 listStudentsByPage( 3 , 2 ); //U 修改学生 updateStudent( 2 , "Modify text info" ); listStudents(); //D 删除学生 deleteStudent( 3 ); listStudents(); } /** * 增加学生,返回序号 * @param username * @param usertext * @param userphoto * @return */ public static int addStudent(String username, String usertext, byte [] userphoto) { int studentID = 0 ; Student student = new Student(); student.setUsername(username); student.setUsertext(usertext); student.setUserphoto(userphoto); Session session = sf.openSession(); try { session.beginTransaction(); studentID = ( int ) session.save(student); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction() != null ) { session.getTransaction().rollback(); } e.printStackTrace(); } finally { session.close(); } return studentID; } /** * 显示所有学生 */ @SuppressWarnings ( "rawtypes" ) public static void listStudents() { Session session = sf.openSession(); try { List students = session.createQuery( "FROM Student" ).list(); for (Iterator iterator = students.iterator(); iterator.hasNext();) { Student student = (Student) iterator.next(); System.out.println(student.toString()); } } catch (HibernateException e) { e.printStackTrace(); } finally { session.close(); } } /** * 分页显示学生:页大小,第几页 * @param pageSize * @param numPage */ @SuppressWarnings ( "rawtypes" ) public static void listStudentsByPage( int pageSize, int numPage) { int firstRow = pageSize * (numPage - 1 ); System.out.println( "显示第 " + numPage + " 页(按每 " + pageSize + " 记录分页)" ); Session session = sf.openSession(); try { List students = session.createQuery( "FROM Student" ).setFirstResult(firstRow).setMaxResults(pageSize).list(); for (Iterator iterator = students.iterator(); iterator.hasNext();) { Student student = (Student) iterator.next(); System.out.println(student.toString()); } } catch (HibernateException e) { e.printStackTrace(); } finally { session.close(); } } /** * 按序号更新userText信息 * @param userId * @param userText */ public static void updateStudent( int userId, String userText) { Session session = sf.openSession(); try { session.beginTransaction(); Student student = (Student) session.get(Student. class , userId); student.setUsertext(userText); session.update(student); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction() != null ) { session.getTransaction().rollback(); } e.printStackTrace(); } finally { session.close(); } } /** * 按序号删除学生 * @param userId */ public static void deleteStudent( int userId) { Session session = sf.openSession(); try { session.beginTransaction(); Student student = (Student) session.get(Student. class , userId); session.delete(student); session.getTransaction().commit(); } catch (HibernateException e) { if (session.getTransaction() != null ) { session.getTransaction().rollback(); } e.printStackTrace(); } finally { session.close(); } } } |
源文件代码:Hibernate-Demo.zip