注意:在 Maven 项目 中,mapper.xml
文件必须存放在 resources
目录 下,才能被 MyBatis 正确识别并加载。
MyBatis 主要提供了两种方式来执行 SQL 查询:基于注解的方式 和 基于 XML 配置的方式。
1. 基于注解的 MyBatis 写法
@Mapper
public interface CategoryMapper {
@Select("SELECT * FROM category_ WHERE name= '${name}' ")
CategoryM getByName(@Param("name") String name);
}
在这种方式下,SQL 语句直接写在 @Select
注解 中,MyBatis 会在运行时解析并执行该 SQL 语句。
2. 基于 XML 配置的 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="cn.seaii.springboot.mapper.CategoryMapper">
<select id="get" resultType="cn.seaii.springboot.pojo.CategoryM">
SELECT * FROM category_ WHERE id= ${id}
</select>
</mapper>
在 XML 方式中,SQL 语句被写入独立的 mapper.xml
文件中,并通过 namespace
关联接口,实现 SQL 的分离管理。
上述代码中的 WHERE name= '${name}'
和 WHERE id= ${id}
直接拼接用户输入,可能导致 SQL 注入漏洞。
解决方案
应该使用 #{} 方式 绑定参数,避免 SQL 注入问题。
基于注解
@Mapper
public interface CategoryMapper {
@Select("SELECT * FROM category_ WHERE name= #{name}")
CategoryM getByName(@Param("name") String name);
}
基于 XML
<select id="get" resultType="cn.seaii.springboot.pojo.CategoryM">
SELECT * FROM category_ WHERE id = #{id}
</select>
这样,MyBatis 会自动 将参数作为占位符处理,避免 SQL 注入风险。