zoukankan      html  css  js  c++  java
  • MyBatis动态SQL与模糊查询

    sqlxml

    <?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="PersonCondition">
      <!--<where>可以自动去掉后面的第一个and-->
    <select id="selectPersonByCondition" parameterType="person" resultMap="BaseResultMap">
    select * from person t
    <where>
          <if test="name != null">
            name like '%${name}%'
          </if>
          <if test="gender != null">
            and gender = #{gender}
          </if>
          <if test="birthday !=null">
            <![CDATA[
            and birthday > #{birthday}
            ]]>
          </if>
         </where>
    </select>
      <!--set标签-->
      <update id="dynamicUpdate" parameterType="person">
        update person t
        <set>
          t.person_id = #{personId},
          <if test="name != null">
            name =#{name},
          </if>
          <if test="gender != null">
             gender = #{gender},
          </if>
          <if test="birthday !=null">
             birthday = #{birthday}
          </if>
        </set>
      </update>
      <!--foreach标签
        map.put("ids",Integer[])
        foreach 遍历集合来组装sql
        collection: map中集合的key
        open:以某种字符开始
        close: 以某种字符结束
        item:集合中的元素
        separator: 以某种字符分隔
        index:当前遍历的索引号
      -->
      <select id="selectPersonByIn" parmameterType="map" resultMap="BaseResultMap">
        select * from person where t.person_id in
        <foreach collection="ids" open="(" close=")" item="pId" separator="," index="indx">
          #{pId}
        </foreach>
      </select>
      <!--mysql中可以实现批量插入输入,insert into person() values (1..),(2..)-->
      <insert id="insertBatch" parameterType="map">
        insert into person (name,gender,addr,birthday)
        values
        <foreach collection="pList" separator="," item="person">
          (#{person.name},#{person.gender},#{person.addr},#{person.birthday})
        </foreach>
      </insert>
    <!-- 实现多条件查询,姓名模糊匹配,年龄在最大最小值之间 --> <select id="getPerson" parameterType="com.stone.bean.ConditionPerson" resultType="com.stone.bean.Person"> select * from person where <if test='name !="%null%"'> name like #{name} and </if> age between #{minAge} and #{maxAge} </select> </mapper>

    condition java bean

    package com.stone.bean;
    
    public class ConditionPerson {
        private String name;
        private int minAge;
        private int maxAge;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getMinAge() {
            return minAge;
        }
        public void setMinAge(int minAge) {
            this.minAge = minAge;
        }
        public int getMaxAge() {
            return maxAge;
        }
        public void setMaxAge(int maxAge) {
            this.maxAge = maxAge;
        }
        public ConditionPerson(String name, int minAge, int maxAge) {
            super();
            this.name = name;
            this.minAge = minAge;
            this.maxAge = maxAge;
        }
        public ConditionPerson() {
            super();
        }
        @Override
        public String toString() {
            return "ConditionPerson [name=" + name + ", minAge=" + minAge
                    + ", maxAge=" + maxAge + "]";
        }
        
    }

    java bean

    package com.stone.bean;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    public class Person {
    
        private int id;
        private String name;
        private Date birthday;
        private int age;
        
        
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    
        @Override
        public String toString() {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd HH:mm:SS");
            return "Person [id=" + id + ", name=" + name + ", birthday="
                    + dateFormat.format(birthday) + "]";
        }
    
    }

    test

    package com.stone.dao;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    
    import com.stone.bean.ConditionPerson;
    import com.stone.bean.Person;
    import com.stone.db.DBAccess;
    
    public class DBDaoPerson {
    
        public static void main(String[] args) {
            DBAccess dbAccess = new DBAccess();
            SqlSession sqlSession = null;
            try {
                sqlSession = dbAccess.getSqlSession();
                String statement = "PersonCondition.getPerson";
                ConditionPerson parameter = new ConditionPerson("%a%", 11, 18);
                // 通过sqlSession执行SQL语句;
                List<Person> list = sqlSession.selectList(statement, parameter);
                System.out.println(list);
                System.out.println("=======================");
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (sqlSession != null) {
                    sqlSession.close();
                }
            }
        }
    
    }
  • 相关阅读:
    VB已死?还是会在Roslyn之下焕发新生?
    GitHub在Visual Studio 2015中获得TFS/VSO同等地位
    单体应用与微服务优缺点辨析
    对于JavaScript的函数.NET开发人员应该知道的11件事
    TypeScript 1.5 Beta带来修饰元数据支持
    Visual Studio 2015 RC中的ASP.NET新特性和问题修正
    Visual Studio从此走入非Windows程序猿家
    Azure DocumentDB对比MongoDB
    正确理解DTO、值对象和POCO
    大数据技术之_19_Spark学习_05_Spark GraphX 应用解析小结
  • 原文地址:https://www.cnblogs.com/stono/p/4479757.html
Copyright © 2011-2022 走看看