To create an SqlSession
you can use the SqlSessionFactory
class openSession()
method. This method offers some overloaded method that can configure the property of the session. For example, we can configure the auto-commit-mode and the transaction-isolation-level for the session.
package org.kodejava.mybatis;
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.kodejava.mybatis.support.Record;
import java.io.IOException;
import java.io.Reader;
public class SqlSessionDemo {
public static void main(String[] args) throws IOException {
SqlSessionDemo demo = new SqlSessionDemo();
// Build an SqlSessionFactory.
SqlSessionFactory factory = demo.getSessionFactory();
// Create an SqlSession by using the factory.openSession() method.
// It is a good practice to use a try-with-resources block when
// working with an SqlSession. The session will be automatically
// closes when it finishes the job.
try (SqlSession session = factory.openSession()) {
Record record = session.selectOne("getRecord", 1L);
System.out.println("Record = " + record);
}
}
/**
* Build an SqlSessionFactory.
*
* @return an SqlSessionFactory.
* @throws IOException when fail to read the configuration file.
*/
private SqlSessionFactory getSessionFactory() throws IOException {
Reader reader = Resources.getResourceAsReader("configuration.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
return builder.build(reader);
}
}
Below are the configuration, mapper and the POJO.
configuration.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="record" type="org.kodejava.mybatis.support.Record" />
</typeAliases>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/musicdb" />
<property name="username" value="music" />
<property name="password" value="s3cr*t" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/kodejava/mybatis/mapper/RecordMapper.xml" />
</mappers>
</configuration>
RecordMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.kodejava.mybatis.RecordMapper">
<resultMap id="recordResultMap" type="record">
<result column="id" property="id" />
<result column="title" property="title" />
<result column="release_date" property="releaseDate" />
<result column="artist_id" property="artistId" />
<result column="label_id" property="labelId" />
</resultMap>
<select id="getRecord" parameterType="java.lang.Long" resultMap="recordResultMap">
SELECT id,
title,
release_date,
artist_id,
label_id
FROM record
WHERE id = #{id}
</select>
</mapper>
Record.java
package org.kodejava.mybatis.support;
import java.io.Serializable;
import java.util.Date;
public class Record implements Serializable {
private Long id;
private String title;
private Date releaseDate;
private Long artistId;
private Long labelId;
// Getters & Setters
@Override
public String toString() {
return "Record{" +
"id=" + id +
", title='" + title + '\'' +
", releaseDate=" + releaseDate +
", artistId=" + artistId +
", labelId=" + labelId +
'}';
}
}
The directory structure of the code above is:
├─ pom.xml
└─ src
└─ main
├─ java
│ └─ org
│ └─ kodejava
│ └─ mybatis
│ ├─ SqlSessionDemo.java
│ └─ domain
│ └─ Record.java
└─ resources
├─ configuration.xml
└─ org
└─ kodejava
└─ mybatis
└─ mapper
└─ RecordMapper.xml
Maven Dependencies
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>8.1.0</version>
</dependency>
</dependencies>
Latest posts by Wayan (see all)
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024