This topic introduces how to build an application by using the MyBatis framework and OceanBase Database. It also covers the use of the application for fundamental database operations, including table creation, data insertion, and data query.
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), but you can also choose a tool that suits your personal preference to run the 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 OceanBase Database connection string.
- Import the
java-oceanbase-mybatisproject into IDEA. - Modify the database connection information in the
java-oceanbase-mybatisproject. - Run the
java-oceanbase-mybatisproject.
Step 1: Obtain the OceanBase Database connection string
Contact the deployment personnel or administrator of OceanBase Database to obtain the database connection string.
obclient -hxx.xx.xx.xx -P2883 -uroot@sys#cluster -p**** -AFill in the URL below based on the deployed OceanBase database.
Note
The URL here is required in the
jdbc.propertiesfile.jdbc:oceanbase://host:port/schema_name?user=$user_name&password=$password&useServerPrepStmts=true&rewriteBatchedStatements=trueParameters in the URL are described as follows:
host: the IP address for connecting to OceanBase Database. For connection through OceanBase Database Proxy (ODP), this parameter is the IP address of an ODP. For direct connection, this parameter is 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 access.user_name: the tenant account. For connection through ODP, the tenant account can be in theusername@tenant name#cluster nameorcluster name:tenant name:usernameformat. For direct connection, the tenant account is in theusername@tenant nameformat.password: the account password.useServerPrepStmts=true&rewriteBatchedStatements=true: the additional connection properties.rewriteBatchedStatements: specifies whether to rewritebatchedStatementin anINSERTquery for execution in a singleexecuteQuery. If you setrewriteBatchedStatementstotrue,useServerPrepStmtsis set tofalse. The default value isfalse.useServerPrepStmts: specifies whether to executePrepareStatementon the server before execution. When the application needs to repeatedly execute the same SQL statement, you can enable this parameter to reduce the number of times that the same SQL statement is compiled and parsed in the database.
For more information about URL parameters, see Database URL.
Step 2: Import the java-oceanbase-mybatis project into IDEA
Start 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 all types of files in the project. In the Project window, you can view the directory structure, list of files, list of modules, and dependencies of the project. The Project window is usually on the far left side in IntelliJ IDEA and is displayed by default. If the Project window is closed, you can choose View > Tool Windows > Project from the menu or use the Alt + 1 shortcut to open the window.
Note
When you use IntelliJ IDEA to import a project, IntelliJ IDEA automatically detects the
pom.xmlfile in the project, downloads the required libraries based on the dependencies defined in the file, and adds the libraries to the project.View the project.

