mybatis通用多条件动态查询,mybatis实现一对多查询的几种方式

  mybatis通用多条件动态查询,mybatis实现一对多查询的几种方式

  00-1010实现多个控制条件查询,扩展知识,实现多个简单查询,当数据库的字段名与实体类的属性名不一致时,实现多个复杂查询。MyBatis条件查询概述1.if条件语句2 .选择(当其他)4。in 5的用法。模糊查询

  

目录

 

  

实现多个控制条件查询

1.给包起别名用typeAliases标签

 

  type aliases type alias type=" MybatiesAnimal。动物" alias="animal"/!-指定实体类在哪个包中-package name=" mybatiesanimal "//type aliases2.在mappers中通过package标签引Mapper.xml

  如果要使用package直接引入所有mapper/xml,需要将接口和xml放在一个包中。

  00-1010操作步骤如下:

  1.在Mapper.xml中输入要查询的SQL语句

  2.接口文件中参数用@Param接

  声明如下:

  public List selAnimalBy(@ Param(" NAME ")String a,@ Param(" kind ")String b);如果传递两个java简单类型,需要用@ param ("name ")指定参数名

  3.text文档中输出

  声明如下:

  list animal animal 1=SQL session . get mapper(animal mapper . class)。Selanimal by(《老虎》、《猫》);system . out . println(animal 1);

  00-1010因为数据库命名的多个单词用下划线连接,而Java命名规则是第二个字母大写,所以命名规则不一样,需要传递值。

  方法一:修改SQL语句

  从动物别名a_sid中选择a_sid sid、种类、数量、地址、名称作为sid。

  xml语句修改如下:

  方法二:通过配置resultMap标签

  原始查询语句3360

  select id=" selanimalby " result type=" animal " select * from animal where name=# { name } and kind=# { kind }/select修改为:

  

扩展知识

例如:查询动物列表中猫科中包含虎字段的数据

 

  SQL语句是:

  select * from animal where 1=1 and kind=" cat " and name like % tiger % 1.配置xml中的select标签.

  如下图:

  2.添加接口中的执行语句

  公共列表动物selCon(动物动物);3.text文档检验结果

  动物动物1=新动物

  l();animal1.setKind(“猫科”);animal1.setName(“虎”);List< Animal>animal2=sqlsession.getMapper(AnimalMapper.class).selCon(animal1);System.out.println(animal2);输出结果如下:

  

 

  

 

  

MyBatis条件查询总结

 

  

1.if条件语句

<!-- if(判断参数) - 将实体类不为空的属性作为where条件 --> <select id="getStudentList_if" resultMap="resultMap_studentEntity" parameterType="liming.student.manager.data.model.StudentEntity"> SELECT ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX, ST.STUDENT_BIRTHDAY, ST.STUDENT_PHOTO, ST.CLASS_ID, ST.PLACE_ID FROM STUDENT_TBL ST WHERE <if test="studentName !=null "> ST.STUDENT_NAME LIKE CONCAT(CONCAT(%, #{studentName, jdbcType=VARCHAR}),%) </if> <if test="studentSex != null and studentSex != "> AND ST.STUDENT_SEX = #{studentSex, jdbcType=INTEGER} </if> <if test="studentBirthday != null "> AND ST.STUDENT_BIRTHDAY = #{studentBirthday, jdbcType=DATE} </if> <if test="classId != null and classId!= "> AND ST.CLASS_ID = #{classId, jdbcType=VARCHAR} </if> <if test="classEntity != null and classEntity.classId !=null and classEntity.classId != "> AND ST.CLASS_ID = #{classEntity.classId, jdbcType=VARCHAR} </if> <if test="placeId != null and placeId != "> AND ST.PLACE_ID = #{placeId, jdbcType=VARCHAR} </if> <if test="placeEntity != null and placeEntity.placeId != null and placeEntity.placeId != "> AND ST.PLACE_ID = #{placeEntity.placeId, jdbcType=VARCHAR} </if> <if test="studentId != null and studentId != "> AND ST.STUDENT_ID = #{studentId, jdbcType=VARCHAR} </if> </select>

 

  

2.choose (when otherwise)

<!-- choose(判断参数) - 按顺序将实体类 User 第一个不为空的属性作为:where条件 --> <select id="getUserList_choose" resultMap="resultMap_user" parameterType="com.yiibai.pojo.User"> SELECT * FROM User u <where> <choose> <when test="username !=null "> u.username LIKE CONCAT(CONCAT(%, #{username, jdbcType=VARCHAR}),%) </when > <when test="sex != null and sex != "> AND u.sex = #{sex, jdbcType=INTEGER} </when > <when test="birthday != null "> AND u.birthday = #{birthday, jdbcType=DATE} </when > <otherwise> </otherwise> </choose> </where> </select>
<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog"> select * from t_blog where 1 = 1 <choose> <when test="title != null"> and title = #{title} </when> <when test="content != null"> and content = #{content} </when> <otherwise> and owner = "owner1" </otherwise> </choose></select>

 

  

4.in的用法

    <select id="getNewListByLabelID" resultMap="BaseResultMap" parameterType="arraylist">        SELECT        <include refid="Base_Column_List"/>        FROM tb_problem        WHERE id IN        <foreach collection="ids" index="index" item="id" separator="," close=")" open="(">            #{id}        </foreach>    </select>

还可以这样

 

  

<select id="queryAllOpenProduct" parameterType="com.tims.open.domain.OpenProductQueryCondition"    resultType="com.tims.open.domain.OpenProduct">    SELECT         *    FROM        product_db.product p    WHERE        p.isvalid = 1    <if test="list != null">        <foreach collection="list" index="index" item="item" separator="," open="AND p.id IN (" close=")">               #{item}        </foreach>    </if></select>//查询condition类Public OpenProductQueryCondition{    private Integer productId;      private List<Integer> list;}

 

  

5.模糊查询

<!-- ******************** 模糊查询的常用的3种方式:********************* -->    <select id="getUsersByFuzzyQuery" parameterType="User" resultType="User">        select <include refid="columns"/> from users        <where>            <!--                方法一: 直接使用 % 拼接字符串                 注意:此处不能写成  "%#{name}%" ,#{name}就成了字符串的一部分,                会发生这样一个异常: The error occurred while setting parameters,                应该写成: "%"#{name}"%",即#{name}是一个整体,前后加上%            -->            <if test="name != null">                name like "%"#{name}"%"            </if>            <!--方法二: 使用concat(str1,str2)函数将两个参数连接 -->            <if test="phone != null">                and phone like concat(concat("%",#{phone}),"%")            </if>            <!--方法三: 使用 bind 标签,对字符串进行绑定,然后对绑定后的字符串使用 like 关键字进行模糊查询 -->            <if test="email != null">                <bind name="pattern" value="%+email+%"/>                and email like #{pattern}            </if>        </where>    </select>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行IT。

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: