使用注解开发可以完全省略掉XXXMapper.xml
文件
UserMapper(接口)
1 | public interface UserMapper { |
Test.java:
1 | public class UserMapperTest { |
注解开发的底层实现是应用反射。
但是这个例子中有个问题,实体类中是password但是数据库字段为pwd,获取数据时,pwd会为null,所以官网上说注解开发只适用于简单场景,如果场景复杂还是建议xml
#与$的区别
#{} 的作用主要是替换预编译语句(PrepareStatement)中的占位符?:
对于 : INSERT INTO user (name) VALUES (#{name}); ==> INSERT INTO user (name) VALUES (?);
${} 符号的作用是直接进行字符串替换:
对于 : INSERT INTO user (name) VALUES (‘${name}’); ==> INSERT INTO user (name) VALUES (‘tianshozhi’);
为了防止SQL注入,建议使用#{}.
关于@Param()注解
- 基本类型的参数或者String类型,需要加上
- 引用类型不需加
- 如果只有一个基本类型的话,可以忽略,但是建议大家都加上
- 我们在SQL中引用的就是我们这里@Param()中设定的属性名
例如1
2@Select("select * from user where id = #{id}")
User getUserById(@Param("id") int id);
如果吧@Param改成(“id2”),上面的#{}也要改:
1 | @Select("select * from user where id = #{id2}") |