★学习目标:
掌握Mybatis中的<if>元素,能够熟练使用<if>判断元素
★思考任务:
<if>元素的作用是什么?
任务学习
★知识要点:
1.<if>元素的应用
在MyBatis中,<if>元素是最常用的判断元素,它类似于Java中的if语句,主要用于实现某些简单的条件判断。在实际应用中,我们可能会通过某个条件查询某个数据。例如,要查找某个客户的信息,可以通过姓名或者年龄来查找客户,也可以不填写年龄直接通过姓名来查找客户,还可以都不填写而查询出所有客户,此时姓名和年龄就是非必须条件。类似于这种情况,在MyBatis中就可以通过<if>元素来实现。
2.通过一个具体的案例演示单条件判断下<if>元素的使用,案例具体实现步骤如下。
数据库准备:在名称为mybatis的数据库中,创建一个t_customer表,并插入几条测试数据。
USE mybatis;
CREATE TABLE t_customer (
id int(32) PRIMARY KEY AUTO_INCREMENT,
username varchar(50),
jobs varchar(50),
phone varchar(16));
INSERT INTO t_customer VALUES ('1', 'joy', 'teacher', '13733333333');
INSERT INTO t_customer VALUES ('2', 'jack', 'teacher', '13522222222');
INSERT INTO t_customer VALUES ('3', 'tom', 'worker', '15111111111');
POJO类准备:在com.itheima.pojo包下创建持久化类Customer,在类中声明id、username、jobs和phone属性,及属性对应的getter/setter方法。
public class Customer {
private Integer id; private String username; // 主键ID、客户名称
private String jobs; private String phone; // 职业、电话
// 省略getter/setter方法
@Override
public String toString() {
return "Customer [id=" + id + ", username=" + username + ", jobs=" + jobs + ", phone=" + phone + "]"; }
}
创建映射文件:在项目com.itheima.mapper包下创建映射文件CustomerMapper.xml,在映射文件中,根据客户姓名和年龄组合条件查询客户信息,使用<if>元素编写该组合条件的动态SQL。
<!– 该xml文件中只列出了if元素的动态SQL-->
<if test="username !=null and username !=‘’“>
and username like concat('%',#{username}, '%’)
</if>
<if test="jobs !=null and jobs !=‘’“>
and jobs= #{jobs}
</if>
修改核心配置文件:在配置文件mybatis-config.xml中,引入CustomerMapper.xml映射文件,将CustomerMapper.xml映射文件加载到程序中。
<mapper
resource="com/itheima/mapper/CustomerMapper.xml">
</mapper>
创建获取SqlSession对象的工具类: 本案例使用2.3.7节的MyBatisUtils类作为获取SqlSession对象的工具类。首先在项目的src/main/java目录下创建一个com.itheima.utils包,然后将2.3.7节的MyBatisUtils类复制到该包下即可。
编写测试类:在测试类MyBatisTest中,编写测试方法findCustomerByNameAndJobsTest(),该方法用于根据客户姓名和职业组合条件查询客户信息列表。
public class MyBatisTest {
@Test
public void findCustomerByNameAndJobsTest(){SqlSession session = MyBatisUtils.getSession();Customer customer = new Customer();
customer.setUsername(“jack"); customer.setJobs("teacher");
List<Customer> customers = session.selectList("com.itheima.mapper"
+ ".CustomerMapper.findCustomerByNameAndJobs",customer);
for (Customer customer2 : customers) { System.out.println(customer2); }
session.close();}
}