Step 3: Modify the database connection information in the java-oceanbase-mybatis project
Modify the database connection information in the jdbc.properties file based on the information obtained in Step 1: Obtain the OceanBase Database connection string.
Here is an example:
- The name of the database driver is
com.oceanbase.jdbc.Driver. - The IP address of the OBServer node is
10.10.10.1. - The port is 2881.
- The name of the schema to access is
sys. - The additional connection properties of the URL are
useServerPrepStmts=true&rewriteBatchedStatements=true. - The tenant account is
sys@xyoracle, wherexyoracleis a user tenant created in Oracle mode of OceanBase Database.sysis a username in thexyoracletenant. - The password is
******.
The sample code is as follows:
jdbc.driver=com.oceanbase.jdbc.Driver
jdbc.url=jdbc:oceanbase://10.10.10.1:2881/sys?useServerPrepStmts=true&rewriteBatchedStatements=true
jdbc.username=sys@xyoracle
jdbc.password=******
Step 4: Run the java-oceanbase-mybatis project
Run path
- Find the
TestMybatis.javafile under src > test > java in the project package. - Choose Run > Run… > TestMybatis in the menu bar or click the green triangle in the upper-right corner to run the project.
- View the logs and output of the project in the IDEA console.
Output
The output of the
testUserMappermethod is as follows:User{id=2, name='update'} User{id=3, name='insert'} User{id=4, name='insert'} User{id=5, name='insert'} User{id=6, name='insert'} User{id=7, name='insert'} User{id=8, name='insert'} User{id=9, name='insert'} User{id=10, name='insert'} usersByPage = [User{id=5, name='insert'}, User{id=6, name='insert'}, User{id=7, name='insert'}]The output of the
testSqlSessionmethod is as follows:User{id=2, name='update'} User{id=3, name='insert'} User{id=4, name='insert'} User{id=5, name='insert'} User{id=6, name='insert'} User{id=7, name='insert'} User{id=8, name='insert'} User{id=9, name='insert'} User{id=10, name='insert'}The output of the
testAppMappermethod is as follows:App{id=2, name='update'} App{id=3, name='insert3'} App{id=4, name='insert4'} App{id=5, name='insert5'} App{id=6, name='insert6'} App{id=7, name='insert7'} App{id=8, name='insert8'} App{id=9, name='insert9'} App{id=10, name='insert10'} pageList = Page{count=true, pageNum=2, pageSize=3, startRow=3, endRow=6, total=9, pages=3, reasonable=false, pageSizeZero=true}[App{id=5, name='insert5'}, App{id=6, name='insert6'}, App{id=7, name='insert7'}]The complete output is as follows:
User{id=2, name='update'} User{id=3, name='insert'} User{id=4, name='insert'} User{id=5, name='insert'} User{id=6, name='insert'} User{id=7, name='insert'} User{id=8, name='insert'} User{id=9, name='insert'} User{id=10, name='insert'} usersByPage = [User{id=5, name='insert'}, User{id=6, name='insert'}, User{id=7, name='insert'}] App{id=2, name='update'} App{id=3, name='insert3'} App{id=4, name='insert4'} App{id=5, name='insert5'} App{id=6, name='insert6'} App{id=7, name='insert7'} App{id=8, name='insert8'} App{id=9, name='insert9'} App{id=10, name='insert10'} pageList = Page{count=true, pageNum=2, pageSize=3, startRow=3, endRow=6, total=9, pages=3, reasonable=false, pageSizeZero=true}[App{id=5, name='insert5'}, App{id=6, name='insert6'}, App{id=7, name='insert7'}] User{id=2, name='update'} User{id=3, name='insert'} User{id=4, name='insert'} User{id=5, name='insert'} User{id=6, name='insert'} User{id=7, name='insert'} User{id=8, name='insert'} User{id=9, name='insert'} User{id=10, name='insert'}
Project code introduction
Click java-oceanbase-mybatis to download the project code, which is a compressed file named java-oceanbase-mybatis.zip.
After decompressing it, you will find a folder named java-oceanbase-mybatis. The directory structure is as follows:
│--pom.xml
│
├─.idea
│
├─src
│ ├─main
│ │ ├─java
│ │ │ └─com
│ │ │ └─oceanbase
│ │ │ ├─mapper
│ │ │ │------IAppMapper.java
│ │ │ │------IUserMapper.java
│ │ │ │
│ │ │ └─pojo
│ │ │ │---App.java
│ │ │ └─--User.java
│ │ │
│ │ └─resources
│ │ │--jdbc.properties
│ │ │--mybatis-config.xml
│ │ │
│ │ └─com
│ │ └─oceanbase
│ │ └─mapper
│ │ └─---IUserMapper.xml
│ │
│ └─test
│ └─java
│ └─---TestMybatis.java
│
└─target
Here is a breakdown of the files and directories:
pom.xml: the configuration file of the Maven project, which contains the dependencies, plug-ins, and build information of the project..idea: the directory used in the Integrated Development Environment (IDE) for storing project-related configurations.src: the directory for storing source code of the project.main: the directory for storing main source code and resource files.java: the directory for storing Java source code.com: the root directory for storing the Java package.oceanbase: the root directory for storing the project.mapper: stores the mapper interfaces and XML files of MyBatis.IAppMapper.java: stores the application data access layer interface.IUserMapper.java: stores the user data access layer interface.pojo: stores JavaBeans or entity classes.App.java: stores the application entity class.User.java: stores the user entity class.resources: the directory for storing resource files, such as configuration files and SQL files.jdbc.properties: the configuration file that stores database connection information.mybatis-config.xml: the configuration file of MyBatis.IUserMapper.xml: the XML configuration file for the user data access layer.test: the directory for storing the test code and resource files.TestMybatis.java: stores the Java class for MyBatis tests.target: the directory for storing compiled class files and JAR packages.
Code in pom.xml
Note
If you just want to verify the sample project, use the default code without modification. You can also modify the pom.xml file as required based on the following instructions.
To configure the pom.xml file, perform the following steps:
Declare the file.
Declare the file to be an XML file that uses XML standard
1.0and character encodingUTF-8.The sample code is as follows:
<?xml version="1.0" encoding="UTF-8"?>Configure the namespaces and the POM model version.
- Use
xmlnsto specifyhttp://maven.apache.org/POM/4.0.0as the default XML namespace for the POM. - Use
xmlns:xsito specifyhttp://www.w3.org/2001/XMLSchema-instanceas the XML namespace for xsi-prefixed elements. - Use
xsi:schemaLocationto provide a mapping from the default XML namespace for the POM (http://maven.apache.org/POM/4.0.0) to the location of the POM’s XML schema definition (XSD) file (http://maven.apache.org/xsd/maven-4.0.0.xsd). - Use
<modelVersion>to specify4.0.0as the model version used by the POM.
The sample code is as follows:
<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 project information.
- Use
<groupId>to specifycom.oceanbase.exampleas the ID of the project group. - Use
<artifactId>to specifyjava-oceanbase-mybatisas the ID of the project. - Use
<version>to specify1.0-SNAPSHOTas the project version.
The sample code is as follows:
<groupId>com.oceanbase.example</groupId> <artifactId>java-oceanbase-mybatis</artifactId> <version>1.0-SNAPSHOT</version>- Use
Use
<build>to define the build process for the project.- Use
<plugins>to list plug-ins in the project. - Use
<plugin>to specify a plug-in for the project. - Use
<groupId>to specifyorg.apache.maven.pluginsas the ID of the plug-in group. - Use
<artifactId>to specifymaven-compiler-pluginas the ID of the plug-in. - Use
<configuration>to configure parameters of the plug-in. - Use
<source>to specify8as the source code version for the compiler. - Use
<target>to specify8as the version of the code generated by the compiler.
The sample code is as follows:
<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
Configure project dependencies in
<dependencies>.Specify
com.oceanbaseas the ID of the dependency group,oceanbase-clientas the ID of the dependency, and2.4.2as the version of the dependency.The sample code is as follows:
<dependencies> <dependency> <groupId>com.oceanbase</groupId> <artifactId>oceanbase-client</artifactId> <version>2.4.2</version> </dependency> </dependencies>Specify
junitas the ID of the dependency group,junitas the ID of the dependency, and4.10as the version of the dependency.The sample code is as follows:
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> </dependencies>Specify
org.mybatisas the ID of the dependency group,mybatisas the ID of the dependency, and3.5.9as the version of the dependency.The sample code is as follows:
<dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> </dependencies>Specify
com.github.pagehelperas the ID of the dependency group,pagehelperas the ID of the dependency, and5.3.0as the version of the dependency.The sample code is as follows:
<dependencies> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>3.5.0</version> </dependency> </dependencies>
Code in jdbc.properties
jdbc.properties is a property file that stores database connection configurations, including the URL, username, and password of a database. Code in the file contains the following content:
Note
The property values are obtained in Step 1: Obtain the OceanBase Database connection string.
jdbc.driver: the class name of the database driver, which is used for loading the database driver.jdbc.url: the URL of the database to connect to.jdbc.username: the username used to verify database connection.jdbc.password: the password used to verify database connection.
The sample code is as follows:
jdbc.driver=com.oceanbase.jdbc.Driver
jdbc.url=jdbc:oceanbase://host:port/TEST?useServerPrepStmts=true&rewriteBatchedStatements=true
jdbc.username=user_name
jdbc.password=******
Code in mybatis-config.xml
The mybatis-config.xml file configures global settings and plug-ins of the MyBatis framework.
To configure the mybatis-config.xml file, perform the following steps:
Declare the file.
Declare that the current file is an XML file with MyBatis configurations, the XML version is
1.0, and the character encoding method isUTF-8. Declare to use a Document Type Definition (DTD) file provided at the official website of MyBatis for validation. The version of the DTD file is3.0, and the language of the DTD isEN.The declaration contains the following parts:
version: the version of the XML file.encoding: the encoding method of the XML file.DOCTYPE: the document type declaration.configuration: specifies that the XML file is a MyBatis configuration file.PUBLIC: specifies that the DTD file is a public one.mybatis.org: the official MyBatis website.DTD Config 3.0: the version of the DTD file.EN: specifies that the language of the DTD is English.
The sample code is as follows:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">Specify the path and file name of the property file to load.
<properties resource="jdbc.properties"></properties>Configure global settings for MyBatis.
Global settings for MyBatis contain the following parts:
setting: a single setting item, such as the cache or log.cacheEnabled: enables or disables caching, which is set totrue.lazyLoadingEnabled: enables or disables lazy loading, which is set totrue.aggressiveLazyLoading: enables or disables aggressive lazy loading, which is set totrue.multipleResultSetsEnabled: enables or disables the support for multiple result sets, which is set totrue.useColumnLabel: specifies whether to use column labels as column names in the result set, which is set totrue.useGeneratedKeys: specifies whether to use automatically generated primary keys, which is set totrue.autoMappingBehavior: the automatic mapping behavior, which is set toPARTIAL.defaultExecutorType: the default executor type, which is set toSIMPLE.mapUnderscoreToCamelCase: specifies whether to convert database column names containing underscores to camel case Java object attribute names, which is set totrue.localCacheScope: the local cache scope, which is set toSESSION.jdbcTypeForNull: the JDBC type for null values, which is set toNULL.
Note
Child elements of the
settingselement are optional. You can add or delete child elements as needed.The sample code is as follows:
<settings> <!-- Enable or disable caching for global mappers. --> <setting name="cacheEnabled" value="true"/> <!-- Enable or disable lazy loading globally. When disabled, all associated objects are loaded immediately. --> <setting name="lazyLoadingEnabled" value="true"/> <!-- When enabled, objects with delayed loading properties will fully load any properties when called. Otherwise, each attribute will be loaded as needed. --> <setting name="aggressiveLazyLoading" value="true"/> <!-- Allow a single SQL statement to return multiple datasets (depending on driver compatibility) default: true --> <setting name="multipleResultSetsEnabled" value="true"/> <!-- Can column aliases be used (depending on driver compatibility) default: true --> <setting name="useColumnLabel" value="true"/> <!-- Allow JDBC to generate primary keys. Drive support is required. If set to true, this setting will force the use of the generated primary key, and some drives may not be compatible but can still be executed. default:false --> <setting name="useGeneratedKeys" value="true"/> <!-- Specify how MyBatis automatically maps the columns of the data base table NONE: Not Implicit PART: Partial FULL: All --> <setting name="autoMappingBehavior" value="PARTIAL"/> <!-- This is the default execution type (SIMPLE: simple; REUSE: executor may repeatedly use prepared statements; BATCH: executor can repeatedly execute statements and batch updates) --> <setting name="defaultExecutorType" value="SIMPLE"/> <!-- Convert fields using camel naming. --> <setting name="mapUnderscoreToCamelCase" value="true"/> <!-- Set the local cache range session: there will be data sharing statement: statement range (so there will be no data sharing) defalut: session --> <setting name="localCacheScope" value="SESSION"/> <!-- When the JDBC type is set to null, some drivers need to specify a value, default: Other, and there is no need to specify a type when inserting null values --> <setting name="jdbcTypeForNull" value="NULL"/> </settings>Configure MyBatis plug-ins.
MyBatis plug-in configurations include the following parts:
plugin: configures a single plug-in.property: a plug-in property.interceptor: the implementation class of a plug-in.helperDialect: the database to connect to.offsetAsPageNum: specifies whether to use theoffsetparameter as thepageNumparameter.rowBoundsWithCount: specifies whether to perform a count query.pageSizeZero: specifies whether to support queries with apageSizeof 0.reasonable: specifies whether to enable reasonable queries.params: the mapping between parameter names and parameter values, which is configured to pass pagination parameters.supportMethodsArguments: specifies whether to support passing pagination parameters through method parameters.returnPageInfo: the type of the return value.
The sample code is as follows:
<plugin interceptor="com.github.pagehelper.PageInterceptor"> <!-- this parameter indicates which database to connect to --> <!--MySQLMode dialect<property name="helperDialect" value="mysql"/>--> <!--OracleMode dialect --> <property name="helperDialect" value="oracle"/> <!-- This parameter defaults to false. When set to true, the first parameter offset of RowBounds will be used as the pageNum page number, similar to the pageNum effect in startPage --> <property name="offsetAsPageNum" value="true"/> <!-- This parameter defaults to false, and when set to true, using RowBounds pagination will result in a count query --> <property name="rowBoundsWithCount" value="true"/> <!-- When set to true, if pageSize=0 or RowBounds. limit=0, all results will be queried (equivalent to not executing a pagination query, but the returned results are still of type Page) --> <property name="pageSizeZero" value="true"/> <!-- Version 3.3.0 is available - pagination parameter rationalization is disabled by default as false. When rationalization is enabled, if pageNum<1, the first page will be queried, and if pageNum>pages, the last page will be queried. Rationalization of paging parameters. When rationalization is disabled, if pageNum<1 or pageNum>pages returns empty data --> <property name="reasonable" value="false"/> <!-- Version 3.5.0 is available - In order to support the startPage (Object params) method, a 'params' parameter has been added to configure parameter mapping, which can be used to retrieve values from Map or ServletRequest. PageNum, pageSize, count, pageSizeZero, reasonable, orderBy can be configured. If mapping is not configured, the default value will be used. If you do not understand the meaning, do not copy this configuration casually --> <property name="params" value="pageNum=start;pageSize=limit;"/> <!-- Support passing paging parameters through Mapper interface parameters --> <property name="supportMethodsArguments" value="true"/> <!-- Always always returns PageInfo type, check to check if the return type is PageInfo, and none returns Page --> <property name="returnPageInfo" value="check"/> </plugin>Configure MyBatis environments.
MyBatis environment configurations include the following parts:
environment: configures a single environment.transactionManager: the implementation class of the transaction manager.dataSource: the implementation class of the data source.property: the class name of the database driver.
Note
In other MyBatis configuration elements, you can use the
${}placeholder to reference data sources, transaction managers, and executors configured in environments.The sample code is as follows:
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments>Configure MyBatis mappers.
MyBatis mapper configurations include the following parts:
resource: the path and name of the XML configuration file of the mapper.class: the Java class name of the mapper.
Note
To use an XML configuration file, you must specify the path and name of the XML file in the mapper element. To use a Java interface, you must specify the fully qualified name of the Java class in the mapper element.
The sample code is as follows:
<mappers> <!-- IUserMapper.xml mapping file --> <mapper resource="com/alipay/oceanbase/mapper/IUserMapper.xml"></mapper> <!-- IAppMapper mapping class --> <mapper class="com.oceanbase.mapper.IAppMapper"></mapper> </mappers>
Code in IUserMapper.xml
The IUserMapper.xml file is a mapping file that defines SQL statements related to user objects. The file defines a namespace named IUserMapper, which stores SQL statements related to user objects.
Note
If you just want to verify the sample project, use the default code without modification. You can modify the code as required if necessary.
To configure the IUserMapper.xml file, perform the following steps:
Declare the file.
In the XML declaration part, declare the version and encoding method of the XML file. In the DTD declaration part, reference the DTD file of MyBatis.
The sample code is as follows:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">Configure the mapping to the
IUserMapper.javafile.- Define the namespace of the
Mapperinterface, which corresponds to theMapperinterface in Java code. - Create an SQL statement named
insertUserto insert a record whereidis#{id}andnameis#{name}into thetest_usertable. TheparameterTypeattribute specifies that the type of parameters passed into the statement iscom.oceanbase.pojo.User. - Create an SQL statement named
deleteUserto delete a record whereidis#{id}from thetest_usertable. - Create an SQL statement named
updateUserto update the value of thenamefield to#{name}for the record whereidis#{id}in thetest_usertable. - Create an SQL statement named
selectUsersto query all user records in thetest_usertable. - Create an SQL statement named
selectUserByPageto query thetest_usertable for user objects on a specified number of pages. Use subqueries and therownumfield for pagination queries, where#{pageNum}and#{pageSize}specify the current page number and the number of records per page, respectively.
The sample code is as follows:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.oceanbase.mapper.IUserMapper"> <insert id="insertUser" parameterType="com.oceanbase.pojo.User"> INSERT INTO test_user (id,name) VALUES (#{id},#{name}) </insert> <delete id="deleteUser" parameterType="long"> DELETE FROM test_user WHERE id = #{id} </delete> <update id="updateUser" parameterType="com.oceanbase.pojo.User"> UPDATE test_user SET name = #{name} WHERE id = #{id} </update> <select id="selectUsers" resultType="com.oceanbase.pojo.User"> SELECT id,name FROM test_user </select> <!-- There are two ways to paginate queries: 1. Use the pagehelper plugin; 2. Use SQL statements to paginate --> <!-- SQL statement pagination: Oracle mode does not support the limit keyword, and instead uses the unique field 'rownum'--> <select id="selectUserByPage" resultType="com.oceanbase.pojo.User"> select id,name from ( select row_.*, rownum rownum_ from ( select * from test_user ) row_ where rownum <![CDATA[ <= ]]> #{pageNum} * #{pageSize} ) where rownum_ <![CDATA[ >]]> ( #{pageNum}- 1) * #{pageSize} </select> </mapper>- Define the namespace of the
Code in IAppMapper.java
The IAppMapper.java file defines SQL mappings.
To configure the IAppMapper.java file, perform the following steps:
Define the package and import necessary classes and interfaces.
Declare that the current file belongs to the
com.oceanbase.mapperpackage. Import the following classes and interfaces for theIAppMapper.javafile:Appclass: the class from which anAppobject is created.org.apache.ibatis.annotations.*classes: all annotation classes used in MyBatis.java.util.Listinterface: theListinterface in thejava.utilpackage.
The sample code is as follows:
package com.oceanbase.mapper; import com.oceanbase.pojo.App; import org.apache.ibatis.annotations.*; import java.util.List;Define the
IAppMapperinterface.The
IAppMapperinterface defines theMapperinterface of MyBatis. TheMapperinterface defines SQL mappings for the add, delete, modify, and query operations on the database. Specifically, theIAppMapperinterface defines the methods to add, delete, modify, and query data in thetest_apptable.@Insertmethod: inserts data into the database.@Updatemethod: updates data to the database.@Deletemethod: deletes data from the database.@Selectmethod: queries data in the database.@Resultsmethod: maps the query result to the attributes of the Java object.
The The database CRUD operations are as follows:
Insert data.
Insert a record into the
test_apptable. That is, map anAppobject to a record in the table. Attribute values in theAppobject are represented by placeholders in the format of#{attribute name}. The return value of theIntegertype indicates the automatically generated ID returned after the SQL statement inserts the record, that is, the value of theidfield in thetest_apptable.@Insert("insert into test_app(id,name) values(#{id},#{name})") Integer insertApp(App app);Delete data.
Delete the record where
idis#{id}from thetest_apptable.@Delete("delete from test_app where id =#{id}") Integer deleteApp(Long id);Update data.
Modify the record where
idis#{id}in thetest_apptable.@Update("update test_app set name= #{name} where id = #{id}") Integer updateApp(App user);Query and map data.
Query all data in the
test_apptable. Use the@Resultsand@Resultannotations to map query results to theidandnameattributes inAppobjects. Then, return a list ofAppobjects.@Update("update test_app set name= #{name} where id = #{id}") Integer updateApp(App user); @Results({ @Result(id = true, column = "id", property = "id"), @Result(column = "name", property = "name") }) List<App> selectApps();
The sample code is as follows:
package com.oceanbase.mapper; import com.oceanbase.pojo.App; import org.apache.ibatis.annotations.*; import java.util.List; public interface IAppMapper { @Insert("insert into test_app(id,name) values(#{id},#{name})") Integer insertApp(App app); @Delete("delete from test_app where id =#{id}") Integer deleteApp(Long id); @Update("update test_app set name= #{name} where id = #{id}") Integer updateApp(App user); @Select("select * from test_app") @Results({ @Result(id = true, column = "id", property = "id"), @Result(column = "name", property = "name") }) List<App> selectApps(); }
Code in IUserMapper.java
The IUserMapper.java file defines methods for database operations.
To configure the IUserMapper.java file, perform the following steps:
Reference other classes and interfaces.
Declare the interfaces and classes in the current file:
Userclass: the user object.org.apache.ibatis.annotations.Paramclass: theParamannotation in the MyBatis framework.Listinterface: the list type.
The sample code is as follows:
package com.oceanbase.mapper; import com.oceanbase.pojo.User; import org.apache.ibatis.annotations.Param; import java.util.List;Define the
IUserMapperinterface.Define an interface called
IUserMapperthat contains the methods to insert, delete, update, and query user data and the method to query user data with pagination. UseJavaDoccomments and@Paramannotations to improve code readability and maintainability.The sample code is as follows:
public interface IUserMapper { Integer insertUser(User user); Integer deleteUser(Long id); Integer updateUser(User user); List<User> selectUsers(); public List<User> selectUserByPage(@Param("user") User user, @Param("pageNum") Integer pageNum, @Param("pageSize") Integer pageSize); }
Code in App.java
The App.java file defines the App class from which App objects are created. Each object contains two attributes: id and name. The class also defines the methods to get and set attribute values, and the toString method to convert objects into strings.
To configure the App.java file, perform the following steps:
Define the
pojopackage.Declare that the current file belongs to the
com.oceanbase.pojopackage.Define the
Appclass.- Define the
Appclass that contains two private attributes:idandname, and provides the no-parameter constructorpublic App(){}. - Define the
public App(Long id, String name)constructor for creating anAppobject with the specifiedidandnameattributes. - Define the
getId,setId,getName, andsetNamemethods to get and set theidandnameattributes ofAppobjects. Return the application name set bysetName. - Override the
toStringmethod to convertAppobjects into strings for easy output and debugging.
- Define the
The sample code is as follows:
package com.oceanbase.pojo;
public class App {
private Long id;
private String name;
public App() {
}
public App(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "App{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
Code in User.java
The User.java file represents the user object. Each object contains two attributes: id and name. The class also defines the methods to get and set attribute values, and the toString method to convert objects into strings. The creation of this class is similar to that of the class in App.java.
The sample code is as follows:
package com.oceanbase.pojo;
public class User {
private Long id;
private String name;
public User() {
}
public User(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long 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 + '\'' +
'}';
}
}
Code in MyBatisTest.java
The MyBatisTest.java file demonstrates how to use MyBatis to perform data operations. With this file, you can test the basic features of the MyBatis framework, the execution of SQL statements, methods to call Mapper interfaces, and the parameters and return values of SQL statements.
Reference other classes and interfaces.
Here are the classes and interfaces to import:
IAppMapperinterface: defines SQL statements related toAppobjects.IUserMapperinterface: defines SQL statements related toUserobjects.Appclass: the class from which anAppobject is created. You can useAppobjects to test the execution of SQL statements.Userclass: the class from which aUserobject is created. You can useUserobjects to test the execution of SQL statements.PageHelperplug-in: implements pagination queries.PageInfoplug-in: encapsulates results of pagination queries.Resourcesclass: loads the MyBatis configuration file.SqlSessionclass: executes SQL statements and manages transactions.SqlSessionFactoryclass: createsSqlSessionobjects.SqlSessionFactoryBuilderclass: createsSqlSessionFactoryobjects.org.junit.Test: the annotation that marks a test method for the JUnit test framework.IOExceptionclass: errors in input and output operations.SQLExceptionclass: errors in SQL operations.Statementinterface: executes SQL statements and returns results.java.util.Listinterface: an ordered collection where duplicate elements are allowed.
The sample code is as follows:
import com.oceanbase.mapper.IAppMapper; import com.oceanbase.mapper.IUserMapper; import com.oceanbase.pojo.App; import com.oceanbase.pojo.User; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.Test; import java.io.IOException; import java.sql.SQLException; import java.sql.Statement; import java.util.List;Define the
testUserMappermethod.The
testUserMappermethod tests the execution of SQL statements defined in theMapperinterface of theUserobject.- Call the
build()method of theSqlSessionFactoryBuilderclass to create aSqlSessionFactoryinstance. The instance is used to manage the creation and destruction ofSqlSessioninstances. - Call the
openSession()method of theSqlSessionFactoryclass to create aSqlSessioninstance. The instance can be used to execute various SQL statements, including query, insert, update, and delete operations. - Call the
getConnection()method of theSqlSessioninstance to get aConnectioninstance. The instance can be used to perform various database operations. - Call the
createStatement()method of theConnectioninstance to create aStatementinstance. The instance can be used to execute SQL statements in sequence. - Call the
execute()method of theStatementobject to execute the SQL statement that drops the table namedtest_user. - Call the
execute()method of theStatementobject to execute the SQL statement that creates a table namedtest_user. The table contains two fields:idof thenumber(20)type andnameof thevarchar2(100)type. Theidfield is the primary key. - Call the
getMapper()method of theSqlSessioninstance to get an instance of theIUserMapperinterface. Define methods for various database operations. - Use a
forloop to insert 10 records into thetest_usertable. In each iteration, create a newUserobject and call theinsertUser()method of theMapperinterface to insert the object. Store the result of the insert operation in theinsertResultvariable. - Delete, update, and query the data in the
test_usertable, and then call theforEach()method to print the information of each user in the user list. - Create a
Userobject where thenameattribute isinsert. Call theselectUserByPage()method, which takes the object as an input parameter, to query the data of all users namedinsertin thetest_usertable, and return the list of users on page 2 with each page showing 3 records. Print the user data to the console. Close both theStatementandSqlSessioninstances and commit the transaction to release resources.
The sample code is as follows:
public void testUserMapper() throws SQLException, IOException { //mybatis xml usecases SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession sqlSession = sqlSessionFactory.openSession(); Statement statement = sqlSession.getConnection().createStatement(); try { statement.execute("drop table test_user"); } catch (SQLException ex) { } finally { statement.execute("create table test_user(id number(20) primary key,name varchar2(100))"); } IUserMapper mapper = sqlSession.getMapper(IUserMapper.class); //insert 10 users for (int i = 1; i <= 10; i++) { User user = new User((long) i, "insert"); Integer insertResult = mapper.insertUser(user); } //delete id==1 Integer deleteResult = mapper.deleteUser(1L); //update id==2L name=update User updateUser = new User(2L, "update"); Integer updateResult = mapper.updateUser(updateUser); //selectUsers query all List<User> userList = mapper.selectUsers(); userList.forEach(System.out::println); //selectUsersByPage: use the rownum keyword in SQL statements to manually perform pagination queries, // example: data on page 2 (3 items per page) User user = new User(); user.setName("insert"); List<User> usersByPage = mapper.selectUserByPage(user, 2, 3); System.out.println("usersByPage = " + usersByPage); statement.close(); sqlSession.commit(); sqlSession.close(); }- Call the
Define the
testSqlSessionmethod.The
testSqlSessionmethod tests the basic features ofSqlSessionobjects, including executing SQL statements, committing transactions, and closingSqlSessionobjects.- Call the
build()method of theSqlSessionFactoryBuilderclass to create aSqlSessionFactoryinstance. The instance is used to manage the creation and destruction ofSqlSessioninstances. - Call the
openSession()method of theSqlSessionFactoryclass to create aSqlSessioninstance. The instance can be used to execute various SQL statements, including query, insert, update, and delete operations. - Call the
getConnection()method of theSqlSessioninstance to get aConnectioninstance. The instance can be used to perform various database operations. - Call the
createStatement()method of theConnectioninstance to create aStatementinstance. The instance can be used to execute SQL statements in sequence. - Call the
execute()method of theStatementobject to execute the SQL statement that drops the table namedtest_user. - Call the
execute()method of theStatementobject to execute the SQL statement that creates a table namedtest_user. The table contains two fields:idof thenumber(20)type andnameof thevarchar2(100)type. Theidfield is the primary key. - Use a
forloop to insert 10 records into thetest_usertable. In each iteration, create a newUserobject and call theinsertUser()method of theMapperinterface to insert the object. Store the result of the insert operation in theinsertResultvariable. - Call the
delete()method of thesqlSessionobject to perform the delete operation. Set the delete condition by passing in the parameter1L. Store the result of the delete operation in thedeleteResultvariable. - Use the
sqlSessionobject to execute a database update operation. Create aUserobject and call theupdatemethod to pass in the ID and parameter object of the SQL statement to complete the update operation. You can find specific SQL statements and parameter mappings in the XML configuration file of thecom.oceanbase.mapper.IUserMapperinterface. Store the result of the update operation in theupdateResultvariable. - Call the
openSession()method ofSqlSessionFactoryto create aSqlSessioninstance. Perform a query operation by using the instance and store the query results in theuserListvariable. Call theforEachmethod to traverse theuserListvariable and output the results to the console. - Call
statement.close()to close theStatementobject in the database connection. CallsqlSession.commit()to commit the transaction and persist all changes to the database. CallsqlSession.close()to close theSqlSessionobject, release relevant resources, and close the connection to the database.
The sample code is as follows:
public void testSqlSession() throws SQLException, IOException { //SqlSession usecases SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession sqlSession = sqlSessionFactory.openSession(); Statement statement = sqlSession.getConnection().createStatement(); try { statement.execute("drop table test_user"); } catch (SQLException ex) { } finally { statement.execute("create table test_user(id number(20) primary key,name varchar2(100))"); } //insert for (int i = 1; i <= 10; i++) { User user = new User((long) i, "insert"); //Integer insertResult = mapper.insertUser(user); int insertResult = sqlSession.insert("com.oceanbase.mapper.IUserMapper.insertUser", user); } //delete int deleteResult = sqlSession.delete("com.oceanbase.mapper.IUserMapper.deleteUser", 1L); //update User updateUser = new User(2L, "update"); int updateResult = sqlSession.update("com.oceanbase.mapper.IUserMapper.updateUser", updateUser); //selectUsers List<User> userList = sqlSession.selectList("com.oceanbase.mapper.IUserMapper.selectUsers", null); userList.forEach(System.out::println); //System.out.println("userList = " + userList); statement.close(); sqlSession.commit(); sqlSession.close(); }- Call the
Define the
testAppMappermethod.The
testAppMappermethod tests the features ofAppMapper.- Call the
build()method of theSqlSessionFactoryBuilderclass to create aSqlSessionFactoryinstance. The instance is used to manage the creation and destruction ofSqlSessioninstances. - Call the
openSession()method of theSqlSessionFactoryclass to create aSqlSessioninstance. The instance can be used to execute various SQL statements, including query, insert, update, and delete operations. - Call the
getConnection()method of theSqlSessioninstance to get aConnectioninstance. The instance can be used to perform various database operations. - Call the
createStatement()method of theConnectioninstance to create aStatementinstance. The instance can be used to execute SQL statements in sequence. - Call the
execute()method of theStatementobject to execute the SQL statement that drops the table namedtest_app. - Call the
execute()method of theStatementobject to execute the SQL statement that creates a table namedtest_app. The table contains two fields:idof thenumber(20)type andnameof thevarchar2(100)type. Theidfield is the primary key. - Call the
getMapper()method of theSqlSessioninstance to get anIAppMapperinstance. Define methods for various database operations. - Use a
forloop to insert 10 records into thetest_apptable. In each iteration, create a newAppobject and call theinsertApp()method of theMapperinterface to insert the object. Store the result of the insert operation in theinsertResultvariable. - Call the
deleteApp()method ofmapperto perform the delete operation. Set the delete condition by passing in the parameter1L. Store the result of the delete operation in thedeleteResultvariable. - Use the
mapperobject to perform a database update operation. Create anAppobject and call theupdatemethod to pass in the ID and parameter object of the SQL statement to complete the update operation. - Create an
Appobject namedupdateAppwhereidis2Landnameisupdate. - Call the
updateAppmethod ofmapperand pass in theupdateAppobject to perform the update operation. - Call the
commitmethod ofsqlSessionto commit the database transaction. - Call the
selectAppsmethod ofmapperto query allAppobjects. Call theforEachmethod to traverse theappListvariable and output the results to the console. - Call the
startPagemethod ofPageHelperand pass in pagination parameters, including the page number and the number of data entries per page. Query allAppobjects and return aListobject that contains allAppobjects. - Call the
getListmethod ofPageInfoto obtain the paged list ofAppobjects, and call theSystem.out.printlnmethod to print the paged list ofAppobjects. - Call
sqlSession.close()to close theSqlSessionobject and release relevant resources.
The sample code is as follows:
public void testAppMapper() throws SQLException, IOException { //mybatis annotation usecases SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml")); SqlSession sqlSession = sqlSessionFactory.openSession(); Statement statement = sqlSession.getConnection().createStatement(); try { statement.execute("drop table test_app"); } catch (SQLException ex) { } finally { statement.execute("create table test_app(id number(20) primary key,name varchar2(100))"); } IAppMapper mapper = sqlSession.getMapper(IAppMapper.class); //insert for (int i = 1; i <= 10; i++) { App app = new App((long) i, "insert" + i); Integer insertResult = mapper.insertApp(app); } //delete Integer deleteResult = mapper.deleteApp(1L); //update App updateApp = new App(2L, "update"); Integer updateResult = mapper.updateApp(updateApp); //commit sqlSession.commit(); //selectApps List<App> appList = mapper.selectApps(); appList.forEach(System.out::println); //selectbyPage //set page parameters PageHelper.startPage(2, 3); //selectApps List<App> appList1 = mapper.selectApps(); //get pageList PageInfo pageInfo = new PageInfo(appList1); List<App> pageList = pageInfo.getList(); System.out.println("pageList = " + pageList); sqlSession.close(); }- Call the
Complete code examples
<?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.example</groupId>
<artifactId>java-oceanbase-mybatis</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>com.oceanbase</groupId>
<artifactId>oceanbase-client</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.9</version>
</dependency>
<!-- pagehelper plug-in -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.0</version>
</dependency>
</dependencies>
</project>
jdbc.driver=com.oceanbase.jdbc.Driver
jdbc.url=jdbc:oceanbase://host:port/TEST?useServerPrepStmts=true&rewriteBatchedStatements=true
jdbc.username=user_name
jdbc.password=******
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"></properties>
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="true"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="NULL"/>
</settings>
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="oracle"/>
<property name="offsetAsPageNum" value="true"/>
<property name="rowBoundsWithCount" value="true"/>
<property name="pageSizeZero" value="true"/>
<property name="reasonable" value="false"/>
<property name="params" value="pageNum=start;pageSize=limit;"/>
<property name="supportMethodsArguments" value="true"/>
<property name="returnPageInfo" value="check"/>
</plugin>
</plugins>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/alipay/oceanbase/mapper/IUserMapper.xml"></mapper>
<mapper class="com.oceanbase.mapper.IAppMapper"></mapper>
</mappers>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.oceanbase.mapper.IUserMapper">
<insert id="insertUser" parameterType="com.oceanbase.pojo.User">
INSERT INTO test_user (id,name) VALUES (#{id},#{name})
</insert>
<delete id="deleteUser" parameterType="long">
DELETE FROM test_user WHERE id = #{id}
</delete>
<update id="updateUser" parameterType="com.oceanbase.pojo.User">
UPDATE test_user SET name = #{name} WHERE id = #{id}
</update>
<select id="selectUsers" resultType="com.oceanbase.pojo.User">
SELECT id,name FROM test_user
</select>
<!-- There are two ways to paginate queries: 1. Use the pagehelper plugin; 2. Use SQL statements to paginate -->
<!-- SQL statement pagination: Oracle mode does not support the limit keyword, and instead uses the unique field 'rownum'-->
<select id="selectUserByPage" resultType="com.oceanbase.pojo.User">
select id,name from ( select row_.*, rownum rownum_ from ( select * from test_user ) row_ where rownum
<![CDATA[ <= ]]> #{pageNum} * #{pageSize} ) where rownum_ <![CDATA[ >]]> ( #{pageNum}- 1) * #{pageSize}
</select>
</mapper>
package com.oceanbase.mapper;
import com.oceanbase.pojo.App;
import org.apache.ibatis.annotations.*;
import java.util.List;
//using annotations
public interface IAppMapper {
@Insert("insert into test_app(id,name) values(#{id},#{name})")
Integer insertApp(App app);
@Delete("delete from test_app where id =#{id}")
Integer deleteApp(Long id);
@Update("update test_app set name= #{name} where id = #{id}")
Integer updateApp(App user);
@Select("select * from test_app")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(column = "name", property = "name")
})
List<App> selectApps();
}
package com.oceanbase.mapper;
import com.oceanbase.pojo.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
//using XML
public interface IUserMapper {
Integer insertUser(User user);
Integer deleteUser(Long id);
Integer updateUser(User user);
List<User> selectUsers();
public List<User> selectUserByPage(@Param("user") User user, @Param("pageNum") Integer pageNum,
@Param("pageSize") Integer pageSize);
}
package com.oceanbase.pojo;
public class App {
private Long id;
private String name;
public App() {
}
public App(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "App{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
package com.oceanbase.pojo;
public class User {
private Long id;
private String name;
public User() {
}
public User(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long 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.mapper.IAppMapper;
import com.oceanbase.mapper.IUserMapper;
import com.oceanbase.pojo.App;
import com.oceanbase.pojo.User;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
public class TestMybatis {
@Test
public void testUserMapper() throws SQLException, IOException {
//mybatis xml usecases
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
Statement statement = sqlSession.getConnection().createStatement();
try {
statement.execute("drop table test_user");
} catch (SQLException ex) {
} finally {
statement.execute("create table test_user(id number(20) primary key,name varchar2(100))");
}
IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
//insert 10 users
for (int i = 1; i <= 10; i++) {
User user = new User((long) i, "insert");
Integer insertResult = mapper.insertUser(user);
}
//delete id==1
Integer deleteResult = mapper.deleteUser(1L);
//update id==2L name=update
User updateUser = new User(2L, "update");
Integer updateResult = mapper.updateUser(updateUser);
//selectUsers query all
List<User> userList = mapper.selectUsers();
userList.forEach(System.out::println);
//selectUsersByPage: use the rownum keyword in SQL statements to manually perform pagination queries,
// example: data on page 2 (3 items per page)
User user = new User();
user.setName("insert");
List<User> usersByPage = mapper.selectUserByPage(user, 2, 3);
System.out.println("usersByPage = " + usersByPage);
statement.close();
sqlSession.commit();
sqlSession.close();
}
@Test
public void testSqlSession() throws SQLException, IOException {
//SqlSession usecases
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
Statement statement = sqlSession.getConnection().createStatement();
try {
statement.execute("drop table test_user");
} catch (SQLException ex) {
} finally {
statement.execute("create table test_user(id number(20) primary key,name varchar2(100))");
}
//insert
for (int i = 1; i <= 10; i++) {
User user = new User((long) i, "insert");
//Integer insertResult = mapper.insertUser(user);
int insertResult = sqlSession.insert("com.oceanbase.mapper.IUserMapper.insertUser", user);
}
//delete
int deleteResult = sqlSession.delete("com.oceanbase.mapper.IUserMapper.deleteUser", 1L);
//update
User updateUser = new User(2L, "update");
int updateResult = sqlSession.update("com.oceanbase.mapper.IUserMapper.updateUser", updateUser);
//selectUsers
List<User> userList = sqlSession.selectList("com.oceanbase.mapper.IUserMapper.selectUsers", null);
userList.forEach(System.out::println);
//System.out.println("userList = " + userList);
statement.close();
sqlSession.commit();
sqlSession.close();
}
@Test
public void testAppMapper() throws SQLException, IOException {
//mybatis annotation usecases
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
Statement statement = sqlSession.getConnection().createStatement();
try {
statement.execute("drop table test_app");
} catch (SQLException ex) {
} finally {
statement.execute("create table test_app(id number(20) primary key,name varchar2(100))");
}
IAppMapper mapper = sqlSession.getMapper(IAppMapper.class);
//insert
for (int i = 1; i <= 10; i++) {
App app = new App((long) i, "insert" + i);
Integer insertResult = mapper.insertApp(app);
}
//delete
Integer deleteResult = mapper.deleteApp(1L);
//update
App updateApp = new App(2L, "update");
Integer updateResult = mapper.updateApp(updateApp);
//commit
sqlSession.commit();
//selectApps
List<App> appList = mapper.selectApps();
appList.forEach(System.out::println);
//selectbyPage
//set page parameters
PageHelper.startPage(2, 3);
//selectApps
List<App> appList1 = mapper.selectApps();
//get pageList
PageInfo pageInfo = new PageInfo(appList1);
List<App> pageList = pageInfo.getList();
System.out.println("pageList = " + pageList);
sqlSession.close();
}
}
References
For more information about OceanBase Connector/J, see OceanBase Connector/J.
Download the java-oceanbase-mybatis sample project