Spring: MyBatis
@Mapper,最终 Mybatis 会有一个拦截器,会自动的把 @Mapper 注解的接口生成动态代理类。
当然,前提是,映射器(Mapper.xml)必须满足动态代理的条件:
1.namespace与接口的全限定类名相同
2.id名与接口中方法名一致
<?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">namespace="us.transcode.thymeleaf.dao.EmployeeDao"> "insertOne" parameterType="Employee" keyProperty="id" useGeneratedKeys="true"> INSERT INTO thymeleaf.employee <select id="selectOneById" parameterType="Integer" resultType="Employee"> SELECT id, username, birthday, salary, photo FROM thymeleaf.employee WHERE id = #{id} select> <select id="selectAll" resultType="Employee"> SELECT id, username, birthday, salary, photo FROM thymeleaf.employee select>"(" suffix=")" suffixOverrides=","> <if test="id!=null"> id, if> <if test="username!=null and username!=''"> username, if> <if test="birthday!=null"> birthday, if> <if test="salary!=null"> salary, if> <if test="photo!=null and photo!=''"> photo, if> VALUES"(" suffix=")" suffixOverrides=","> <if test="id!=null"> "${id}", if> <if test="username!=null and username!=''"> #{username}, if> <if test="birthday!=null"> #{birthday}, if> <if test="salary!=null"> #{salary}, if> <if test="photo!=null and photo!=''"> #{photo}, if> "updateById" parameterType="Employee"> UPDATE thymeleaf.employee <set> <if test="username!=null and username!=''"> username=#{username}, if> <if test="birthday!=null"> birthday=#{birthday}, if> <if test="salary!=null"> salary=#{salary}, if> <if test="photo!=null and photo!=''"> photo=#{photo}, if> set> WHERE id=#{id} "deleteOneById" parameterType="Integer"> DELETE FROM thymeleaf.employee WHERE id = #{id}