iBatis(旧版MyBatis)的sql-map.xml怎么写

来源:建站作者:日本程序员头衔:程序员
导读:本期聚焦于小伙伴创作的《iBatis(旧版MyBatis)的sql-map.xml怎么写》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《iBatis(旧版MyBatis)的sql-map.xml怎么写》有用,将其分享出去将是对创作者最好的鼓励。

iBatis是早期流行的持久层框架,后来更名为MyBatis,sql-map.xml是其核心配置文件,用于定义SQL语句、参数映射和结果集映射,实现SQL与业务代码的解耦。开发者通过编写该文件,可以灵活管理各类数据库操作逻辑。

iBatis(旧版MyBatis)的sql-map.xml怎么写

sql-map.xml的基础结构

一个标准的sql-map.xml文件需要遵循iBatis的DTD约束,基础结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
    <!-- 类型别名定义 -->
    <typeAlias alias="User" type="com.example.pojo.User"/>
    
    <!-- SQL语句定义区域 -->
</sqlMap>

其中namespace用于区分不同模块的SQL配置,避免id冲突;typeAlias可以给全路径类名定义短别名,简化后续配置。

常用标签说明

1. 结果集映射标签resultMap

当数据库字段名和Java实体类属性名不一致时,需要使用resultMap定义映射规则:

<resultMap id="userResultMap" class="User">
    <result property="userId" column="user_id"/>
    <result property="userName" column="user_name"/>
    <result property="userAge" column="user_age"/>
    <result property="createTime" column="create_time"/>
</resultMap>

property对应Java实体类的属性名,column对应数据库表的字段名。

2. 查询语句标签select

查询标签用于定义查询类SQL,支持参数传入和结果集映射:

<select id="queryUserById" parameterClass="int" resultMap="userResultMap">
    SELECT user_id, user_name, user_age, create_time
    FROM t_user
    WHERE user_id = #value#
</select>

parameterClass指定传入参数的类型,resultMap指定结果集映射规则,#value#是基本类型参数的占位符。

3. 插入语句标签insert

插入标签用于定义新增数据的SQL,支持返回自增主键:

<insert id="insertUser" parameterClass="User">
    INSERT INTO t_user (user_name, user_age, create_time)
    VALUES (#userName#, #userAge#, #createTime#)
    <selectKey resultClass="int" keyProperty="userId">
        SELECT LAST_INSERT_ID()
    </selectKey>
</insert>

selectKey用于获取自增主键,keyProperty指定主键对应的Java实体类属性名。

4. 更新语句标签update

更新标签用于定义修改数据的SQL:

<update id="updateUser" parameterClass="User">
    UPDATE t_user
    SET user_name = #userName#,
        user_age = #userAge#
    WHERE user_id = #userId#
</update>

5. 删除语句标签delete

删除标签用于定义删除数据的SQL:

<delete id="deleteUserById" parameterClass="int">
    DELETE FROM t_user
    WHERE user_id = #value#
</delete>

完整示例

下面是一个包含增删改查完整配置的sql-map.xml示例:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
    <typeAlias alias="User" type="com.example.pojo.User"/>
    
    <resultMap id="userResultMap" class="User">
        <result property="userId" column="user_id"/>
        <result property="userName" column="user_name"/>
        <result property="userAge" column="user_age"/>
        <result property="createTime" column="create_time"/>
    </resultMap>
    
    <select id="queryUserById" parameterClass="int" resultMap="userResultMap">
        SELECT user_id, user_name, user_age, create_time
        FROM t_user
        WHERE user_id = #value#
    </select>
    
    <select id="queryAllUsers" resultMap="userResultMap">
        SELECT user_id, user_name, user_age, create_time
        FROM t_user
    </select>
    
    <insert id="insertUser" parameterClass="User">
        INSERT INTO t_user (user_name, user_age, create_time)
        VALUES (#userName#, #userAge#, #createTime#)
        <selectKey resultClass="int" keyProperty="userId">
            SELECT LAST_INSERT_ID()
        </selectKey>
    </insert>
    
    <update id="updateUser" parameterClass="User">
        UPDATE t_user
        SET user_name = #userName#,
            user_age = #userAge#
        WHERE user_id = #userId#
    </update>
    
    <delete id="deleteUserById" parameterClass="int">
        DELETE FROM t_user
        WHERE user_id = #value#
    </delete>
</sqlMap>

注意事项

  • SQL语句中的参数占位符如果是基本类型用#value#,如果是对象类型用#属性名#
  • 如果数据库字段和实体类属性名一致,可以直接使用resultClass指定返回类型,不需要定义resultMap
  • sql-map.xml文件需要配置在iBatis的主配置文件中才能被框架加载识别
  • SQL语句中的特殊字符需要进行转义,比如小于号要写成<,大于号写成>

iBatissql-map.xmlMyBatisSQL映射修改时间:2026-07-14 05:03:27

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。