MyBatis-输出类型
输出简单类型

Map
One
- key:是列名
- value:是列名对应的值
mapper 接口代码如下
/**
* @author BNTang
*/
public interface CustomerMappter {
Map<String, Object> getCustomerWithID(Integer id);
}
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="top.it6666.mapper.CustomerMappter">
<select id="getCustomerWithID" resultType="map">
SELECT * FROM `customer` WHERE cust_id = #{id};
</select>
</mapper>
psvm 代码如下所示
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
CustomerMappter customerMappter = sqlSession.getMapper(CustomerMappter.class);
Map<String, Object> customer = customerMappter.getCustomerWithID(1);
System.out.println(customer);
}
}

Two
Map<key, 自定义对象>,key 为自己指定的列
mapper 接口代码如下图
/**
* @author BNTang
*/
public interface CustomerMappter {
@MapKey("cust_id")
Map<Integer, Object> getAllCustomer();
}
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="top.it6666.mapper.CustomerMappter">
<select id="getAllCustomer" resultType="top.it6666.domain.Customer">
SELECT * FROM `customer`;
</select>
</mapper>
psvm
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
// 1.创建 SqlSessionFactoryBuilder 对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.加载 SqlMapConfig.xml 配置文件
InputStream inputStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
// 3.创建 SqlSessionFactory 对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
// 4.创建 SqlSession 对象
SqlSession sqlSession = sqlSessionFactory.openSession();
CustomerMappter customerMappter = sqlSession.getMapper(CustomerMappter.class);
Map<Integer, Object> allCustomer = customerMappter.getAllCustomer();
System.out.println(allCustomer);
sqlSession.close();
}
}

如上的创建 SqlSessionFactoryBuilder 对象,等一系列操作其实是可以进行封装的,新建一个 Utils 包,然后紧接着新建一个 MybatisUtils.java 内容如下
/**
* @author BNTang
*/
public class MybatisUtils {
public static final SqlSessionFactory SESSION_FACTORY;
static {
// 1.sqlSessionFactoryBuilder 加载配置文件
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
// 2.读取配置文件
InputStream resourceAsStream = null;
try {
resourceAsStream = Resources.getResourceAsStream("SqlMappingConfig.xml");
} catch (IOException e) {
e.printStackTrace();
}
// 3.获取session工厂
SESSION_FACTORY = sqlSessionFactoryBuilder.build(resourceAsStream);
}
public static SqlSession openSession() {
return SESSION_FACTORY.openSession();
}
}
之后就可以使用这个 Utils 来进行改造我们之前的代码了
ResultMap
只有在写输出时使用的都是 resultType,但是 resultType 要求必须得要字段名称和数据库当中的名称一致时才能有值, 否则为 null,如果 sql 查询字段名和 pojo 的属性名不一致,可以通过 resultMap 将字段名和属性名作一个对应关系
实体类代码如下图所示

databases 的表结构如下图

可以很明显的发现,实体类 pojo 中的属性和数据库中的完全不一致,那么这个时候就可以来演示一下当前标题中所讲解的 ResultMap 来解决,mapper 接口如下图所示


如上的改造工作都已经改造完毕了,接下来就可以开始我们的 psvm 了,代码如下,如下使用到的 Utils 就是我上面贴出来的
/**
* @author BNTang
*/
public class TestMain {
public static void main(String[] args) throws Exception {
SqlSession sqlSession = MybatisUtils.openSession();
CustomerMappter customerMappter = sqlSession.getMapper(CustomerMappter.class);
customerMappter.getAllCustomer().forEach(System.out::println);
sqlSession.close();
}
}


浙公网安备 33010602011771号