1、实体类
package com.qf.dynamic.sql;
import java.io.Serializable;
public class User implements Serializable{
private static final long serialVersionUID = 6003649279409157130L;
private int uId;
private String uName;
private String uPassword;
public User(int uId, String uName, String uPassword) {
super();
this.uId = uId;
this.uName = uName;
this.uPassword = uPassword;
}
public User() {
super();
}
public int getuId() {
return uId;
}
public void setuId(int uId) {
this.uId = uId;
}
public String getuName() {
return uName;
}
public void setuName(String uName) {
this.uName = uName;
}
public String getuPassword() {
return uPassword;
}
public void setuPassword(String uPassword) {
this.uPassword = uPassword;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "User [uId=" + uId + ", uName=" + uName + ", uPassword="
+ uPassword + "]";
}
}
2、Mapper.xml文件
<?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.qf.dynamic.sql.Test_001">
<insert id="add1">
insert into t_user(uName,uPassword) values('中国人','121');
</insert>
<!--动态sql的部分 传递数组过来 这里的类型不能写array list :这个只是表示的是传输过来的这个数据类型-->
<select id="findUserByIds" parameterType="list" resultType="com.qf.dynamic.sql.User">
select * from t_user
<!--这个地方应该判定的是 具体传输过来的这个对象 这个独享的民资不能随便写 只能是 array-->
<if test="array!=null">
where uId
<!--传递的是数组的话那么这里的名字是不能随便改的 array-->
<foreach collection="array" item="uId" open="in(" close=")" separator=",">
#{uId}
</foreach>
</if>
</select>
<!--需求:前端传递过来的值 可能有 uId 还可能有uName 还可能有 uPassword 也有可能都没有 实现组合查询-->
<select id="findUserZH" parameterType="com.qf.dynamic.sql.User" resultType="com.qf.dynamic.sql.User">
<!-- select * from t_user where uId=? and uName=? and uPassword=? -->
select * from t_user where 1=1
<if test="uId!=null">
and uId=#{uId}
</if>
<if test="uName!=''">
and uName=#{uName}
</if>
<if test="uPassword!=null">
and uPassword=#{uPassword}
</if>
</select>
<select id="findUserZH1" parameterType="com.qf.dynamic.sql.User" resultType="com.qf.dynamic.sql.User">
<!-- select * from t_user where uId=? and uName=? and uPassword=? -->
select * from t_user
<where>
1=1
<if test="uId!=null">
and uId=#{uId}
</if>
<if test="uName!=''">
and uName=#{uName}
</if>
<if test="uPassword!=null">
and uPassword=#{uPassword}
</if>
</where>
</select>
<select id="findUserZH2" parameterType="com.qf.dynamic.sql.User" resultType="com.qf.dynamic.sql.User">
<!-- select * from t_user where uId=? and uName=? and uPassword=? -->
select * from t_user
<!--调用的是SQL片段-->
<include refid="bobo"></include>
</select>
<!--sql片段 就相当于是一个方法一样在哪里都是可以调用-->
<sql id="bobo">
<where>
1=1
<if test="uId!=null">
and uId=#{uId}
</if>
<if test="uName!=''">
and uName=#{uName}
</if>
<if test="uPassword!=null">
and uPassword=#{uPassword}
</if>
</where>
</sql>
</mapper>
3、测试类
package com.qf.dynamic.sql;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import com.qf.ibatis.utils.JdbcUtils;
public class Test_001 {
// 获取的是当前的类的这个路径
private static final String NAME = Test_001.class.getName();
/**
* 添加数据
*
* @throws Exception
*/
@Test
public void testAdd() throws Exception {
// 获取的是Session
SqlSession sqlSession = JdbcUtils.getSqlSession();
int[] ids = { 1, 3, 5 };
// 调用
// List<User> users=sqlSession.selectList(NAME+".findUserByIds",ids);
User user = new User();
user.setuId(2);
user.setuName("小波波");
user.setuPassword("555");
List<User> users = sqlSession.selectList(NAME + ".findUserZH2", user);
System.out.println("获取到的数据是:" + users);
JdbcUtils.close();
}
}