简单介绍
在之前的我们比较详细的介绍过MyBatis的配置信息的时候,在SQL映射文件中说过我们可以直接将结果集映射到我们的POJO实体类中,省去了我们自己处理查询结果集的时间和代码,接下来我们就来演示将单条数据和多条数据映射到我们POJO实体类的情况
前期准备:
MyBatis核心配置文件:、
<?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="DatabaseConnectionProfile.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 第二个修改,将下面这些花括号里面的内容全都都加上一个mysql.的前缀-->
<property name="driver" value="${mysql.driver}"/>
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/selectOne.xml"/>
</mappers>
</configuration>
数据表信息:
create database mybatis;
use mybatis;
create table user(
id int,
name varchar(20),
age int,
gender varchar(3)
);
insert into user values (1,'张三',12,'男'),
(2,'李四',12,'女'),
(3,'王五',18,'男');
POJO实体类:注意这个实体类是放在一个包下面的
package com.mybites.mappers;
public class user {
private int id;
private String name;
private int age;
private String gender;
@Override
public String toString() {
return "course{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
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;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public user(int id, String name, int age, String gender) {
this.id = id;
this.name = name;
this.age = age;
this.gender = gender;
}
public user() {
}
}
SQL语句映射文件:
<?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="Mappers">
<!-- 根据id查询单条数据-->
<select id="selectOne" resultType="user" parameterType="int">
select * from user where id = #{id};
</select>
</mapper>
将单条数据映射到POJO实体类:
将前期准备工作完成之后,我们就可以开始编写Java代码了,我们可以现在test下面测试我们的代码:

import com.mybatis.POJO.User;
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.InputStream;
public class doSomething {
// 使用单元测试
@Test
public void selectOne() throws Exception{
// 以流的形式封装MyBatis核心配置文件
InputStream stream = Resources.getResourceAsStream("mybatis.xml");
// 解析核心配置文件并生成SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
// 生成持久化连接对象并操作数据库
SqlSession sqlSession = build.openSession();
// 使用方法操作数据库映射文件中的SQL语句,第一个参数是SQL映射文件的唯一标识,第二个参数是拼接在SQL语句中占位符的查询参数
// 这个过程会自动将查询结果集映射到POJO实体类,所以这里的返回结果就是我们的实体类对象
User u = sqlSession.selectOne("Mappers.selectOne", 2);
// 输出查询结果
System.out.println(u.toString());
}
}
可以看到在输出结果的阶段省去了我们自己编写查询结果集映射代码
将多条数据映射到POJO实体类:
将多条语句映射到POJO时,通过改变查询的方法和SQL映射文件即可:
<?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="Mappers">
<!-- 根据id查询单条数据-->
<select id="selectOne" resultType="user" parameterType="int">
select * from user where id = #{id};
</select>
<!-- 查询所有的数据-->
<select id="selectAll" resultType="user">
select * from user;
</select>
</mapper>
@Test
public void selectAll() throws Exception {
// 以流的形式封装MyBatis核心配置文件
InputStream stream = Resources.getResourceAsStream("mybatis.xml");
// 解析核心配置文件并生成SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
// 生成持久化连接对象并操作数据库
SqlSession sqlSession = build.openSession();
// 查询多条语句就是将多条结果封装金实体类之后,再将多个实体类组合成一个数组的形式
// 在查询的时候,需要遍历数组然后再得到里面的每一个元素
List<User> users = sqlSession.selectList("Mappers.selectAll");
for (User u : users){
System.out.println(u.toString());
}
}
最终的目录结构和代码:
目录结构:

代码:
import com.mybatis.POJO.User;
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.io.InputStream;
import java.util.List;
public class doSomething {
// 使用单元测试
@Test
public void selectOne() throws Exception{
// 以流的形式封装MyBatis核心配置文件
InputStream stream = Resources.getResourceAsStream("mybatis.xml");
// 解析核心配置文件并生成SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
// 生成持久化连接对象并操作数据库
SqlSession sqlSession = build.openSession();
// 使用方法操作数据库映射文件中的SQL语句,第一个参数是SQL映射文件的唯一标识,第二个参数是拼接在SQL语句中占位符的查询参数
// 这个过程会自动将查询结果集映射到POJO实体类,所以这里的返回结果就是我们的实体类对象
User u = sqlSession.selectOne("Mappers.selectOne", 2);
// 输出查询结果
System.out.println(u.toString());
}
@Test
public void selectAll() throws Exception {
// 以流的形式封装MyBatis核心配置文件
InputStream stream = Resources.getResourceAsStream("mybatis.xml");
// 解析核心配置文件并生成SqlSessionFactory对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(stream);
// 生成持久化连接对象并操作数据库
SqlSession sqlSession = build.openSession();
// 查询多条语句就是将多条结果封装金实体类之后,再将多个实体类组合成一个数组的形式
// 在查询的时候,需要遍历数组然后再得到里面的每一个元素
List<User> users = sqlSession.selectList("Mappers.selectAll");
for (User u : users){
System.out.println(u.toString());
}
}
}
MyBatis教程:结果集映射到POJO实体类
本文介绍了如何在MyBatis中将SQL查询结果映射到自定义的POJO实体类,包括单条数据和多条数据的映射方法。首先展示了MyBatis的核心配置文件和数据库连接设置,然后是数据表结构和POJO实体类定义。接着,通过一个SQL映射文件演示了如何选择性地查询单条和所有数据。最后,给出了Java代码示例,展示如何使用SqlSession接口的selectOne和selectList方法将查询结果自动转换为实体类对象。
5544

被折叠的 条评论
为什么被折叠?



