使用Mybatis实现条件查询


1、SQL映射文件,顶级元素配置
  mapper:映射文件的根元素节点,只有一个namespace(命名接口),用于区分不同mapper,全局唯一。绑定dao接口,即面向接口编程,当namespace绑定某一接口之后,可以不用写该接口的实现类。
  cache:配置给定命名空间的缓存
  cache-ref:从其他命名空间引用缓存配置。
  resultMap:用来描述数据库结果集和对象的对应关系
  sql:可以重用的SQL块,也可以被其他语句引用
  insert:映射插入语句
  update:映射更新语句
  delete:映射删除语句
  select:映射查询语句
  关于MyBatis的SQL映射文件中的mapper元素的namespace属性有以下要求:
  • namespace的命名必须跟某个DAO接口同名,同属于DAO层,映射文件与DAO接口应防放置在同一package下,并且习惯都是以Mapper结尾。
  • 在不同的mapper文件中,子元素的id可以相同,MyBatis通过namespace和子元素的id联合区分,接口中的方法与映射文件中SQL语句id应一一对应

2、使用select完成单条件查询

  <select id="getUserListByUserName" resultType="User" paramterType="string">

    select * from  user where userName like CONCAT ('%',#{userName},'%')

  </select>

  select元素属性
  id:命名空间中的唯一标识符,可以被用来引用这条语句
  parameterType:表示查询语句传入参数的类型的完全限定名或别名,它支持基础数据类型和复杂数据类型。在上面的例子中使用的是基础数据类
          型“string”,这是一个别名,代表String,属于一个内建的类 型别名。
  resultType:查询语句返回结果类型的完全限定名或别名。别名的使用方式与parameterType是一样的。
                            
别名与Java类型映射
  别名   映射类型   别名    映射类型

string

String double Double
byte Byte float Float
long Long boolean Boolean
short Short date Date
int Integer map Map
integer Integer hashmap HashMap
arraylist ArrayList list List

 

 

 

 

 

 

 

 

 

 

3、MyBaits多条件查询:
  3.1、parameterType传参类型可以为任何类型,该属性可以不写。当传入一个参数为基本数据类型时,可以通过#{}来获取传入的值,也可以通过#{下标}来
    获取,也可使用${value}获取。当传入 为多个基本数据类型时只能用#{下标}获取,下标从0开始。
  例:  
  接口:
    public List<User> getUserListByParam(String username,Integer roleId);
  Mapper映射文件:
    <select id="getUserListByParam" resultType="User" >
      select * from smbms_user where username like CONCAT('%',#{0},'%') and userRole=#{1}
    </select>
  3.2、使用实体类,将参数封装成对象传入。#{}中的参数名需要与对象的属性名一致。
  接口:
    public List<User> getUserListByUser(User user);
  Mapper映射文件:
    <select id="getUserListByUser" resultType="User" parameterType="User">
      select * from smbms_user where username like CONCAT('%',#{userName},'%') and userRole=#{userRole}
    </select>
  3.3、使用Map集合,将参数存入Map集合进行传递。#{}中参数名需要与Map集合中的键名一致
  接口:
    public List<User> getUserListByUserMap(Map<String, String> map);
  Mapper映射文件:
    <select id="getUserListByUserMap" resultType="User" 
parameterType="map">
      select * from smbms_user where username like CONCAT('%',#{userName},'%') and userRole=#{userRole}
    </select>
  3.4、使用@Param注解传递多个参数。使用@Param注解封装的参数小括号中参数名需要与#{}中参数名一致。
  接口:
    public List<User> getUserListByParam(@Param("userName")String username,@Param("userRole")Integer roleId);
  Mapper映射文件:
    <select id="getUserListByParam" resultType="User" >
      select * from smbms_user where username like CONCAT('%',#{userName},'%') and userRole=#{userRole}
    </select>
 
4、${}和#{}获取参数的区别
  4.1、#{}会将参数转化成String类型进行处理(特殊字符会进行转义),${}不会。
  4.2、使用#{}会进行预处理,也就是表示使用PreparedStatement进行执行SQL语句,可以有效的防止sql注入,但是${}不会。
  4.3、一般在进行排序order by的时候使用${},${value}(只有单个参数时使用${value}可以获取到参数值,多个参数依然使用对象属性或Map集合的键名)
  4.4、在能使用#{}的时候就不要去用${}。

  

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM