简单介绍
在之前的我们比较详细的介绍过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());
}
}
}