<if>条件标签
Where 1=1
满足条件直接后面拼接
不满足条件执行1=1 表示全部查询
语法结构:
<if></if> test<条件>
案例如下:
后台数据库:
建一个student表
数据
java类编写:
创建数据表student的实体类:()
public class Student {
private int stuId;
private String stuName;
private Date stuBirthdate;
private String stuPhone;
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public Date getStuBirthdate() {
return stuBirthdate;
}
public void setStuBirthdate(Date stuBirthdate) {
this.stuBirthdate = stuBirthdate;
}
public String getStuPhone() {
return stuPhone;
}
public void setStuPhone(String stuPhone) {
this.stuPhone = stuPhone;
}
public String toString() {
return "学生信息:Student [stuId=" + stuId + ", stuName=" + stuName + ", stuBirthdate=" + stuBirthdate + ", stuPhone="
+ stuPhone + "]";
}
}
创建接口StudentMapper接口
实现接口方法queryByCondition()
public List<Student> queryByCondition(Student student);
创建StudentMapper接口的映射文件
<?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="cn.mybatis.domain.StudentMapper">
<resultMap id="studentResultMap" type="cn.mybatis.domain.Student">
<id column="stu_id" property="stuId" jdbcType="INTEGER" javaType="java.lang.Integer"></id>
<result column="stu_name" property="stuName" jdbcType="VARCHAR" javaType="java.lang.String"></result>
<result column="stu_birthdate" property="stuBirthdate" jdbcType="DATE" javaType="java.util.Date"></result>
<result column="stu_phone" property="stuPhone" jdbcType="VARCHAR" javaType="java.lang.String"></result>
</resultMap>
<!-- 动态SQL语句if元素的使用 -->
<select id="queryByCondition" parameterType="cn.mybatis.domain.Student" resultMap="studentResultMap">
select * from student
where 1=1
<if test="stuName!=null and stuName!=''">
and stu_name=#{stuName}
</if>
</select>
</mapper>
封装MyBatis工厂
public class MyBatisUtil {
private static SqlSessionFactory factory;
static {//在静态代码块中,factory只会被创建一次
try {
InputStream is=Resources.getResourceAsStream("SqlMapConfig.xml");
factory=new SqlSessionFactoryBuilder().build(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//创建SqlSession
public static SqlSession createSqlSession() {
return factory.openSession(false); //如果为true自动提交事务
}
//关闭会话
public static void closeSqlSession(SqlSession sqlSession) {
if(sqlSession!=null)
sqlSession.close();
}
}
配置数据源、指定映射文件路径
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 环境管理,可以配置多个环境 -->
<environments default="development">
<environment id="development">
<!-- 事务管理方式 -->
<transactionManager type="JDBC"/>
<!-- 数据源 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/chapter02"></property>
<property name="username" value="root"></property>
<property name="password" value="qPb12345"></property>
</dataSource>
</environment>
</environments>
<!-- 指定映射文件路径 -->
<mappers>
<mapper resource="cn/mybatis/domain/StudentMapper.xml"></mapper>
</mappers>
</configuration>
创建测试类Test:
public class Test {
public static void main(String[] args) throws Exception{
SqlSession session=MyBatisUtil.createSqlSession();
Student student= new Student();
student.setStuName("Jeeny");
try {
//调用接口方法来实现数据的插入
List<Student> slist=session.getMapper(StudentMapper.class).queryByCondition(student);
for(Student stu:slist){
System.out.println(stu.toString());
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("查询失败!");
}finally {
session.close();//关闭会话
// MyBatisUtil.closeSqlSession(session);
}
}
}
结果展示:
每天进步多一点--------飞奔的驴友