(八)Mybatis当中#{}常用属性的用法

这篇文章主要讲述Mybatis当中#{}常用属性的用法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

#{}占位符的属性

这是他的一些属性,当然本篇文章重点讲解在开发当中我们会用到的一些属性。

javaType、 jdbcType、 mode(存储过程)、 numericScale、
resultMap、 typeHandler、 jdbcTypeName、 expression(未来准备支持的功能);

用法#{age ,jdbcType=TINYINT ,javaType=short}

javaType

通常可以从参数对象中来去确定,这个属性一般很少使用。
如果用的eclipse可以全局搜ctrl+shift+t 搜索JdbcType
这个就是xml当中传值类型映射关系,也就是java当中的类型和jdbc的属性关系。

jdbcType

如果用的orcle数据库假如数据传值为Null的时候就会报错,这个时候可以通过设置这个来进行避免报错。
代码示例:
这是一个新增返回主键的Orcle示例

<insert id="addEmp" databaseId="oracle">
	<selectKey keyProperty="id" order="BEFORE" resultType="Integer">
		select EMPLOYEES_SEQ.nextval from dual 
	</selectKey>
	insert into employees(ID,LAST_NAME,EMAIL) 
	values(#{id},#{lastName},#{email}) 
</insert>

假如last或者email传值为null就会报错,报无效的列类型
在这里插入图片描述
原因:
当传值为Null的时候,mybatis会自动对应jdbcType类当中的other类型,而oracle并不认识这个类型,mysql他不会报错的。
解决方案:
当指定类型之后,他就不会去默认other类型了,这样就可以解决传null值报错问题

insert into employees(ID,LAST_NAME,EMAIL) 
		values(#{id},#{lastName,jdbcType=NULL},#{email,jdbcType=NULL}) 

针对于上面的我们还得遇见null就得加那个属性,Mybatis也给我们提供了一种全局设置,在mybatis-config.xml添加以下配置。

<settings>
	<setting name="jdbcTypeForNull" value="NULL"/>
</settings>

mode调用存储过程

mode 属性允许指定 IN,OUT 或 INOUT 参数
顺便记录一下oracle存储过程创建吧。
存储过程书写要规范(IN 、OUT 参数一定要写上,例如:V_YEAR IN INTEGER),不然JAVA调用有问题,拿不到存储过程返回值

CREATE OR REPLACE PROCEDURE STATIC_DIA_QUARTER(V_YEAR    IN INTEGER,
                                               V_QUARTER IN INTEGER) IS
<select id="getAndSaveHyperReport" statementType="CALLABLE" parameterType="java.util.Map" >
  {call STATIC_HYPER_QUARTER(#{year,mode=IN,jdbcType=INTEGER},#{quarter,mode=IN,jdbcType=INTEGER})}
</select>

numericScale保留小数点几位

#{height,jdbcType=NUMERIC,numericScale=2}) 
### MyBatis 中 `association` 的常用属性及其作用 #### 1. 属性概述 在 MyBatis 中,`<association>` 标签用于处理一对一关系的映射。它的主要功能是将查询结果中的某个字段映射到 Java 对象的一个复杂类型属性上。以下是 `<association>` 常见的属性及其作用: - **property**: 定义当前实体类中对应的一对一关联对象的属性名称[^1]。 - **javaType**: 指定该属性的具体 Java 类型。例如,在学生和教室的例子中,学生的 classroom 属性可能是 Classroom 类型,则需要指定 javaType="com.lingaolu.pojo.ClassRoom"[^4]。 - **column**: 表示数据库表中用来匹配外键或其他条件的列名。这个值通常会传递给子查询或者作为参数传入嵌套的结果集中[^2]。 - **select**: 当使用嵌套查询的方式时,可以通过此属性定义另一个已存在的 Mapper 接口方法来完成数据获取操作。 - **fetchType**: 控制是否启用延迟加载,默认值由全局配置项 lazyLoadingEnabled 和 aggressiveLazyLoading 决定。可选值有 EAGER(立即加载) 或 LAZY (懒加载)[^3]。 - **notNullColumn**: 如果设置了 notNullColumn 属性, 则只有当指定列为非 NULL 才执行关联查询。 - **autoMapping**: 自动映射开关标志位,允许开发者关闭自动映射机制以便手动控制如何把结果集转换为目标 POJO 实体实例。 #### 2. 示例代码展示 下面是一个具体的例子展示了这些属性的实际应用情况: ```xml <!-- StudentMapper.xml --> <select id="getStudentWithClassroom" resultMap="studentResultMap"> SELECT s.*, c.id AS cid, c.name AS cname FROM student s LEFT JOIN classroom c ON s.class_id = c.id WHERE s.id=#{id} </select> <resultMap type="com.example.Student" id="studentResultMap"> <result property="name" column="s_name"/> <!-- 使用 association 映射 Classroom 对象 --> <association property="classroom" javaType="com.example.Classroom" column="cid" select="getClassroomById"> <result property="name" column="cname"/> </association> </resultMap> <select id="getClassroomById" resultType="com.example.Classroom"> SELECT * FROM classroom WHERE id = #{id} </select> ``` 上述 XML 文件片段说明了通过 `association` 将 `Student` 类与其所属的 `Classroom` 进行了一对一映射,并且利用了嵌套查询方式 (`select`) 来实现具体逻辑。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怪 咖@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值