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();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具