MyBatis如何实现从数据库中查询指定表的数据?

MyBatis 是一款优秀的持久层框架,它简化了 Java 应用程序与数据库之间的交互过程,通过 MyBatis,开发者可以更高效地执行数据库查询操作,尤其是针对数据库表的查询,本文将详细介绍如何使用 MyBatis 查询数据库中的表,涵盖核心配置、映射文件编写、SQL 语句构建以及结果集处理等关键环节。

MyBatis如何实现从数据库中查询指定表的数据?

MyBatis 核心组件

在使用 MyBatis 进行数据库表查询前,需先理解其核心组件的作用:

  1. SqlSessionFactory:负责创建 SqlSession 实例,是 MyBatis 操作的入口点。
  2. SqlSession:代表一次数据库会话,用于执行 SQL 语句、管理事务等。
  3. Mapper 接口:定义数据访问方法,无需实现类,MyBatis 会自动生成代理对象。
  4. XML 映射文件:包含 SQL 语句、参数映射和结果集映射规则。

环境准备与基础配置

引入依赖

在 Maven 项目中添加 MyBatis 和数据库驱动依赖(以 MySQL 为例):

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.10</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.28</version>
    </dependency>
</dependencies>

配置 mybatis-config.xml

创建全局配置文件,配置数据源、事务管理等:

<?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>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test_db?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 扫描 Mapper 接口或 XML 文件 -->
        <mapper resource="com/example/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

编写 Mapper 接口与映射文件

定义 Mapper 接口

创建接口 UserMapper.java,声明查询方法:

package com.example.mapper;
public interface UserMapper {
    List<User> selectAllUsers();
}

编写 XML 映射文件

在 resources 目录下创建对应路径的 XML 文件 UserMapper.xml,编写 SQL 语句:

MyBatis如何实现从数据库中查询指定表的数据?

<?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="com.example.mapper.UserMapper">
    <!-- 查询所有用户 -->
    <select id="selectAllUsers" resultType="com.example.entity.User">
        SELECT id, username, email FROM user_table
    </select>
</mapper>
  • namespace:必须与 Mapper 接口全限定名一致。
  • id:与方法名对应,唯一标识该 SQL 语句。
  • resultType:指定返回结果的 POJO 类全限定名。

执行查询操作

构建 SqlSessionFactory

通过 SqlSessionFactoryBuilder 加载配置文件,获取工厂实例:

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

获取 SqlSession 并调用方法

try (SqlSession session = sqlSessionFactory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    List<User> users = mapper.selectAllUsers();
    for (User user : users) {
        System.out.println(user.getUsername());
    }
}

高级查询场景示例

条件查询(动态 SQL)

当需要根据条件筛选数据时,可使用 <if> 标签动态拼接 SQL:

<select id="selectUsersByCondition" parameterType="map" resultType="User">
    SELECT * FROM user_table WHERE 1=1
    <if test="username != null and username != ''">
        AND username LIKE CONCAT('%', #{username}, '%')
    </if>
    <if test="email != null and email != ''">
        AND email = #{email}
    </if>
</select>

调用时传入参数 Map:

Map<String, Object> params = new HashMap<>();
params.put("username", "admin");
List<User> users = mapper.selectUsersByCondition(params);

分页查询

结合 RowBounds 或插件(如 PageHelper)实现分页:

// 使用 RowBounds(内存分页,不推荐大数据量)
RowBounds rowBounds = new RowBounds(0, 10); // 起始位置,每页数量
List<User> users = session.selectList("com.example.mapper.UserMapper.selectAllUsers", null, rowBounds);
// 使用 PageHelper 插件(物理分页)
PageHelper.startPage(1, 10);
List<User> users = mapper.selectAllUsers();

结果集映射细节

若表字段与实体类属性名不一致,可通过 <result> 手动映射:

MyBatis如何实现从数据库中查询指定表的数据?

<select id="selectUserById" parameterType="int" resultMap="userResultMap">
    SELECT id, user_name AS username, email FROM user_table WHERE id = #{id}
</select>
<resultMap id="userResultMap" type="User">
    <id column="id" property="id"/>
    <result column="user_name" property="username"/>
    <result column="email" property="email"/>
</resultMap>

相关问答 FAQs

Q1:为什么执行查询时报错“Mapped Statements collection does not contain value for …”?
A:通常是因为 Mapper 接口与 XML 文件的 namespace 不匹配,或 XML 文件未正确注册到 mybatis-config.xml 的 <mappers> 中,请检查 namespace 是否与接口全限定名一致,且 XML 文件路径是否正确配置。

Q2:如何优化大数据量查询的性能?
A:1. 避免使用 SELECT *,仅查询必要字段;2. 对查询条件列建立索引;3. 使用分页技术(如 PageHelper)减少单次查询数据量;4. 考虑缓存机制(如 MyBatis 一级/二级缓存);5. 对于复杂查询,可拆分为多个简单查询或使用关联查询优化。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

赞 (0)
热舞的头像热舞
上一篇 2025-10-22 00:21
下一篇 2025-10-22 00:27

相关推荐

  • aaa服务器软件哪个版本好,选择时注意什么?

    aaa服务器软件是一款专注于高性能与高稳定性的Web服务器解决方案,在并发处理和安全防护方面表现突出,尤其适合企业级应用和电商平台部署,aaa服务器软件性能怎么样?核心优势解析核心性能指标aaa服务器软件在业界评价中,响应速度和多线程处理能力是两大亮点,它基于事件驱动架构,能够在高并发场景下保持稳定的吞吐量,不……

    2026-07-29
    0013
  • 如何控制aaa服务器过载?,服务器过载怎么办

    解决aaa服务器过载控制的核心在于综合运用限流、熔断与弹性伸缩,并配合实时监控与自动调整,从而在高并发下保持系统稳定,为什么aaa服务器过载控制是系统稳定的关键?当流量超过aaa服务器处理能力时,请求响应时间会大幅增加,甚至导致服务完全不可用,过载不仅影响用户体验,还可能引发雪崩效应,拖垮整个系统,据统计,多数……

    2026-07-29
    0014
  • A5网站交易安全性如何,如何辨别正规平台?

    对于想买卖网站的用户来说,a5网站交易平台是目前国内较成熟的渠道之一,关键在于摸清流程细节和价格评估方法,避免踩坑,a5网站交易靠谱吗?平台资质与风险控制很多新手第一次接触a5网站交易时,心里都会打鼓:这个平台到底靠不靠谱?行业共识认为,a5网站交易作为老牌站长社区旗下的交易板块,已经运营了相当长的时间,积累了……

    2026-07-29
    0021
  • a5站长网网站交易流程是什么?,怎么操作

    对于想在A5站长网进行网站交易的用户来说,最关键的是了解平台规则、评估网站价值并确保交易安全,A5站长网作为老牌交易平台,提供了完善的交易中介服务,但买卖双方仍需注意细节,a5站长网网站交易流程是什么新手接触A5站长网,首先需要搞清楚交易怎么走,整个流程围绕买家、卖家、平台三方展开,每一步都有明确规范,注册与实……

    2026-07-29
    0017

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信