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 文件包含 select
和 delete
语句,其结构如下:
<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 语句在接口中的调用方法。