1、动态代理的理解
动态代理就是只有接口,没有实现类。
2、数据层的核心只有:输入(类型)、输出(类型)、要执行的sql语句
所以,mybatis 动态代理模式简化了很多代码,只关注和保留了这三点。
只保留了个Dao 接口和sql语句文件,并保证Dao接口中的输入、返回类型和 sql 语句一致;sql语句的id名和多对应放入Dao方法名一致。
3、Mybatis中 sql语句数据的传递
(1)传递单个参数
public interface UsertMapper {
void deleteUser(String id);
}
sql文件
<delete id="deleteUser" parameterType="int">
DELETE FROM `user` WHERE `id` = #{id}
</delete>
(2)传递java实体类
public interface UsertMapper {
void updateUser(User user);
}
sql文件
<update id="updateUser" parameterType="com.itheima.mybatis.pojo.User">
UPDATE USER SET username = #{username} WHERE id = #{id}
</update>
使用实体类中的值:#{}或者${}括号中的值为传进来的实体类所带的属性名称。
如: # { name } 即使用传进来实体类 user 所带的 name 属性值
(3)传递包装的 Java 实体类
包装的实体类,里面只包装了一个User实体类
public class QueryVo {
//用户对象
private User user;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
Mapper
public interface UsertMapper {
List <User> getUserByQueryVo (QueryVo queryvo);
}
sql文件
<select id="getUserByQueryVo" parameterType="queryvo" resultType="com.itheima.mybatis.pojo.User">
<!-- SELECT * FROM USER WHERE username LIKE #{name} -->
SELECT * FROM USER WHERE username LIKE '%${user.username}%'
</select>
使用包装类中的值:#{}或者${}括号中的值为传进来的包类所带的实体类属性或所带实体类属性所带的属性。
如:# {user} 即使用包装类vo 所带的 user对象
# {user.name } 即使用包装类vo 所带的 user对所带的name 属性