Hibernate connection to seekdb
This topic describes how to use the Hibernate framework and seekdb to build an application that performs basic operations such as creating a table, inserting data, and querying data.
Download the java-oceanbase-hibernate sample project
Prerequisites
-
You have installed seekdb.
-
You have installed JDK 1.8 and Maven.
-
You have installed IntelliJ IDEA.
infoThe tool used to run the code in this topic is IntelliJ IDEA 2021.3.2 (Community Edition). You can also use your preferred tool to run the sample code.
Procedure
The following procedure is based on the Windows environment. If you use other operating systems or compilers, the procedure may be slightly different.
- Obtain the connection string of seekdb.
- Import the
java-oceanbase-hibernateproject into IDEA. - Modify the database connection information in the
java-oceanbase-hibernateproject. - Run the
java-oceanbase-hibernateproject.
Step 1: Obtain the seekdb connection string
-
Contact the seekdb deployment personnel or administrator to obtain the corresponding database connection string.
mysql -hxx.xx.xx.xx -P2881 -uroot -p**** -A -
Fill in the following URL based on the deployed seekdb.
infoThe URL information is needed in the
hibernate.cfg.xmlfile.jdbc:oceanbase://host:port/schema_name?user=$user_name&password=$passwordParameter description:
host: the IP address for connecting to seekdb. Replace it with the actual IP address. You can also use the local IP address or 127.0.0.1.port: the port for connecting to seekdb. Replace it with the actual port. The default port is 2881, which can be customized when deploying seekdb.schema_name: the name of the schema to be accessed.user_name: the username, specified by the-uparameter. The default username isroot.password: the password for the account.
For more information about URL parameters, see Database URL.
Step 2: Import the java-oceanbase-hibernate project into IDEA
-
Open IntelliJ IDEA and select File > Open....

