MyBatis 通過 JDK 動態代理為 Mapper 接口生成實現類,SQL 定義在 XML 中,運行時根據**方法名、參數類型、返回類型**與 XML 中的 `
| 規範項 | 要求 | 示例 |
|---|---|---|
| Namespace | 等於 Mapper 接口全限定名 | namespace="com.demo.mapper.UserMapper" |
| Statement ID | 等於接口方法名 | id="findUserById" |
| ParameterType | 與方法參數類型一致 | parameterType="int" / parameterType="User" |
| ResultType/ResultMap | 與方法返回類型一致 | resultType="User" / resultMap="UserMap" |
// UserMapper.java
public interface UserMapper {
User findUserById(int id); // 單參數
List findUsersByName(String name); // 單參數集合返回
int insertUser(User user); // POJO 參數
int updateUser(User user); // POJO 參數
void deleteUser(int id); // void 返回
}
<mapper namespace="com.demo.mapper.UserMapper">
<select id="findUserById" parameterType="int" resultType="User">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="findUsersByName" parameterType="String" resultType="User">
SELECT * FROM user WHERE name LIKE CONCAT('%', #{name}, '%')
</select>
<insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user(name, age) VALUES(#{name}, #{age})
</insert>
<update id="updateUser" parameterType="User">
UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
<mappers>
<mapper class="com.demo.mapper.UserMapper"/>
</mappers>
<mappers>
<package name="com.demo.mapper"/>
</mappers>
前提:Mapper 接口與 XML 同名、同目錄(或 resources 對應目錄)。
ListXML 直接用findByNameAndAge(@Param("name") String name, @Param("age") int age);
#{name}, #{age}
Map,XML 取值同 key