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();
    }
}

posted @   BNTang  阅读(95)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示