Mybatis入门(五)两种取值符号与parameterType的不同类型

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();
}

查询结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值