#动态SQL 拼接
可以根据具体的参数条件,来对SQL语句进行动态拼接
#xml方式实现
数据库添加两个字段age 和phone和对应的数据,age为int 类型,phone为varchar类型
定义一个接口UserDao3
package com.mu.dao;
import com.mu.pojo.User;
import java.util.Map;
import java.util.List;
public interface UserDao3 {
//使用Map方式可以传递多个参数
//if标签
List<User> iftest(Map map);
//where标签
List<User> ifwhere(Map map);
//choose标签
List<User> ifchoose(Map map);
//set标签
void ifset(Map map);
//foreach标签
void ifforeach1(List list);
List<User> ifforeach2(Map map);
//include标签(SQL片段引用)
List<User> ifinclude();
}
编写接口的UserMapper3文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace= "com.mu.dao.UserDao3">
<!--这里添加各示例SQL-->
</mapper>
全局配置文件mybatis-config中加载UserMapper3.xml
新增一个测试类
package com.mu;
import com.mu.dao.UserDao3;
import com.mu.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class MyTest2 {
private SqlSessionFactory sqlSessionFactory;
@Before
public void init() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//下一步在这里添加各示例测试
}
##if
if 标签通常用于 WHERE 语句、UPDATE 语句、INSERT 语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值。
当满足test条件时,才会将标签内的SQL语句拼接上去
mapper3文件中加入
<!-- if示例
需求:根据年龄和电话号码查询id大于3的用户,如果年龄不为空按年龄查询,电话号码不为空按电话号码查询,如果两者都不为空则组合查询
-->
<select id="iftest" resultType="com.mu.pojo.User" parameterType="map">
SELECT * FROM user WHERE id>3
<if test="age!= null ">
AND age = #{
age}
</if>
<if test="phone!= null and phone !='' ">
AND phone = #{
phone}
</if>
</select>
添加测试
//在这里添加各示例测试
@Test
public void Test() {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao3 mapper = sqlSession.getMapper