mybatis-210718-04---映射文件_参数处理_取值_#&$

mybatis-210718-04—映射文件_参数处理_取值_#&$


取值案例

参考尚硅谷视频链接地址:
	https://www.bilibili.com/video/BV1mW411M737?p=22
	https://www.bilibili.com/video/BV1mW411M737?p=23
public Employee getEmp(@Param("id")Integer id,String lastName);
	取值:id--->#{id}或#{param1}		lastName--->#{param2}
	
public Employee getEmp(Integer id,@Param("e")Employee emp);
	取值:id--->#{param1}		lastName--->#{param2.lastName}或#{e.lastName}
	
	
注意:
	如果是Collection(List,Set)类型或是数组,
	也会特殊处理,也就是把传入的list或者数组封装在map中
		key:Collection(collection)
			如果是List还可以使用key(list),
			如果是数组还可以使用数组(array)

public Employee getEmp(List<Integer> ids);
	取值:
		取出第一个id值:id--->#{list[0]}

#{ } — ${ }取值

参考尚硅谷视频链接地址:
	https://www.bilibili.com/video/BV1mW411M737?p=24
#{ }:
	可以获取map中的值或者pojo对象属性的值

${ }:
	可以获取map中或者pojo对象属性的值
区别:
	#{ }:是以预编译的形式,将参数设置到sql语句中:PrepareStatement,防止sql注入
	${ }:取出的值直接拼接在sql语句中,会有安全问题

	多数情况下,取参数的值都该使用#{ }

使用${ }取值案例:
	原生jdbc不支持占位符的地方就可以使用${ }进行取值
	
	// 根据年份查看哪一年的年薪
	select * from ${year}_salary where xxx;
	
	select * from tbl_employee order by ${'根据哪个字段排'} ${'升序/降序'};

${ }可以出现在from后面,但是#{ }不行
	select * from ${tableName};

#{ }更丰富的用法

参考尚硅谷视频链接地址:
	https://www.bilibili.com/video/BV1mW411M737?p=25
规定了参数的一些用法:
	javaType、jdbcType、mode(存储过程)、numericScale、
	resultMap、typeHandler、jdbcTypeName、expression(未来准备支持的功能)
	
jdbcType通常需要在某种特定的条件下被设置:
	在我们数据为null的时候,有些数据可能不能识别mybatis对null的默认处理,比如Oracle(会报错)。
	
	jdbcType OTHER:无效的类型,因为mybatis对所有的null的映射的是原生jdbc的OTHER类型,
				   Oracle不能正确处理。
	
	由于全局配置中:jdbcTypeForNull=OTHER,Oracle不支持
	解决01:
		在EmployeeMapper.xml中配置,#{email,jdbcType=NULL}
		<insert id="addEmp" parameterType="com.bgy.mybatis.bean.Employee" 
  		useGeneratedKeys="true" keyProperty="id" databaseId="mysql">
  		insert into
  			tbl_employee(last_name,email,gender)
  		values (#{lastName},#{email,jdbcType=NULL},#{gender})
  		</insert>
  	
  	解决02:
  		在mybatis-config.xml全局配置中,<setting name="jdbcTypeForNull" value="NULL"/>
            <settings>
            	<setting name="jdbcTypeForNull" value="NULL"/>
            </settings>
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值