mybatis怎么操作数据库

MyBatis通过配置环境(如mybatis-config.xml),编写Mapper接口及SQL映射文件,使用SqlSession执行增删改查操作,支持参数传递与结果映射,简化JDBC繁琐代码

MyBatis 是一款优秀的持久层框架,通过简单的配置和少量的代码即可实现对数据库的高效操作,以下是 MyBatis 操作数据库的详细指南,涵盖基础操作、核心功能及高级特性。

mybatis怎么操作数据库

基础操作流程

MyBatis 的核心目标是简化数据库交互,其操作流程可分为以下步骤:

  1. 配置环境

    • mybatis-config.xml 中配置数据源、事务管理器等。
    • 示例配置:
      <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"/>
                  <property name="username" value="root"/>
                  <property name="password" value="123456"/>
              </dataSource>
          </environment>
      </environments>
  2. 创建实体类

    • 将数据库表映射为 Java 对象(POJO),字段名与表列一一对应。
    • 示例:
      public class User {
          private Integer id;
          private String name;
          private String email;
          // getters and setters
      }
  3. 定义 Mapper 接口

    • 编写 DAO 接口(如 UserMapper.java),声明数据库操作方法。
    • 示例:
      public interface UserMapper {
          void insertUser(User user);
          User selectUserById(Integer id);
      }
  4. 编写 XML 映射文件

    • UserMapper.xml 中定义 SQL 语句,并与接口方法绑定。
    • 示例:
      <mapper namespace="com.example.UserMapper">
          <insert id="insertUser" parameterType="User">
             INSERT INTO users (name, email) VALUES (#{name}, #{email})
          </insert>
          <select id="selectUserById" resultType="User">
             SELECT  FROM users WHERE id = #{id}
          </select>
      </mapper>
  5. 执行操作

    • 通过 SqlSession 获取 Mapper 实例并调用方法。
    • 示例:
      try (SqlSession session = sqlSessionFactory.openSession()) {
          UserMapper mapper = session.getMapper(UserMapper.class);
          mapper.insertUser(new User("John", "john@example.com"));
          session.commit();
      }

CRUD 操作详解

MyBatis 支持完整的增删改查操作,具体实现如下:

操作类型 方法示例 XML 配置 关键特性
新增(Insert) insertUser <insert> 支持返回主键
删除(Delete) deleteUser <delete> 动态参数拼接
修改(Update) updateUserEmail <update> 条件更新
查询(Select) selectUserById <select> 结果映射、分页查询

示例:插入返回主键

<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
   INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>

通过 useGeneratedKeyskeyProperty,MyBatis 会自动将数据库生成的主键赋值给 POJO 的 id 字段。

mybatis怎么操作数据库

动态 SQL 与参数处理

MyBatis 提供动态 SQL 功能,可根据条件灵活生成语句:

  1. 动态条件拼接

    <select id="searchUsers" resultType="User">
      SELECT  FROM users
      <where>
        <if test="name != null">AND name = #{name}</if>
        <if test="email != null">AND email = #{email}</if>
      </where>
    </select>

    通过 <if> 标签实现按需拼接 WHERE 条件。

  2. 参数传递

    • 支持单个参数(如 #{id})和集合参数(如 <foreach> 遍历列表)。
    • 示例:批量删除
      <delete id="deleteUsers">
         DELETE FROM users WHERE id IN
         <foreach item="id" collection="list" open="(" separator="," close=")">
             #{id}
         </foreach>
      </delete>

结果映射与关联查询

MyBatis 通过 resultMap 解决字段名与属性名不一致的问题:

  1. 基础映射

    <resultMap id="userMap" type="User">
       <id property="id" column="id"/>
       <result property="name" column="user_name"/>
       <result property="email" column="email"/>
    </resultMap>
    <select id="selectAllUsers" resultMap="userMap">
       SELECT id, user_name, email FROM users
    </select>

    将数据库列 user_name 映射到 Java 属性 name

  2. 关联查询

    • 一对一关联:通过 <association> 映射关联对象。
    • 一对多关联:通过 <collection> 映射集合属性。

缓存与事务管理

MyBatis 提供一级缓存(默认开启)和二级缓存(需手动配置):

mybatis怎么操作数据库

  1. 一级缓存
    基于 SqlSession 生命周期,相同会话内多次查询相同数据会从缓存取值。

  2. 二级缓存
    mapper.xml 中配置 <cache/>,可实现跨会话共享缓存。

    <cache eviction="LRU" flushInterval="60000" size="512"/>
  3. 事务管理

    • 手动控制:通过 SqlSessioncommit()rollback() 管理事务。
    • 集成 Spring 后可通过 @Transactional 注解自动管理。

高级功能

  1. 延迟加载(Lazy Loading)

    • 适用于一对一、一对多关联查询,仅在访问关联对象时加载数据。
    • 配置:<settings><setting name="lazyLoadingEnabled" value="true"/></settings>
  2. 逻辑删除

    • 通过拦截器或自定义 SQL 实现“假删除”(如更新状态字段而非物理删除)。
    • 示例:
      <update id="logicDelete">
         UPDATE users SET status = 'DELETED' WHERE id = #{id}
      </update>

相关问答 FAQs

问题1:如何实现插入后获取自增主键?
答:在 <insert> 标签中设置 useGeneratedKeys="true" 并指定 keyProperty(对应实体类的主键字段),MyBatis 会自动将数据库生成的主键值赋给该字段。

问题2:动态 SQL 如何防止 SQL 注入?
答:MyBatis 使用 #{param} 语法自动进行参数预编译,避免 SQL 注入风险。

<select id="safeQuery">
   SELECT  FROM users WHERE name = #{name}
</select>

即使 name 参数包含恶意字符串,也不会被解析为 SQL 代码。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/68193.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年7月19日 02:37
下一篇 2025年7月19日 02:40

相关推荐

  • win10数据库怎么连接

    Win10中连接数据库,需先安装对应数据库客户端工具,如MySQL Workbench连MySQL、SSMS连SQL Server,输入服务器地址、端口、用户名和密码等配置信息,测试连接成功后即可操作数据库

    2025年7月12日
    100
  • 数据库修复如何操作?

    数据库修复需先停止写入防止损坏扩大,检查错误日志定位问题,优先尝试备份恢复,若无备份则使用数据库内置修复工具(如MySQL的myisamchk或innodb_force_recovery),严重损坏需借助专业软件或联系技术支持,修复后务必验证数据完整性。

    2025年6月11日
    200
  • Delphi连接数据库速成指南

    Delphi连接数据库主要通过数据库访问组件实现,常用方法包括使用ADO组件(如ADOConnection、ADOQuery)或FireDAC组件(如FDConnection、FDQuery),开发者需设置连接字符串指定数据库类型、位置及认证信息,然后通过数据集组件执行SQL操作。

    2025年6月16日
    200
  • Word如何快速去除重复数据?

    在Word中去除重复数据,可通过以下步骤操作: ,1. **查找重复项**:使用“查找”功能(Ctrl+F)搜索可能重复的关键词或短语。 ,2. **手动删除**:定位到重复内容后,手动删除冗余部分。 ,3. **表格处理**:若数据在表格中,可复制粘贴到Excel,利用其“删除重复项”功能高效处理,再粘贴回Word,Word本身无直接数据库去重工具。

    2025年6月12日
    100
  • db2数据库怎么导入备份数据库

    2数据库导入备份数据库可使用db2move命令或db2 import命令,需先连接数据库,再执行相应导入操作并验证结果。

    2025年7月15日
    100

发表回复

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

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN