zoukankan      html  css  js  c++  java
  • mybatis入门系列二之输入与输出参数

    mybatis入门系列二之详解输入与输出参数

    基础知识

     
    mybatis规定mapp.xml中每一个SQL语句形式上只能有一个@parameterType和一个@resultType
    1、 返回值是一个对象的集合,@resultType中只能写该对象的类型,而不是写list<T>
    2、 输入参数可以用#{}和${}两种取值方法,两者区别与联系:

    1、 当传入类型为JDBC基本类型(8种java基本类型+String)时,#{}里面可以写成任意值,${}里面必须写value  
    
    2、 当传入类型为对象时,两种方式里面都应该写成类中属性名
    
    3、 #{}方式传值会将传入的值当做一个字符串处理,会自动将其加入"",而${}方式则不会  
    
    4、 #{}方式能够有效防止SQL注入,而${}不会,因此能够用#{}就不要用${}
    
    5、 ${}的适用场景是利用数据库中的字段动态排序等例如想要根据id排序  
    如果用#{}传入id,SQL语句会变成order by "id"这样的SQL语句不能排序,  
    因此只能用${},对应的SQL语句是order by id符合要求
    
    

    输入参数@parameterType

    输入参数为基本类型

    当输入参数为JDBC基本类型,则可以直接用#{xxx}或者${value}取值
     

    输入参数为对象

    当输入参数为对象时,则可以用#{属性名}或者${属性名}取值
     

    输入参数为HashMap

    则#{key}即可取得该key对应的value

    <select id="queryStudentBystuageOrstuNameWithHashMap" 	parameterType="HashMap"	resultType="student" > 
    		select stuno,stuname,stuage  from student
    		where stuage= #{stuAge}  or stuname like '%${stuName}%' 
    <select/>
    

    输出参数@resultType

    输出参数为JDBC基本数据类型

    直接写输出类型

    输出参数为类对象(或者类对象的集合)

    这时要求数据库中的属性名、属性类型要与类对象能够对应

    输出参数为HashMap

    <!-- 别名作为Map的key -->
    	<select id="queryStudentOutByHashMap"  resultType="HashMap" >
    		select stuno "no",stuname "name" from student    where stuno=1
    	<select/>
    
    
    HashMap<String,Object> studentMap = studentMapper.queryStudentOutByHashMap();
    System.out.println(studentMap.get(no));
    

    输出参数为广义类对象,但是属性名或者属性类型不能对应

    例如数据库person表中属性为int id,varchar(20) name
    对应的实体类属性为int num,varchar(20) name
    若直接查询select * from person会报错
     

    解决方法一:resultMap(适用于属性名或者属性类型不同且不能自动转换)

    以下示例为属性名不同,属性类型不同且不能自动转换应该自定义类型转换器,会单独开文章介绍

    <select id="XXX" @resultMap="queryWithResultmap">
    select id,name from person 
    <select/>
    <resultMap type = "person" id="queryWithResultmap">
    	<!-- 指定实体类属性与数据库属性之间的关系,主键用id标签,非主属性用result属性-->
    	<id property="num",column="id">
    	<result property="name" column="name">
    </resultMap>
    

    解决方法二:resultType+HashMap(适用于属性名不同)

    <select id="XXX" @resulttype="person">
    	select id "num", name "name" from person 
    </select>
    
    
  • 相关阅读:
    微信公众号自定义菜单创建方法
    Oracle数据库导入导出
    关于vs启动调试报错:CS0016: 未能写入输出文件“xxxxxxxx”--“目录名称无效。”解决方法
    Window Server 2012无线网卡和声卡驱动解决方法
    NodeJS下载文件实例
    MSSQL大全
    SQL函数介绍
    SQLite语法
    Curl简单使用
    Python中的argparse模块的使用
  • 原文地址:https://www.cnblogs.com/huanglf714/p/10770387.html
Copyright © 2011-2022 走看看