parameterType一共有三种类型:简单类型、对象类型、嵌套对象类型
1. 简单类型(8个基本数据类型+String)
两个取值符号:
#{} : 这里面可以是任意的字段—— #{任意字段}
${} : 这里面必须是value —— ${value}
都可以获取对象的值
1.1
#{}会自动给string类型加上 ’ ’ (自动类型转换)
但是 ${}是原样输出,适用于动态排序(动态字段)
1.2
#{}进行模糊查询时,要在java代码中,将输入的参数处理成
“%参数%”
${}进行模糊查询,需要在mapper文件中,’ % ${参数} % ’
1.3
#{}可以防止sql注入
${}不防止
1.1举例
静态排序是在sql语句中写明了按照哪一列的升序或降序排列
select id,name,sex from student order by id desc
动态排序
select * from student order by ${value} desc
如果此处写的是
select * from student order by #{id} desc
则value传值过来后其实是
select * from student order by 'id' desc
'id’是一个常量,这样程序运行的结果可能会出错。
1.2 举例
方式一
sql语句
select stuno,stuname,stuage from student where stuage= #{stuAge} or stuname like #{stuName}
java方法
Student student = new Student();
student.setStuAge(24);
student.setStuName("%w%");
List<Student> students = studentMapper.queryStudentBystuageOrstuName(student) ;//接口的方法->SQL
方式二
java方法
student.setStuName("w");
sql语句
select stuno,stuname,stuage from student where stuage= #{stuAge} or stuname like '%${stuName}%'
2. 对象类型
#{} 里要写属性名,大小写也要一致——#{属性名}
${} 也一样—— ${属性名}
3.嵌套对象类型
新添一个Address类,两个成员homeAddress和schoolAddress。
在表中添加两列 homeAddress和schoolAddress。
在student类中加一个成员,数据类型为Address ,成员名为address。
当参数类型为嵌套对象类型时,
<!-- 输入参数为嵌套对象类型-->
<select id="selectByAddress" parameterType="one.Student" resultType="one.Student">
select * from student where homeAddress=#{address.homeAddress} or schoolAddress like '%${address.schoolAddress}%'
</select>
上面的代码中,输入参数类型为student,homeAddress和schoolAddress是Address类中的成员,而student类中又有Address类型的address成员,所以也属于是student的成员变量。
所以#{}和${}里要先写address再写homeAddress和schoolAddress
接口
List<Student> selectByAddress(Student address);
java方法
public static void selectByAddress()throws IOException {
Reader reader = Resources.getResourceAsReader("conf.xml");
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sessionFactory.openSession();
StudentMapper studentMapper=session.getMapper(StudentMapper.class);
Student student=new Student();
Address address=new Address();
address.setHomeAddress("xa");
address.setSchoolAddress("y");
student.setAddress(address);
List<Student> students=studentMapper.selectByAddress(student);
System.out.println(students);
session.close();
}
查询结果