Java如何创建MyBatis映射器?
在此示例中,您将看到如何使用MyBatis创建或定义数据映射器。映射器将把我们的应用程序与存储数据的基础数据库进行通信。MyBatis数据映射器定义为一个interface对象。我们可以使用注释或xml映射器来定义数据库查询。
在第一步中,我们将创建一个域对象,这是一个简单的pojo,用于将数据存储在对象世界中。pojo的属性/字段类似于records数据库中表的结构。
package org.nhooo.example.mybatis.domain;
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 +
'}';
}
}接下来,我们定义映射器interface代码,我们将创建一个RecordMapper.java文件,该文件包含一种从表中获取数据的方法。这时interface将如下所示:
package org.nhooo.example.mybatis.persistence;
import org.nhooo.example.mybatis.domain.Record;
public interface RecordMapper {
/**
* Get a single Record from the database based on the record
* identified.
*
* @param id record identifier.
* @return a record object.
*/
Record getRecord(Long id);
}创建ResultMapper.java接口后,我们创建一个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.nhooo.example.mybatis.persistence.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 records
WHERE id = #{id}
</select>
</mapper>要告诉MyBatis我们的映射器,我们需要在MyBatis配置文件(resources/configuration.xml)中定义映射器。我们将映射器注册在<mappers>配置文件的元素内。
<?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.nhooo.example.mybatis.domain.Record"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.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/nhooo/example/mybatis/mapper/RecordMapper.xml"/>
</mappers>
</configuration>最后,我们创建一个简单的应用程序,以使用数据映射器从数据库中获取记录数据。
package org.nhooo.example.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.nhooo.example.mybatis.domain.Record;
import org.nhooo.example.mybatis.persistence.RecordMapper;
import java.io.Reader;
public class MusicClient {
public static void main(String[] args) throws Exception {
Reader reader = Resources.getResourceAsReader("configuration.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
try {
RecordMapper mapper = session.getMapper(RecordMapper.class);
Record record = mapper.getRecord(1L);
System.out.println("Record = " + record);
} finally {
session.close();
}
}
}Maven依赖
<dependencies>
<!--https://search.maven.org/remotecontent?filepath=org/mybatis/mybatis/3.5.0/mybatis-3.5.0.jar-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<!--https://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!--https://search.maven.org/remotecontent?filepath=org/apache/commons/commons-dbcp2/2.5.0/commons-dbcp2-2.5.0.jar-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.5.0</version>
</dependency>
</dependencies>