SpringBoot中通过Mybatis与MySql交互

SpringBoot 学习第三天:与 SQL 数据库的交互

在后端开发中,与数据库交互是必不可少的部分。通过 MyBatis 框架,我们可以免去 JDBC 中繁琐的连接和操作步骤。MyBatis 提供了两种主要的数据库操作方式:注解方式和 XML 配置文件方式。

1. 注解方式

通过注解的方式,我们可以在接口上直接编写 SQL 语句,这种方式简单明了,适合简单的数据库操作。

示例:使用 @Insert 注解实现插入操作

以下代码展示了如何将 emp 对象插入到数据库中的 emp 表:

public interface EmpMapper {  
    @Insert("INSERT INTO emp (username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time) " +  
            "VALUES (#{emp.username}, #{emp.password}, #{emp.name}, #{emp.gender}, #{emp.image}, #{emp.job}, #{emp.entrydate}, #{emp.deptId}, #{emp.createTime}, #{emp.updateTime})")  
    void insert(@Param("emp") Emp emp);  
}

以上代码通过 @Insert 注解直接定义了插入操作的 SQL 语句。@Insert 内的内容就是执行的 SQL 语句,而 insert(@Param("emp") Emp emp) 则是接口方法,调用该方法时会自动执行 SQL 语句。

调用示例

public void save(Emp emp){   
    empMapper.insert(emp);  
}

说明insert() 函数定义在 EmpMapper 接口中,通过注入 EmpMapper 的实例 empMapper,我们可以在 save 方法中调用 insert 完成插入操作。

@Param 注解的作用

@Param("emp") 注解的作用是将方法参数 emp 对象映射为 SQL 语句中的 emp,使得 #{emp.username} 可以访问 emp 对象的 username 属性。

  • MyBatis 会根据 @Param("emp") 注解,将 emp 对象中的属性值与 SQL 语句中的占位符(如 #{emp.username})匹配。例如,#{emp.username} 会被替换为 emp 对象的 username 属性值,#{emp.password} 会替换为 password 的值。

2. XML 配置文件方式

对于复杂的 SQL 语句,注解方式显得冗长且难以维护。这种情况下,我们可以使用 XML 文件来存储 SQL 语句,将接口和 SQL 分离,保持代码的整洁。

示例:使用 XML 文件实现 UPDATE 操作

以下代码展示了在 XML 文件中定义 UPDATE 语句的方式:

代码中 @Update 注解的复杂 SQL 示例
@Update({  
        "<script>",  
        "UPDATE dept",  
        "<set>",  
        "<if test='name != null'>name = #{name},</if>",  
        "<if test='createTime != null'>create_time = #{createTime},</if>",  
        "<if test='updateTime != null'>update_time = #{updateTime},</if>",  
        "</set>",  
        "WHERE id = #{id}",  
        "</script>"  
})  
void update(Dept dept);
转换为 XML 文件方式

将上述 SQL 转换为 XML 配置文件方式如下:

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="com.itheima.practice.mapper.DeptMapper"> 
    <update id="update" resultType="com.itheima.practice.pojo.Emp"> 
        <script> 
            UPDATE dept 
            <set> 
                <if test="name != null">name = #{name},</if> 
                <if test="createTime != null">create_time = #{createTime},</if> 
                <if test="updateTime != null">update_time = #{updateTime},</if> 
            </set> 
            WHERE id = #{id} 
        </script> 
    </update> 
</mapper>

XML 文件说明:

  • namespace:表示 XML 文件中定义的 SQL 语句对应的 Mapper 路径,便于 MyBatis 识别。
  • id:对应 Mapper 中的接口方法。每个 <mapper> 标签对应一个 Mapper 文件,内部可以包含多个 SQL 语句,如 <select><insert><update><delete> 等。
  • resultType:指定 SQL 执行后返回的数据类型,通常是与数据库表对应的实体类。

示例结构:

假设某 Mapper 文件包含 selectdelete 语句,其结构如下:

<mapper namespace="com.itheima.practice.mapper.YourMapper"> 
    <select id="find" resultType="com.itheima.practice.pojo.Emp">
        SELECT * FROM emp WHERE id = #{id}
    </select>
    
    <delete id="delete">
        DELETE FROM emp WHERE id = #{id}
    </delete>
</mapper>

id 属性用于指定每个 SQL 语句在接口中的调用方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值