This topic introduces how to build an application by using the Hibernate framework and OceanBase Database. It also covers the use of the application for fundamental database operations, including table creation, data insertion, data query, and other basic operations.
Prerequisites
- You have installed OceanBase Database.
- You have installed JDK 1.8 and Maven.
- You have installed IntelliJ IDEA.
Note
The tool used to run the sample code in this topic is IntelliJ IDEA 2021.3.2 (Community Edition). You can also choose a tool of your preference to run the sample code.
Procedure
Note
The steps outlined in this topic are for the Windows environment. If you are using a different operating system or compiler, the steps may vary slightly.
- Obtain the connection string of OceanBase Database.
- Import the
java-oceanbase-hibernateproject into IntelliJ IDEA. - Modify the database connection information in the
java-oceanbase-hibernateproject. - Run the
java-oceanbase-hibernateproject.
Step 1: Obtain the connection string of OceanBase Database
Contact the deployment personnel or administrator of OceanBase Database to obtain the corresponding database connection string.
obclient -hxx.xx.xx.xx -P2883 -uroot@sys#cluster -p**** -AFill in the corresponding information in the URL based on the deployed OceanBase Database.
Note
The URL is required in the
hibernate.cfg.xmlfile.jdbc:oceanbase://host:port/schema_name?user=$user_name&password=$passwordParameter description:
host: the IP address for connecting to OceanBase Database. For connection through ODP, use the IP address of an ODP. For direct connection, use the IP address of an OBServer node.port: the port for connecting to OceanBase Database. For connection through ODP, the default value is2883, which can be customized when ODP is deployed. For direct connection, the default value is2881, which can be customized when OceanBase Database is deployed.schema_name: the name of the schema to be accessed.user_name: specified by the-uparameter. The format is user@tenant#cluster name or username@SERVICE:service name. If you use the user@tenant#cluster name format, the default tenant issys, and the default administrator user isroot. If you directly connect to OceanBase Database, you can omit the cluster name. If you use ODP, you must specify the cluster name.password: the account password.
For more information about URL parameters, see Database URL.
Step 2: Import the java-oceanbase-hibernate project into IntelliJ IDEA
Open IntelliJ IDEA and choose File > Open....

In the Open File or Project window that appears, select the corresponding project file and click OK to import the project file.
IntelliJ IDEA automatically identifies various files in the project and displays the project structure, file list, module list, and dependency relationships in the Project tool window. The Project tool window is usually located on the left side of the IntelliJ IDEA interface and is open by default. If it is closed, you can click View > Tool Windows > Project in the menu bar or press the shortcut key Alt + 1 to reopen it.
Note
When you import a project using IntelliJ IDEA, it automatically detects the pom.xml file in the project, downloads the required dependency libraries based on the described dependencies in the file, and adds them to the project.
View the project.

