Mybatis学习

本文详细介绍了Mybatis框架,它是一个轻量级的持久层框架,强调对象关系映射(ORM)。内容涵盖Mybatis的发展历史、主要标签及其属性、动态SQL以及高级映射技术,如一对一和一对多关联映射。同时,文章还展示了批量删除、批量增加和动态查询的示例代码,帮助理解Mybatis在实际应用中的使用技巧。
摘要由CSDN通过智能技术生成

一、Mybatis概述

Mybatis框架原属于Apache公司下的顶级开源项目。
Mybatis3.0以前叫做ibatis,09年6月项目团队整体转战Google,更名为Mybatis;

Mybatis是一个优秀的轻量级持久层框架。--持久层代表数据库,前端是表现层,java是逻辑层。Mybatis属于ORM框架(ORM,全称 Object Relation Mappers,意为对象关系映射,是大多数持久层框架的核心思想)

二、标签常用属性

	标签		属性名		描述					属性值
	<mapper>	namespace	命名空间:作用使java与sql分离。 	映射的接口全类名(包名.类名)
	增删改查标签	id		唯一标识符				抽象方法名
	<select>	resultType	声明查询结果的类型,用于关系映射。	如果方法的返回值是基本数据类型,那么属性值是包装类全类名。
									  	如果方法的返回值是引用数据类型,那么属性值是全类名(包括String)。
									  	如果方法的返回值是集合,那么属性值是集合泛型的全类名。
	<resultMap> 	type		Mybatis另一种映射规则		  	声明映射对象(全类名)
			        id		供调用的唯一标识符
	<result>	property	成员变量名
			    column		结果集列名
	<association>			用于一对一关联映射(多表),解析对象
			property	成员变量名
			javaType	成员变量数据类型
	<collection>			用于一对多关联映射,解析集合
			property	成员变量名
			ofType		集合泛型全类名
	<if>		test		判断条件,主要用于判断参数的成员变量,调用成员变量可直接写变量名。
	<where>				取代where关键字,有两个特点:
					1.如果where后面的第一个关键字是and/or,那么会将该关键字自动省略
					2.如果where后面没有出现任何sql片段,那么会将where自身省略
	<set>				取代set关键字;有如下特点:如果set标签中的sql片段以逗号结尾,那么自动省略该逗号
	<foreach>	collection	参数集合类型
			    item		循环遍历出的对象,供循环内调用,调用对象中的成员变量,可以直接用,对象.成员变量名
			    separator	分割两次循环之间的内容(插入两次循环中的内容)
			    open		循环之前的内容
			    close		循环结束后的内容
			    index		当前循环到第几次	

#{}和${}

        #{}的特点:1.自带单引号  2.有转义功能(防止sql注入);特性同JDBC中的问号(问号特点:1.自带单引号。 2.转义功能,防止注入攻击)
        ${}的特点:1.不自带单引号 2.自带拼接 3.无转义功能;一般用于模糊查询;因其不能转义,会遭受sql注入攻击,所以不建议使用。
    {}中的值:如果参数是实体类,那么{}中写成员变量名
          如果参数是简单值(基本数据类型和String),那么#{}中可以写value,也可以写参数名,但${}中只能写value;

例子:'%${value}%'       '%' || #{value} || '%'

sql片段

sql语句可以看做由多个sql片段拼合而成的一个句子。
每一个sql片段都可以提取出来,用<sql>标签进行封装。
在sql中,利用<include> 标签的refid属性,来引用某一<sql>的id属性值。

三、高级映射

用于多表查询的技术。其实就是用resultMap标签定义映射规则

要想实现多表查询,需要在实体类中引入另一个实体类的成员变量。
如果主表的数据与副表的数据一一对应,则使用一对一关联映射,在主表实体类中引入副表实体类的对象即可。<association>
如果主表的数据与副表中多条数据关联,则使用一对多关联映射,在主表实体类中引入副表实体类为泛型的集合即可。<collection>

批量删除的代码

	批量删除的mapper.java:int deleteBatch(int[] ids);
	批量删除的mapper.xml:
	<delete id="deleteBatch">
		delete from animal 
		where animal_id in 
		<foreach collection="array" open="(" close=")"
			separator="," item="id">
			#{id}
		</foreach>
	</delete>

批量增加代码

	批量增加的mapper.java:int batchAdd(List<Subject> ss);
	批量增加的mapper.xml:
	<insert id="batchAdd">
		insert into subject
		<foreach collection="list" item="sub" separator="union">
			select #{sub.no},#{sub.name},#{sub.teacher},#{sub.type} from dual
		</foreach>
	</insert>

动态查询的代码

	动态查询的mapper.java:List<Animal> select(Animal animal);
	动态查询的mapper.xml:
	<select id="select" resultMap="aaa" >
		select 
			animal_id
		  , animal_kind ak
		  , gender
		  , to_char(birth, 'yyyy-mm-dd') birth
		from animal
		<where>
			<if test="animalId > 0">
				animal_id = #{animalId}
			</if>
			<if test="animalKind != null">
				animal_kind like '%${animalKind}%'
			</if>
		</where>
	</select>

后续继续补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

杀神lwz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值