在初始开发学习中,我们经常要求数据库表的字段名称和实体类对应属性的名称必须相同,原因就是这样便于底层的结果封装,但是当我们在实际开发中如果实体类和数据库不一致,就会产生结果全为null的情况,原因就是由于对应字段不一致所以没有将属性封装进去,这时我们就需要人为地指明映射关系。
(1)#传参:预编译处理,类似于之前学习jdbc时候的 ?占位符,提交的字符只会被当作当前sql语句的参数处理,不会改变原sql语句的含义,会在实际传入的值前后加引号
(2)$传参: 直接传参,参数会被直接拼接到sql语句中,不会在实际传入的值前后加引号,会改变原sql语句的含义引发sql注入问题
# select * from tb_student order by "stu_age";
$ select * from tb_student order by stu_age;
传参方式总结: 能用 # 用# ,用不了#用$
(1)在传递单个基本类型的参数时#{}取参数的命名可以任意,他只表示一个占位符;而${}取参数只能使用
public List findAllOrderBy(@Param("orderBy") String orderBy);
(2)传递单个对象类型参数时,#{}和${}内都可以填写对象的相应属性名直接取参。但如果使用@Param()注解,则{}都必须使用 注解映射名.属性名 的形式进行取参。
public User findUserByUserName(@Param("newuser") User uname);
public List findAllOrderBy(@Param("orderBy") User orderBy);
(1)使用下标传参
#{}里面的数字代表你传入参数的顺序。由于是多参数那么就不能使用parameterType, 改用#{index}是第几个就用第几个的索引,索引从0开始
public List getXXXBeanList(String xxId, String xxCode);
(2)使用Param注解传参
以前在
public AddrInfo getAddrInfo(@Param("corpId")int corpId, @Param("addrId")int addrId);
1.
2.
1.在注册映射文件时使用
2.在注册映射文件时使用
3.在注册映射文件时使用