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 Java Development Kit (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 URL below based on the OceanBase Database that is deployed.
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: the username specified after the-uparameter, in the format of username@tenant name#cluster name or username@SERVICE:service name. If you use the format username@tenant name#cluster name, the default tenant issysand the default administrator user isroot. The cluster name can be omitted when you connect directly to the database, but it is required when you connect through ODP.password: the password of the account.
For more information about URL parameters, see Database URL.
Step 2: Import the java-oceanbase-hibernate project into IntelliJ IDEA
Start IntelliJ IDEA and choose File > Open....

In the Open File or Project window, select the project files and click OK to import the files.
IntelliJ IDEA automatically recognizes the files and displays the directory structure, file list, module list, dependency relationships, and other details of the project in the Project window. The Project window is usually positioned on the left side of the IntelliJ IDEA interface and is generally open by default. If the Project window is closed, you can reopen it by choosing View > Tool Windows > Project in the menu bar or by using the shortcut Alt + 1.
Note
When you import a project using IntelliJ IDEA, it will automatically detect the pom.xml file in the project, download the required dependency libraries based on the described dependencies in the file, and add 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 port is 2881.
- The name of the database to be accessed is
test. - The tenant account is
root@mysql001. Here,mysql001is a user tenant created in OceanBase Database with the MySQL mode, 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 under src > test > java. - In the toolbar, choose Run(U) > Run > TestHibernate or simply click the green triangle in the upper right corner to start the run.
- View the project logs and output results in the console of IntelliJ IDEA.
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'}
Project code introduction
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 details of the project..idea: the directory used by the Integrated Development Environment (IDE) to store project-related configuration information.src: a directory that usually indicates the source code of the project.main: the directory that stores the main source code and resource files.java: the directory that stores the Java source code.com: the root directory that stores the Java package.oceanbase: the root directory that stores the project.dao: the directory that stores the Data Access Object (DAO) package for accessing databases or other data storage services.UserDao.java: the user DAO used for CRUD operations on user data.User.java: the persistent object that maps to the fields of the user data table.pojo: the Plain Old Java Object (POJO) that corresponds to the Java class of the database table. It is used to map database tables or other data storage structures.resources: the directory that stores resource files such as configuration files and SQL files.hibernate.cfg.xml: the Hibernate configuration file that stores basic parameters of Hibernate and data source information.User.hbm.xml: the mapping file that stores the persistent object of users and defines the mapping relationships with the user data table.test: the directory that stores the test code and resource files.TestHibernate.java: the Java class used for testing Hibernate.target: the directory that stores compiled class files and JAR packages.
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 the 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 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 one plugin configured for the project. - 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 ID as
com.oceanbase, artifact ID asoceanbase-client, and version as2.4.2for the dependency.Sample code:
<dependencies> <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.2</version> </dependency> </dependencies>Specify the group ID as
junit, artifact ID asjunit, and version as4.13for the dependency.Sample code:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> </dependency> </dependencies>Specify the group ID as
org.hibernate, artifact ID ashibernate-core, and version as5.2.17.Finalfor the dependency.Sample code:
<dependencies> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.2.17.Final</version> </dependency> </dependencies>Specify the group ID as
org.hibernate, artifact ID ashibernate-c3p0, and version as5.2.17.Finalfor the dependency.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 sections:
Declaration statements.
The declaration statements indicate that the file is an XML file that uses XML standard
1.0and character encodingUTF-8. They also specify the DTD version and location of the Hibernate mapping file. The DTD type ishibernate-mapping, version 3.0, language EN, and URLhttp://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd.Sample 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">Configuration of the mapping file.
The file defines a Hibernate mapping file that maps the
Userentity class to thetest_hibernate_mysqltable in the database.- The
packageattribute specifies the Java package in the mapping file ascom.oceanbase.pojo. - The
classtag maps data in the data table. Thenameattribute specifies the Java class name asUser, and thetableattribute specifies the database table name astest_hibernate_mysql. - The
idtag defines the primary key attribute. Thenameattribute specifies the member variable of the Java classUserasid, and thecolumnattribute specifies the database field name asUSER_ID. - The
generatortag defines the primary key generation strategy. Theclassattribute specifies the type of the primary key generator assequence, theparamelement specifies the sequence name in the database asSQ_USER, thenameattribute specifies theUSER_NAMEcolumn in the database table, and the attribute specifies the data type of this attribute as 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>- The
Introduction to hibernate.cfg.xml
The hibernate.cfg.xml file is a Hibernate configuration file used to configure the runtime environment and database connection parameters of Hibernate.
The code in the hibernate.cfg.xml file mainly includes the following sections:
Declaration statement.
The statement declares that this file is an XML file that uses XML standard
1.0and character encodingUTF-8. It also specifies the DTD version and location of the Hibernate configuration file, setting the DTD document type tohibernate-configuration, version to 3.0, and language to EN, and specifying the URL of the file ashttp://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">Configuration of
configurationparameters.The
root element contains the element, which is used to create and manage session objects. The session factory includes the driver class name, URL, username, and password for connecting to the database, connection pool parameters, database dialect, SQL output and formatting, automatic table creation, current session context, batch processing, and secondary cache. Database information configuration.
Configure the parameters for connecting Hibernate to the database, including the driver class name, URL, username, and password for connecting to the database.
- Use
hibernate.connection.driver_classto specify the database drivercom.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
Connection pool information configuration.
Configure the parameters for the connection pool used by Hibernate. Specify the connection pool as c3p0, and set parameters such as the maximum and minimum number of connections in the connection pool, the timeout period, the maximum idle time of a connection, the number of cached Statement objects, the idle test period for connections, the number of connections to be obtained at a time, and the connection validation method.
Note
The following parameters are provided for reference only. They are not a complete list of supported parameters. If you want to configure other parameters, refer to the relevant documentation for more information.
- Use
hibernate.connection.provider_classto specify c3p0 as the connection pool 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 connection timeout period in the connection pool as 30000 ms. - Use
hibernate.c3p0.timeoutto specify the maximum idle time of a connection in the connection pool as 2000 ms, after which the connection 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 ms. - Use
hibernate.c3p0.acquire_incrementto specify the number of connection increments when the connection pool dynamically grows 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
SQL interaction information configuration.
Configure the parameters for interacting Hibernate with the database. The parameters include the database dialect, SQL statement printing and formatting, automatic table creation, current session context, batch processing size, cache usage, and mapping file loading.
- Use
dialectto specify the database dialect, such as MySQL 5.7, to ensure compatibility with the specific database. - Use
hibernate.show_sqlto specify whether to print the SQL statements generated by Hibernate on the console. - Use
hibernate.format_sqlto specify whether to format the printed SQL statements. - Use
hbm2ddl.autoto specify automatic table creation. - Use
current_session_context_classto specify the thread-level current session context. - Use
hibernate.jdbc.batch_sizeto specify the batch processing size. - Use
hibernate.cache.use_second_level_cacheto specify whether to enable the secondary cache. - Load the mapping file
com/oceanbase/pojo/User.hbm.xml.
Sample code:
- Use
Introduction to UserDao.java
The UserDao.java file uses a Session object to implement the add, delete, modify, and query operations on user data through the user data access object (DAO) class.
The code in the UserDao.java file is divided into the following sections:
Reference other classes and interfaces.
Declare that the current file contains the following interfaces and classes:
Userclass: used for operating user objects.Sessionclass: used for interacting with the database.SessionFactoryclass: used for creating Session instances.Transactionclass: used for managing database transactions.Configurationclass: used for loading the Hibernate configuration file.Queryclass: used for executing query operations.Listinterface: used for operating the query result set.
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 that uses the Java class to perform persistent operations on user objects. The class encapsulates a series of methods for interacting with the database and performing add, delete, modify, and query operations on user objects. You can conveniently interact with the database and perform persistent operations by calling methods in the UserDao class.
Initialize the
UserDaoclass.Use an object initialization block to initialize the
Sessionobject during the instantiation of the class.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 fileRetrieve user information corresponding to an ID.
Call the
selectUserByIdmethod to query user information corresponding to the provided ID.Use the
sessionobject'sgetmethod to retrieve 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.
Call the
selectUserbyNamemethod to query user information based on the username. First, define an Hibernate Query Language (HQL) statement for querying user data with the specified name. The table name istest_hibernate_mysql, the table alias isu, and the query field name isname. Create aQueryobject by calling thecreateQuerymethod of theSessionobject and passing in the HQL statement and the 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 result to aUserobject list.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.
Call the
selectUsermethod to query all user data. Define an SQL statement for querying all user data. Create aQueryobject by calling thecreateNativeQuerymethod of theSessionobject and passing in the SQL statement as a parameter. Then, use theaddEntitymethod to add the entity classUserto the query so that the query result can be converted to aUserobject list. Call thegetResultListmethod of theQueryobject to execute the query and convert the query result to aUserobject list.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.
Call the
insertUsermethod to insert user information. Specify aUser-typed parameteruserfor passing 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 theSessionto obtain the current transaction and call thecommitmethod to commit the transaction, persist the previous operations to the database, and return the result of the insertion 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.
Call the
deleteUserByIdmethod to delete the user record corresponding to the specified ID from the database. Specify an integer parameteridfor passing the ID of the user to be deleted. Call thebeginTransactionmethod of the Hibernate Session to start a new transaction. Use thegetmethod to obtain theUserobject corresponding to the specified user ID and the entity class type User.class. Use thedeletemethod to delete the user object. Call thegetTransactionmethod of theSessionto obtain the current transaction and call thecommitmethod to commit the transaction, delete the user information from the database, and return the result of the deletion 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.
Call the
updateUserByIdmethod to update the corresponding user information. Specify aUser-typed parameteruserfor specifying the user data to be updated. Call thebeginTransactionmethod of theSessionobject to start a transaction. Use thegetmethod of theSessionobject to obtain theUserobject corresponding to the user ID. Use themergemethod of theSessionobject to merge the passedUserobject with the obtainedUserobject and update the passed user data to the database. Call thegetTransactionmethod of theSessionobject to obtain the current transaction, and call thecommitmethod to commit the transaction, persist the modification operation to the database, and return the result of the modification 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 by using the Session object through a Data Access Object (DAO) class.
The code in the User.java file is divided into the following sections:
References other classes.
The current file uses JPA annotations to configure the mappings between classes and database tables.
- The
Columnannotation is used to identify the correspondence between attributes in the entity class and columns in the database table. - The
Entityannotation is used to map the tables in the database. - The
GeneratedValueannotation is used to indicate that the value of the attribute is automatically generated. - The
GenerationTypeannotation is used to specify the primary key generation strategy. - The
Idannotation is used to specify the unique identifier attribute. - The
Tableannotation is used to indicate 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;- The
Maps a database table.
The entity class maps to a database table, and the value of the
nameattribute of the entity class istest_hibernate_mysql.Sample code:
@Entity @Table(name = "test_hibernate_mysql")Defines the
Userclass.The class is mapped to a database table named
test_hibernate_mysql.Defines two attributes,
idandname. The@Columnannotation identifies the correspondence between theidandnameattributes in theUserclass and the columns in the database table. The@Idannotation indicates that theidattribute is the primary key, and the@GeneratedValueannotation specifies that the primary key is automatically generated by using a sequence. The@Columnannotation specifies the correspondence between the attributes and the columns in 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.Defines two constructors of the
Userclass to create aUserobject. Defines a constructor without parameters to support Hibernate query operations. Defines 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 values of
idandname.Defines four methods in the
Userclass to get and set the values of theidandnameattributes. ThegetIdmethod is used to get theidvalue, and thesetIdmethod is used to set theidvalue. ThegetNamemethod is used to get the value of the usernamename, and thesetNamemethod is used to set the usernamename.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; }Returns the string representation of a
Userobject.Rewrites the
toStringmethod in theUserclass to return the string representation of aUserobject. Defines the@Overrideannotation to override the same-named method in the parent class. Defines thetoStringmethod to return the string representation of aUserobject. Concatenates the values of theidandnameattributes to generate a string, which is returned 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.
The code in the TestHibernate.java file consists of the following sections:
Reference 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 basic operations such as insertion, deletion, modification, and query. Create aUserDaoobject. Insert five user data entries in a loop. Call theinsertUsermethod to insert user data. Call thedeleteUserByIdmethod to delete the user data with an ID of 1. Call theupdateUserByIdmethod to modify the user data with an 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.
Download the java-oceanbase-hibernate sample project