MyBatis——多条件查询

Posted AlexanderTheGreat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis——多条件查询相关的知识,希望对你有一定的参考价值。

beans包

package cn.alexander.beans;

/**
 * Created by Shinelon on 2017/10/6.
 */
public class Student {
    private Integer id;
    private String name;
    private Integer age;

    public Student() {
    }

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public Student(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ‘}‘;
    }
}

dao包中

package cn.alexander.dao;

import cn.alexander.beans.Student;

import java.util.List;
import java.util.Map;

/**
 * Created by Shinelon on 2017/10/6.
 */
public interface IStudentDao {
    /**
     * 如果前台表单中给出的查询条件不能封装成一个对象的时候
     * 我们可以使用三种方式来解决这个我问题!
     * 01、把查询条件  封装成map
     *     使用map 查询姓名中带 小  并且年龄大于12的学生信息
     * 02、使用map 查询姓名中带小,年龄大于12,并且id大于小白id的学生信息
     *
     */
    List<Student> selectStudentByMap(Map<String,Object> map);
    /**
     * 第二种方式
     *     查询姓名中带 小  并且年龄大于12的学生信息
     */
    List<Student> selectStudentByCondition(String name,int age);
}

util包中

package cn.alexander.util;

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 java.io.IOException;
import java.io.InputStream;

/**
 * SqlSessionFactory的单例类
 */
public class SessionFactoryUtil {
    // 创建需要单例的对象实例
    private static SqlSessionFactory sessionFactory;

    // 私有化构造
    private SessionFactoryUtil(){}

    // 对外提供访问接口
    public static synchronized SqlSession getSession(){
        try {
            InputStream stream = Resources.getResourceAsStream("mybatis-config.xml");
            // 判断SqlSessionFactory是否为空,如果为空则创建
            if(sessionFactory==null){
                sessionFactory = new SqlSessionFactoryBuilder().build(stream);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return sessionFactory.openSession();
    }


}

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">
<!--映射文件的根节点
  namespace
-->
<mapper namespace="cn.alexander.dao.IStudentDao">
    <!--
        我们在前台表单中,有三个输入框,用户输入几个我们不知道 testMap1
    -->
    <!--<select id="selectStudentByMap" resultType="cn.alexander.beans.Student">
        select id,name,age from student_mybatis
        where name like concat(‘%‘,#{stuName},‘%‘)
        and age>#{stuAge}
    </select>-->
    <!--   testMap2   -->
    <select id="selectStudentByMap" resultType="cn.alexander.beans.Student">
        select id,name,age from student_mybatis
        where name like concat(‘%‘,#{stuName},‘%‘)
        and age>#{stuAge}
        and id>#{stu.id}
    </select>

    <!-- 按照参数的个数进行封装 -->
    <select id="selectStudentByCondition" resultType="cn.alexander.beans.Student">
        select id,name,age from student_mybatis
        where name like concat(‘%‘,#{0},‘%‘)
        and age>#{1}
    </select>

</mapper>

 

以上是关于MyBatis——多条件查询的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis关联查询多条件查询

使用mybatis框架实现带条件查询-多条件

MyBatis模糊查询和多条件查询

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

mybatis中的多条件查询

MyBatis_多查询条件问题