Step 3: Modify the database connection information in the java-oceanbase-hibernate project
Modify the database connection information in the hibernate.cfg.xml file based on the information obtained in Step 1: Obtain the connection string of OceanBase Database.
Note
If you need to add additional attributes to the JDBC connection string, see Database URL.
Here is an example:
- The name of the database driver is:
com.mysql.cj.jdbc.Driver. - The IP address of the OBServer node is
172.30.xxx.xxx. - The access port is 2881.
- The name of the schema to be accessed is
test. - The tenant account is
root@mysql001.mysql001is a MySQL user tenant created in OceanBase Database, androotis the username of themysql001tenant. - The password is
******.
Sample code:
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://172.30.xxx.xxx:2881/test</property>
<property name="hibernate.connection.username">root@mysql001</property>
<property name="hibernate.connection.password">******</property>
Step 4: Run the java-oceanbase-hibernate project
Running path
- In the project structure, locate the
TestHibernate.javafile in src > test > java. - In the toolbar, choose Run(U) > Run > TestHibernate, or click the green triangle in the upper-right corner to run.
- View the log information and output results in the IDEA console.
Running result
User{id=2, name='update'}
User{id=3, name='user_insert3'}
User{id=4, name='user_insert4'}
User{id=5, name='user_insert5'}
FAQ
1. Connection timeout
If you encounter a connection timeout, you can configure the connection timeout parameter in the JDBC URL:
jdbc:mysql://host:port/database?connectTimeout=30000&socketTimeout=60000
2. Character set issues
To ensure correct character encoding, set the appropriate character set parameter in the JDBC URL:
jdbc:mysql://host:port/database?characterEncoding=utf8&useUnicode=true
3. SSL connection
To enable an SSL connection to OceanBase Database, add the following parameter to the JDBC URL:
jdbc:mysql://host:port/database?useSSL=true&requireSSL=true
4. Special characters in username or password
If the username or password contains special characters (such as #), you need to URL-encode them:
String encodedPassword = URLEncoder.encode(password, "UTF-8");
Notice
When using MySQL Connector/J 8.x, ensure that the username and password do not contain the number sign (#). Otherwise, you may encounter a connection error.
Project code
Click java-oceanbase-hibernate to download the project code, which is a compressed package named java-oceanbase-hibernate.zip.
After decompressing it, you will find a folder named java-oceanbase-hibernate. The directory structure is as follows:
│--pom.xml
│
├─.idea
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─oceanbase
│ │ │ ├─dao
│ │ │ │ └─--UserDao.java
│ │ │ │
│ │ │ └─pojo
│ │ │ └─--User.java
│ │ │
│ │ └─resources
│ │ │--hibernate.cfg.xml
│ │ │
│ │ └─com
│ │ └─oceanbase
│ │ └─pojo
│ │ └─--User.hbm.xml
│ │
│ └─test
│ └─java
│ └─--TestHibernate.java
│
└─target
File description:
pom.xml: the configuration file of the Maven project, which contains the dependencies, plugins, and build information of the project..idea: the directory used by the integrated development environment (IDE) to store project-related configuration information.src: the directory where the source code of the project is stored.main: the directory where the main source code and resource files are stored.java: the directory where the Java source code is stored.com: the root directory where the Java packages are stored.oceanbase: the root directory where the project is stored.dao: the directory where the data access object (DAO) packages are stored. These packages are used to access the database or other data storage services.UserDao.java: the user data access object, which is used to perform operations such as adding, deleting, modifying, and querying user data.User.java: the user persistence object, which is used to map the fields of the user data table.pojo: the plain old Java object (POJO) that corresponds to the database table. It is used to map the database table or other data storage structures.resources: the directory where the resource files, such as configuration files and SQL files, are stored.hibernate.cfg.xml: the configuration file of Hibernate, which is used to configure the basic parameters and set the data source.User.hbm.xml: the mapping file of the user persistence object, which is used to define the mapping relationship between the user persistence object and the user data table.test: the directory where the test code and resource files are stored.TestHibernate.java: the Java class that stores the test code for Hibernate.target: the directory where the compiled Class files and Jar packages are stored.
Introduction to pom.xml
Note
If you just want to verify the sample, you can use the default code without modification. You can also modify the pom.xml file as needed based on the following description.
The content of the pom.xml configuration file is as follows:
Declaration statement.
Declare this file to be an XML file that uses XML standard
1.0and character encodingUTF-8.Sample code:
<?xml version="1.0" encoding="UTF-8"?>Configure the namespaces and the POM model version.
- Use
xmlnsto set the POM namespace tohttp://maven.apache.org/POM/4.0.0. - Use
xmlns:xsito set the XML namespace tohttp://www.w3.org/2001/XMLSchema-instance. - Use
xsi:schemaLocationto set the POM namespace tohttp://maven.apache.org/POM/4.0.0, and the URI of the corresponding XSD file tohttp://maven.apache.org/xsd/maven-4.0.0.xsd. - Use
<modelVersion>to set the POM model version used by the POM file to4.0.0.
Sample code:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> </project>- Use
Configure basic information.
- Use
<groupId>to specify the project identifier ascom.oceanbase. - Use
<artifactId>to specify the project dependency asjava-oceanbase-hibernate. - Use
<version>to specify the project version as1.0-SNAPSHOT.
Sample code:
<groupId>com.oceanbase</groupId> <artifactId>java-oceanbase-hibernate</artifactId> <version>1.0-SNAPSHOT</version>- Use
Use
<build>to define the build process of the project.- Use
<plugins>to specify the plugins configured for the project. - Use
<plugin>to specify that the project is configured with one plugin. - Use
<groupId>to specify the project identifier asorg.apache.maven.plugins. - Use
<artifactId>to specify the project dependency asmaven-compiler-plugin. - Use
<configuration>to specify the parameters of the configured plugin. - Use
<source>to specify the source code version of the compiler as 8. - Use
<target>to specify the target code version of the compiler as 8.
Sample code:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build>- Use
Use
<dependencies>to define the components on which the project depends.Specify the group identifier of the dependency as
com.oceanbase, the artifact name asoceanbase-client, and the version as2.4.2.Sample code:
<dependencies> <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.2</version> </dependency> </dependencies>Specify the test architecture of the dependency as
junit, the name asjunit, and the version as4.13.Sample code:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> </dependency> </dependencies>Specify the architecture of the dependency as
org.hibernate, the core library ashibernate-core, and the version as5.2.17.Final.Sample code:
<dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.17.Final</version> </dependency> </dependencies>Specify the architecture of the dependency as
org.hibernate, the data source library ashibernate-c3p0, and the version as5.2.17.Final.Sample code:
<dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-c3p0</artifactId> <version>5.2.17.Final</version> </dependency> </dependencies>
Introduction to User.hbm.xml
The User.hbm.xml file is a Hibernate mapping file that maps a Java object to a database table.
The code in the User.hbm.xml file mainly consists of the following parts:
File declaration statement.
This statement declares the file as an XML file using XML version
1.0and character encodingUTF-8. It also specifies the DTD version and location of the Hibernate mapping file, setting the DTD document type tohibernate-mapping, the version to 3.0, the language to EN, and the URL of the file tohttp://www.hibernate.org/dtd/hibernate-mapping-3.0.dtdSample code:
<?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">Configure the mapping file.
Define a Hibernate mapping file to map the
Userentity class to thetest_hibernate_mysqldatabase table.- Use the
packageattribute to specify the Java package in the mapping file ascom.oceanbase.pojo. - Use the
classtag to map data in the data table, specifying the Java class name asUserwith thenameattribute and the database table name astest_hibernate_mysqlwith thetableattribute. - Use
idto define the primary key attribute, specifying the member variable of theUserJava class asidwith thenameattribute and the database field name asUSER_IDwith thecolumnattribute. - Use
generatorto define the primary key generation strategy, specifying the type of the primary key generator assequencewith theclassattribute, the sequence name in the database asSQ_USERwith theparamelement, theUSER_NAMEcolumn in the database table with thenameattribute, and the data type of the attribute as a string.
Sample code:
<hibernate-mapping package="com.oceanbase.pojo"> <class name="User" table="test_hibernate_mysql"> <!-- Configure primary key generation strategy --> <id name="id" column="USER_ID"> <generator class="sequence"> <param name="sequence">SQ_USER</param> </generator> </id> <!-- Configuration Tables and Properties --> <property name="name" column="USER_NAME" type="string"/> </class> </hibernate-mapping>- Use the
Introduction to hibernate.cfg.xml
The hibernate.cfg.xml file is a configuration file for Hibernate, used to configure the runtime environment and database connection parameters for Hibernate.
The code in the hibernate.cfg.xml file mainly includes the following parts:
Declaration statement.
This statement declares the file as an XML file using XML version
1.0and character encodingUTF-8. It also specifies the DTD version and location for the Hibernate configuration file, setting the DTD document type tohibernate-configuration, version 3.0, language EN, and the URL tohttp://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd.Sample code:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">Configure the
configurationparameter.In the
root element, the element is used to set up the Hibernate session factory, which is responsible for creating and managing session objects. The session factory includes configurations for the database driver class name, URL, username, and password, connection pool parameters, database dialect, SQL output and formatting, automatic creation of database tables, current session context, batch processing, and second-level caching. Configure database information.
This section configures the parameters for connecting Hibernate to the database, including the driver class name, URL, username, and password for the database connection.
- Use
hibernate.connection.driver_classto specify the database driver ascom.mysql.cj.jdbc.Driverfor connecting to OceanBase Database. - Use
hibernate.connection.urlto specify the database URL, which includes the database address, port number, and database name. - Use
hibernate.connection.usernameto specify the username for connecting to the database. - Use
hibernate.connection.passwordto specify the password for connecting to the database.
Sample code:
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:oceanbase://host:port/schema_name</property> <property name="hibernate.connection.username">user_name</property> <property name="hibernate.connection.password">******</property>- Use
Configure connection pool information.
This section configures the connection pool parameters used by Hibernate. It specifies the connection pool as C3P0, with parameters including the maximum and minimum number of connections, timeout, maximum idle time, number of cached Statement objects, idle connection test time, number of connections acquired at once, and connection validation method.
Note
The following parameters are for reference only and do not represent a complete list of supported parameters. For more detailed parameter information, please refer to the relevant documentation.
- Use
hibernate.connection.provider_classto specify the connection pool as C3P0, used for managing the creation and release of database connections. - Use
hibernate.c3p0.max_sizeto specify the maximum number of connections in the connection pool as 60. - Use
hibernate.c3p0.min_sizeto specify the minimum number of connections in the connection pool as 30. - Use
hibernate.c3p0.checkoutTimeoutto specify the timeout for obtaining a connection in the connection pool as 30000 milliseconds. - Use
hibernate.c3p0.timeoutto specify the maximum idle time in the connection pool as 2000 milliseconds; connections exceeding this time will be closed. - Use
hibernate.c3p0.max_statementsto specify the maximum number of cached SQL statements in the connection pool as 100. - Use
hibernate.c3p0.idle_test_periodto specify the idle connection detection period in the connection pool as 3000 milliseconds. - Use
hibernate.c3p0.acquire_incrementto specify the increment of connections when the connection pool dynamically expands as 3. - Use
hibernate.c3p0.validateto specify the connection validation method as true.
Sample code:
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property> <property name="hibernate.c3p0.max_size">60</property> <property name="hibernate.c3p0.min_size">30</property> <property name="hibernate.c3p0.checkoutTimeout">30000</property> <property name="hibernate.c3p0.timeout">20000</property> <property name="hibernate.c3p0.max_statements">100</property> <property name="hibernate.c3p0.idle_test_period">3000</property> <property name="hibernate.c3p0.acquire_increment">3</property> <property name="hibernate.c3p0.validate">true</property>- Use
Configure SQL interaction information. This section configures the information for Hibernate to interact with the database, including the database dialect, SQL printing and formatting, automatic table creation, current session context, batch processing size, cache usage, and loading of mapping files.
- Use
dialectto specify the database dialect as MySQL 5.7, ensuring compatibility with the specific database. - Use
hibernate.show_sqlto set whether to print the SQL statements generated by Hibernate on the console. - Use
hibernate.format_sqlto set whether to format the printed SQL statements. - Use
hbm2ddl.autoto set whether to automatically create tables. - Use
current_session_context_classto specify the current session context at the thread level. - Use
hibernate.jdbc.batch_sizeto set the batch processing size. - Use
hibernate.cache.use_second_level_cacheto set whether to enable second-level caching. - Specify the mapping file to be loaded as
com/oceanbase/pojo/User.hbm.xml.
Sample code:
<property name="dialect">org.hibernate.dialect.MySQL57Dialect</property> <property name="hibernate.show_sql">true</property> <property name="hibernate.format_sql">true</property> <property name="hbm2ddl.auto">create</property> <property name="current_session_context_class">thread</property> <property name="hibernate.jdbc.batch_size">10</property> <property name="hibernate.cache.use_second_level_cache">false</property> <mapping resource="com/oceanbase/pojo/User.hbm.xml"/>- Use
Introduction to UserDao.java
The UserDao.java file uses a Session object to implement the operations of adding, deleting, modifying, and querying user data through the user data access object (DAO) class.
The UserDao.java file contains the following parts:
Import other classes and interfaces.
Declare that the current file contains the following interfaces and classes:
Userclass: used to operate on user objects.Sessionclass: used to interact with the database.SessionFactoryclass: used to create Session instances.Transactionclass: used to manage database transactions.Configurationclass: used to load the Hibernate configuration file.Queryclass: used to execute query operations.Listinterface: used to operate on query result sets.
Sample code:
import com.oceanbase.pojo.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.query.Query; import java.util.List;Define the
UserDaoclass.
The UserDao class is a data access object used to perform persistence operations on user objects. This class encapsulates a series of methods related to database interactions, enabling operations such as adding, deleting, modifying, and querying user objects. By calling the methods in the UserDao class, you can easily interact with the database to perform persistence operations.
Initialize the
UserDaoclass instance.Use an object initialization block to initialize the
Sessionobject during the class instantiation process.First, create a
Configurationobject and call theconfiguremethod to read the Hibernate configuration file (hibernate.cfg.xml). Then, call thebuildSessionFactorymethod to create aSessionFactoryobject. Finally, call theopenSessionmethod to create aSessionobject and assign it to thesessionvariable.Sample code:
private Session session; { Configuration cfg = new Configuration().configure(); // Create SessionFactory SessionFactory sessionFactory = cfg.buildSessionFactory(); session = sessionFactory.openSession(); } //Read the hibernate.cfg.xml fileSet the user information corresponding to the specified ID.
The
selectUserByIdmethod queries the user information corresponding to the specified ID.Use the
getmethod of thesessionobject to obtain the User record corresponding to the specified ID from the database and store it in theuservariable.Sample code:
public User selectUserById(int ID) { User user = session.get(User.class, ID); return user; }Retrieve user information based on the username.
The
selectUserbyNamemethod queries the user information corresponding to the specified username. First, define a Hibernate Query Language (HQL) statement to query the user data with the specified name. The table name istest_hibernate_mysql, the table alias isu, and the query field name isname. Use thecreateQuerymethod of theSessionobject to create aQueryobject and pass the HQL statement and entity class as parameters. Use thesetParametermethod of theQueryobject to set the query parameters, where0indicates the parameter position andnameindicates the parameter value. Use thelistmethod of theQueryobject to execute the query and convert the query results to a list ofUserobjects.Sample code:
public List<User> selectUserbyName(String name) { String sql = "FROM test_hibernate_mysql u WHERE u.name =?"; Query<User> query = session.createQuery(sql, User.class); query.setParameter(0, name); List<User> users = query.list(); return users; }Query all user data.
The
selectUsermethod implements a method to query all user data. Define an SQL statement to query all user data. Use thecreateNativeQuerymethod of theSessionobject to create aQueryobject and pass the SQL statement as a parameter. Then, use theaddEntitymethod to add theUserentity class to the query, so that the query results can be converted to a list ofUserobjects. Use thegetResultListmethod of theQueryobject to execute the query and convert the query results to a list of User objects.Sample code:
public List<User> selectUser() { String sql = "SELECT * FROM test_hibernate_mysql"; Query<User> query = session.createNativeQuery(sql).addEntity(User.class); List<User> users = query.getResultList(); return users; }Insert user data.
The
insertUsermethod inserts user information. Specify aUsertype parameteruserto pass in the user object to be inserted. Call thebeginTransactionmethod of the Hibernate Session to create a transaction object and save it in thebeginTransactionvariable. Use thesavemethod to save the user object to the database. Call thegetTransactionmethod of theSessionobject to obtain the current transaction and call thecommitmethod to commit the transaction, persisting the previous operations to the database and returning the result of the insert operation.Sample code:
public int insertUser(User user) { // open transaction Transaction beginTransaction = session.beginTransaction(); session.save(user); session.getTransaction().commit(); return 1; }Delete user data.
The
deleteUserByIdmethod deletes the user record corresponding to the specified ID from the database. Specify an integer parameteridto pass in the ID of the user to be deleted. Call thebeginTransactionmethod of the Hibernate Session to start a new transaction. Use thegetmethod to obtain the corresponding user object based on the specified userIDand entity class type (User.class). Use thedeletemethod to delete the user object. Call thegetTransactionmethod of theSessionobject to obtain the current transaction and call thecommitmethod to commit the transaction, persisting the user information to the database and returning the result of the delete operation.Sample code:
public int deleteUserById(int id) { // open transaction session.beginTransaction(); User user = session.get(User.class, id); session.delete(user); session.getTransaction().commit(); return 1; }Modify user data.
The
updateUserByIdmethod updates the corresponding user information. Specify aUsertype parameteruserto specify the user data to be updated. Call thebeginTransactionmethod of the Session object to start a transaction. Use thegetmethod of theSessionobject to obtain the correspondingUserobject based on the user ID. Use themergemethod of theSessionobject to merge the passed-inUserobject with the obtainedUserobject, updating the passed-in user data to the database. Call thegetTransactionmethod of theSessionobject to obtain the current transaction and call thecommitmethod to commit the transaction, returning the result of the modify operation.Sample code:
public int updateUserById(User user) { // open transaction session.beginTransaction(); User user1 = session.get(User.class, user.getId()); session.merge(user); session.getTransaction().commit(); return 1; }
Introduction to User.java
The User.java file performs CRUD operations on user data through the Session object by using a Data Access Object (DAO) class.
The code in the User.java file is divided into the following sections:
Import other classes.
Declare that the current file uses JPA annotations to configure the mapping between the related classes and the database table:
Columnannotation: specifies the mapping between the attributes of the entity class and the columns of the database table.Entityannotation: specifies the mapping between the database table and the entity class.GeneratedValueannotation: specifies that the value of the attribute is automatically generated.GenerationTypeannotation: specifies the primary key generation strategy.Idannotation: specifies the unique identifier attribute.Tableannotation: specifies the name of the table corresponding to the entity class.
Sample code:
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;Map the database table.
Map the database table to the entity class, and specify the table name of the entity class as
test_hibernate_mysql.Sample code:
@Entity @Table(name = "test_hibernate_mysql")Define the
Userclass.The
Userclass is used to map thetest_hibernate_mysqltable in the database.Define two attributes,
idandname. Use annotations to specify the mapping between theidandnameattributes of theUserclass and the columns of the database table. Use the@Idannotation to specify theidattribute as the primary key. Use the@GeneratedValueannotation to specify the sequence generation strategy for the primary key. Use the@Columnannotation to specify the mapping between the attributes and the columns of the database table. Theidattribute stores the user ID, and thenameattribute stores the username.Sample code:
@Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "user_id") private int id; @Column(name = "user_name") private String name;Creates a
Userobject.Define two constructors for the
Userclass to create aUserobject. Define an empty constructor for Hibernate query operations. Define a constructor with parameters to initialize theidandnameattributes.Sample code:
public User() { } public User(int id, String name) { this.id = id; this.name = name; }Gets and sets the
idandnamevalues.Define four methods in the
Userclass to obtain and set theidandnameattribute values. ThegetIdmethod is used to obtain theidvalue. ThesetIdmethod is used to set theidvalue. ThegetNamemethod is used to obtain the usernamenamevalue. ThesetNamemethod is used to set the usernamenamevalue.Sample code:
public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }Return the string representation of the
Userobject.Override the
toStringmethod in theUserclass to return the string representation of theUserobject. Define@Overrideto override the method with the same name in the parent class. Define thetoStringmethod to return the string representation of theUserobject. Concatenate strings to format the values of theidandnameattributes into a string and return it to the callerUser.Sample code:
@Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + '}'; }
Introduction to TestHibernate.java
The TestHibernate.java file demonstrates the basic database operations of Hibernate by performing insert, delete, update, and query operations on the UserDao object.
Perform the following steps to configure the TestHibernate.java file:
Import other classes and interfaces.
Declare the classes and interfaces related to the current file, including
UserDao,User,Session,SessionFactory,Configuration, etc.UserDaoclass: used to perform database operations related to users.Userclass: used to operate user objects.Sessionclass: used to perform session operations with the database.SessionFactoryclass: used to create Session objects.Configurationclass: used to configure Hibernate.SessionImplclass: used to obtain the underlying JDBC connection.Testannotation: used to mark test methods.IOExceptionclass: used to handle I/O exceptions.Connectionclass: used to obtain a JDBC connection.SQLExceptionclass: used to handle SQL exceptions.Listclass: used to store the query result set.UUIDclass: used to generate a unique identifier.
Sample code:
import com.oceanbase.dao.UserDao; import com.oceanbase.pojo.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.hibernate.internal.SessionImpl; import org.junit.Test; import java.io.IOException; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import java.util.UUID;Define the
testHibernatemethod. ThetestHibernatemethod contains the basic operations of insert, delete, update, and query. Create aUserDaoobject, loop to insert five user records. Call theinsertUsermethod to insert user data. Call thedeleteUserByIdmethod to delete user data with the ID of 1. Call theupdateUserByIdmethod to update user data with the ID of 2. Call theselectUsermethod to query all user data. Traverse the query results and print them to the console.Sample code:
public class TestHibernate { @Test public void testHibernate() throws SQLException, IOException { UserDao userDao = new UserDao(); for (int i = 1; i <= 5; i++) { userDao.insertUser(new User(i, "user_insert" + i)); } int deleteUserById = userDao.deleteUserById(1); int update = userDao.updateUserById(new User(2, "update")); List<User> users = userDao.selectUser(); users.forEach(System.out::println); } }
Complete code
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.oceanbase</groupId>
<artifactId>java-oceanbase-hibernate</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.17.Final</version>
</dependency>
<!-- Hibernate c3p0 connection pool-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.2.17.Final</version>
</dependency>
</dependencies>
</project>
<?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.oceanbase.pojo">
<class name="User" table="test_hibernate_mysql">
<!-- Configure primary key generation strategy -->
<id name="id" column="USER_ID">
<generator class="sequence">
<param name="sequence">SQ_USER</param>
</generator>
</id>
<!-- Configuration Tables and Properties -->
<property name="name" column="USER_NAME" type="string"/>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://host:port/schema_name</property>
<property name="hibernate.connection.username">user_name</property>
<property name="hibernate.connection.password">******</property>
<property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
<property name="hibernate.c3p0.max_size">60</property>
<property name="hibernate.c3p0.min_size">30</property>
<property name="hibernate.c3p0.checkoutTimeout">30000</property>
<property name="hibernate.c3p0.timeout">20000</property>
<property name="hibernate.c3p0.max_statements">100</property>
<property name="hibernate.c3p0.idle_test_period">3000</property>
<property name="hibernate.c3p0.acquire_increment">3</property>
<property name="hibernate.c3p0.validate">true</property>
<property name="dialect">org.hibernate.dialect.MySQL57Dialect</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<property name="current_session_context_class">thread</property>
<property name="hibernate.jdbc.batch_size">10</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
<mapping resource="com/oceanbase/pojo/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
package com.oceanbase.dao;
import com.oceanbase.pojo.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
import java.util.List;
public class UserDao {
private Session session;
{
Configuration cfg = new Configuration().configure();
// Create SessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
session = sessionFactory.openSession();
} //Read the hibernate.cfg.xml file
// private Session session = HibernateUtil.getSession();
public User selectUserById(int ID) {
User user = session.get(User.class, ID);
return user;
}
public List<User> selectUserbyName(String name) {
String sql = "FROM test_hibernate_mysql u WHERE u.name =?";
Query<User> query = session.createQuery(sql, User.class);
query.setParameter(0, name);
List<User> users = query.list();
return users;
}
public List<User> selectUser() {
String sql = "SELECT * FROM test_hibernate_mysql";
Query<User> query = session.createNativeQuery(sql).addEntity(User.class);
List<User> users = query.getResultList();
return users;
}
public int insertUser(User user) {
// open transaction
Transaction beginTransaction = session.beginTransaction();
session.save(user);
session.getTransaction().commit();
return 1;
}
public int deleteUserById(int id) {
// open transaction
session.beginTransaction();
User user = session.get(User.class, id);
session.delete(user);
session.getTransaction().commit();
return 1;
}
public int updateUserById(User user) {
// open transaction
session.beginTransaction();
User user1 = session.get(User.class, user.getId());
session.merge(user);
session.getTransaction().commit();
return 1;
}
}
package com.oceanbase.pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "test_hibernate_mysql")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "user_id")
private int id;
@Column(name = "user_name")
private String name;
public User() {
}
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
import com.oceanbase.dao.UserDao;
import com.oceanbase.pojo.User;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.internal.SessionImpl;
import org.junit.Test;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
import java.util.UUID;
public class TestHibernate {
@Test
public void testHibernate() throws SQLException, IOException {
UserDao userDao = new UserDao();
for (int i = 1; i <= 5; i++) {
userDao.insertUser(new User(i, "user_insert" + i));
}
int deleteUserById = userDao.deleteUserById(1);
int update = userDao.updateUserById(new User(2, "update"));
List<User> users = userDao.selectUser();
users.forEach(System.out::println);
}
}
References
For more information about OceanBase Connector/J, see OceanBase Connector/J.

Click to download the java-oceanbase-hibernate sample project