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"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias alias="record" type="org.kodejava.mybatis.support.Record" />
</typeAliases>
<environments default="development">
<environment id="development">
<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="root" />
<property name="password" value="" />
</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"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.kodejava.mybatis.RecordMapper">
<resultMap id="recordResultMap" type="record">
<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;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Date getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(Date releaseDate) {
this.releaseDate = releaseDate;
}
public Long getArtistId() {
return artistId;
}
public void setArtistId(Long artistId) {
this.artistId = artistId;
}
public Long getLabelId() {
return labelId;
}
public void setLabelId(Long labelId) {
this.labelId = labelId;
}
@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>
<!-- https://search.maven.org/remotecontent?filepath=org/mybatis/mybatis/3.5.11/mybatis-3.5.11.jar -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.11</version>
</dependency>
<!-- https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/8.0.30/mysql-connector-java-8.0.30.jar -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
</dependencies>
Latest posts by Wayan (see all)
- How do I build simple search page using ZK and Spring Boot? - March 8, 2023
- How do I calculate days between two dates excluding weekends and holidays? - January 12, 2023
- How do I discover the quarter of a given date? - January 11, 2023