-
In the Open File or Project window that appears, select the corresponding project file and click OK to complete the import.
-
IntelliJ IDEA will automatically recognize various files in the project and display the project structure, file list, module list, and dependencies in the Project tool window. The Project tool window is usually located on the left side of the IntelliJ IDEA interface and is typically open by default. If it is closed, you can reopen it by selecting View > Tool Windows > Project from the menu bar or by using the shortcut key Alt + 1.
infoWhen importing a project using IntelliJ IDEA, it will automatically detect the pom.xml file in the project and 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 seekdb connection string.
For more information about additional properties of the JDBC connection string, see Database URL.
Example:
- The name of the database driver is:
com.mysql.cj.jdbc.Driver - The IP address of seekdb is
172.30.xxx.xxx. - The access port is 2881.
- The name of the schema to be accessed is
test. - The connection account is
root. - The password is
******.
Example 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</property>
<property name="hibernate.connection.password">******</property>
Step 4: Run the java-oceanbase-hibernate project
Running path
- Find the
TestHibernate.javafile in src > test > java in the project structure. - In the tool menu bar, select Run(U) > Run > TestHibernate, or click the green triangle in the upper right corner to run.
- View the project's 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 issue, 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 SSL connections with seekdb, 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");
When using MySQL Connector/J 8.x, ensure that the username and password do not contain the # character. Otherwise, you may encounter a connection error.
Project code
Click java-oceanbase-hibernate to download the project code, which is a compressed file named java-oceanbase-hibernate.zip.
After decompressing the file, 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 information about the project's dependencies, plugins, and build settings..idea: A directory used by the IDE (Integrated Development Environment) to store project-related configuration information.src: A directory typically used to store the source code of the project.main: A directory for storing the main source code and resource files.java: A directory for storing Java source code.com: The root directory for storing Java packages.oceanbase: The root directory for storing the project.dao: A directory for storing Data Access Object (DAO) packages, which are used to access databases or other data storage services.UserDao.java: A user DAO, which is used to perform operations such as adding, deleting, modifying, and querying user data.User.java: A user persistence object, which is used to map the fields of the user data table.pojo: Plain Old Java Object (POJO), which is used to store Java classes corresponding to database tables. It is used to map database tables or other data storage structures.resources: A directory for storing resource files, such as configuration files and SQL files.hibernate.cfg.xml: A configuration file for Hibernate, which is used to configure basic parameters and set up the data source.User.hbm.xml: A mapping file for the user persistence object, which defines the mapping relationship between the user persistence object and the user data table.test: A directory for storing test code and resource files.TestHibernate.java: A Java class for testing Hibernate.target: A directory for storing compiled Class files, Jar packages, and other files.
Introduction to the pom.xml file
If you just want to verify the example, you can use the default code without any modifications. You can also modify the pom.xml file based on your specific requirements, as explained below.
The content of the pom.xml configuration file is as follows:
-
File declaration statement.
This statement declares the file as an XML file using XML version
1.0and character encodingUTF-8.Code:
<?xml version="1.0" encoding="UTF-8"?> -
Configure the namespaces and 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.0and the location of the POM 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.
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
-
Basic information configuration.
- Use
<groupId>to set the project identifier tocom.oceanbase. - Use
<artifactId>to set the project dependency tojava-oceanbase-hibernate. - Use
<version>to set the project version to1.0-SNAPSHOT.
Code:
<groupId>com.oceanbase</groupId>
<artifactId>java-oceanbase-hibernate</artifactId>
<version>1.0-SNAPSHOT</version> - Use
-
Use
<build>to define the project's build process.- Use
<plugins>to specify the plugins configured in the project. - Use
<plugin>to specify a plugin configured in the project. - Use
<groupId>to set the project identifier toorg.apache.maven.plugins. - Use
<artifactId>to set the project dependency tomaven-compiler-plugin. - Use
<configuration>to specify the parameters of the configured plugin. - Use
<source>to set the compiler's source code version to 8. - Use
<target>to set the compiler's source code version to 8.
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 organization of the dependency as
com.oceanbase, the name asoceanbase-client, and the version as2.4.2.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.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.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.Code:
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.2.17.Final</version>
</dependency>
</dependencies>
-
Introduction to the User.hbm.xml file
The User.hbm.xml file is a Hibernate mapping file used to map Java objects to database tables.
The code of the User.hbm.xml file mainly includes 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.dtd.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 entity class named
Userto the database table namedtest_hibernate_mysql.- Use the
packageattribute to set the Java package in the mapping file tocom.oceanbase.pojo. - Use the
classtag to map data from the data table, setting thenameattribute to the Java class nameUserand thetableattribute to the database table nametest_hibernate_mysql. - Use
idto define the primary key attribute, setting thenameattribute to the member variableidof the Java classUserand thecolumnattribute to the database field nameUSER_ID. - Use
generatorto define the primary key generation strategy, setting theclassattribute to the type of the primary key generatorsequence, theparamelement to the sequence name in the databaseSQ_USER, thenameattribute to the columnUSER_NAMEin the database table corresponding to this attribute, and specifying the data type of this attribute as a string.
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 the hibernate.cfg.xml file
The hibernate.cfg.xml file is a configuration file for Hibernate, used to configure the runtime environment and database connection parameters.
The code in the hibernate.cfg.xml file mainly includes 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 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.The
<hibernate-configuration>root element contains the<session-factory>element, which sets up the Hibernate session factory for creating and managing session objects. The session factory includes parameters such as the database driver class name, URL, username, password, connection pool settings, database dialect, SQL output and formatting, automatic table creation, current session context, batch processing, and second-level caching.-
Configure database information.
This section configures the parameters for connecting to the database, including the driver class name, URL, username, and password.
- Use
hibernate.connection.driver_classto specify the database driver class ascom.mysql.cj.jdbc.Driverfor establishing a connection with seekdb. - Use
hibernate.connection.urlto specify the database URL, including 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 parameters for the connection pool 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.
infoThe following parameters are for reference only and do not represent the 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 for managing database connection creation and release. - Use
hibernate.c3p0.max_sizeto set the maximum number of connections in the connection pool to 60. - Use
hibernate.c3p0.min_sizeto set the minimum number of connections in the connection pool to 30. - Use
hibernate.c3p0.checkoutTimeoutto set the timeout for obtaining a connection in the connection pool to 30000 milliseconds. - Use
hibernate.c3p0.timeoutto set the maximum idle time in the connection pool to 2000 milliseconds, after which the connection will be closed. - Use
hibernate.c3p0.max_statementsto set the maximum number of cached SQL statements in the connection pool to 100. - Use
hibernate.c3p0.idle_test_periodto set the idle connection detection period in the connection pool to 3000 milliseconds. - Use
hibernate.c3p0.acquire_incrementto set the connection increment when the connection pool dynamically grows to 3. - Use
hibernate.c3p0.validateto set the connection validation to 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 parameters for connecting Hibernate to the database, including the database dialect, SQL printing and formatting, automatic table creation, current session context, batch size, cache usage, and loading of mapping files.
- Use
dialectto specify the database dialect as MySQL 5.7 to ensure 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 size. - Use
hibernate.cache.use_second_level_cacheto set whether to enable second-level caching. - Specify the mapping file to load 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 implements the operations of adding, deleting, modifying, and querying user data by using the Session object in the user data access object (DAO) class.
The code in the UserDao.java file mainly includes the following parts:
-
Import other classes and interfaces.
Declare the following interfaces and classes in the current file:
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.
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 is used to perform persistence operations on user objects. This class encapsulates a series of methods for interacting with the database, 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 and perform persistence operations.
-
Initialize the
UserDaoclass instance.Use an object initialization block to initialize the
Sessionobject during the class instance creation.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.Code:
private Session session;
{
Configuration cfg = new Configuration().configure();
// Create SessionFactory
SessionFactory sessionFactory = cfg.buildSessionFactory();
session = sessionFactory.openSession();
} //Read the hibernate.cfg.xml file -
Query user information based on the ID.
The
selectUserByIdmethod queries user information based on the provided ID parameter.Use the
getmethod of thesessionobject to retrieve the User record corresponding to the providedUser.classandIDparameters from the database and store it in theuservariable.Code:
public User selectUserById(int ID) {
User user = session.get(User.class, ID);
return user;
} -
Query user information based on the username.
The
selectUserbyNamemethod queries user information based on the username. First, define a Hibernate Query Language (HQL) statement to query 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.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 the method for querying 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 the entity classUserto 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.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.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 provided ID from the database. Specify an integer parameteridto pass in the user ID 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.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 providedUserobject with the obtainedUserobject, updating the provided 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 update operation.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;
}
User.java
The User.java file implements the add, delete, modify, and query operations of user data through the Session object and the user data access object (DAO) class.
The User.java file contains the following code:
-
Import other classes.
Declare the classes that are related to the current file and are configured by using the Java Persistence API (JPA) annotations to map the classes to database tables:
Columnannotation: specifies the mapping between the attributes of an entity class and the columns of a database table.Entityannotation: maps a database table.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.
Create an entity class to map the database table, and specify the table name 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 as the primary key generation strategy. 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; -
Create 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;
} -
Obtain and set the
idandnamevalues.Define four methods for 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 of 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 the string to the callerUser.Sample code:
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
-
TestHibernate.java
The TestHibernate.java file executes the insert, delete, update, and query operations on the UserDao object to demonstrate the basic database operations of Hibernate.
The TestHibernate.java file contains the following code:
-
Import other classes and interfaces.
Declare the classes and interfaces related to the current file, including
UserDao,User,Session,SessionFactory,Configuration, and others.UserDaoclass: executes database operations related to users.Userclass: operates on user objects.Sessionclass: executes session operations on the database.SessionFactoryclass: creates a Session object.Configurationclass: configures Hibernate.SessionImplclass: obtains the underlying JDBC connection.Testannotation: marks a test method.IOExceptionclass: handles I/O exceptions.Connectionclass: obtains the JDBC connection.SQLExceptionclass: handles SQL exceptions.Listclass: stores query result sets.UUIDclass: generates 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, including insert, delete, update, and query. Create aUserDaoobject and insert five user records in a loop. Call theinsertUsermethod to insert user data. Call thedeleteUserByIdmethod to delete user data whose ID is 1. Call theupdateUserByIdmethod to update user data whose ID is 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
pom.xml
<?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>
User.hbm.xml
<?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>
hibernate.cfg.xml
<?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>
UserDao.java
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;
}
}
User.java
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 + '\'' +
'}';
}
}
TestHibernate.java
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 JDBC driver.