当前位置:   article > 正文

mybatis数据库交互框架_mybatis的markerinterface

mybatis的markerinterface

Mybatis

1、加载配置
Mubatis将sql的映射加载为一个个的MappedStatement对象(包括传入的参数映射配置,执行的sql语句,结果映射配置),将其存储在内存中.
2、sql解析
当api接口层受到调用请求时,会接收到传入的sql的id和传入的参数对象(可以是Map,实体类和基本数据类型),myBatis会根据sql的id找到对应的MappedStatement,然后传人的参数对MappedStatement进行解析,解析后可以的到最终要执行的sql语句和参数
3、sql执行
将最总得到的sql语句和参数拿到数据路执行,得到执行结果
4、结果映射
将操作数据库的结果按照结果映射配置进行转换,可以转换为map,实体类或者基本数据类型,将结果返回 。

SqlSession:此组件包含所有执行sql语句操作的方法,用于执行已映射的sql语句.

myBaties配置文件

1、SqlMapConfig.xml(1个)
主配置文件,用于指定数据库连接参数
2、SqlMapper.xml(多个)
映射文件,用于定义sql语句映射信息

Mybatis基本应用

1)搭建MyBaties技术环境
为工程添加mydaties的开发包和数据驱动包,
在src下添加myBaties的主配置文件sqlMapConfig.xml配置sqlMapConfig.xml,
指定数据库连接参数利用MyBatis提供Api,获取Sqlsession对象

2)获取SqlSession对象
String path=“主配置文件路径”
Reader reader=resource.getResourceAsReader(path);

//构建SqlSessionFactory对象
SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();

SqlSessionFactoryBuilder ssf=ssfb.build(reader);

//创建Sqlsession对象
Sqlsession ss=ssf.openSession();

3)利用sqlSession实现增删改查操作
根据数据库表编写实体类
编写sqlMapper.xml映射文件,定义sql操作和yings信息,

获取sqlSession对象,执行增删改查操作,提交事务(dml)

释放sqlsession对象资源

resultMap映射定义
在映射文件定义操作时,如果查询结果字段名和实体类的属性名不一致,则需呀使用标签显示指定映射关系
注意:如果结果集的字段名和实体类的属性名完全不一致,且在结果映射的时定义为resultType,则不会创建实体对象,但是如果只是部分不一致,则会创建实体对象,并且自动关联名字一致的属性

mapper映射器
用于绑定映射语句的接口,映射器接口的实例对象可以从SqlSession中获取。

注意:mapper接口名称必须和对应的映射文件中nameSpace保持一致。
mapper接口中方法名必须和映射文件中SQL的ID一致

spring与mybatis整合
spring与mybatis整合需要映入一个mybatis-spring.jar文件包,此包提供与整合相关的api

SqlSessionFactorybean为整合应用提供SqlSession对象

MapperFactoryBean:根据指定mapper接口生成对应实例对象

MapperScannerConfigurer:根据指定包批量扫描mapper接口生成对应的MapperFactoryBean

sqlsession通过sqlsessionfactory获取的 SqlSessionFactory又是通过SqlSessionFactoryBuilder构建生成

SqlSessionFactory在spring.xml中配置:

<bean  class=" 架包相对路径">

<!--指定连接资源-->

<!--指定映射文件-->

</bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

在使用MapperFactoryBean时,有一个Mapper接口就要定义一个对应的MapperFactoryBean,仅用于mapper接口较少时;
若接口较多,需要使用MapperScannerConfigurer组件.

定义MapperScannerConfigurer时,只需指定一个扫描包即可,basePackage用于指定Mapper接口所在的包,在这个包及其子包中的mapper接口豆浆被扫描到,注册对应的MapperFactoryBean对象,多个包自检可以使用逗号隔开。

<bean class="">
<!--指定扫描包-->
<property name="basePackage" value=" "/>

<!--指定SqlSessionFactory-->
<property name="SqlSessionFactory" ref=""/>
注意:SqlSessionFactory属性可以不用指定,会以Autowried方式自动注入
</bean>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

如果指定的某个包下,并不完全是我们定义的Mapper接口,此时可以使MapperScannerConfigurer的两个属性缩小注册范围,一个annottionClass,一个markerInterface.

annotationClass:用于指定一个注解标记,当指定了annotationClass注解标记时,MapperScannerConfigure将只注册使用annotationClass注解标记的接口.
markerInterface:用于指定一个接口,当指定了markerInterface接口时,mapperScannerConfigurer将只注册继承自markerInterface接口的接口

mybatis动态sql

动态sql设计mybatis框架中特性之一,在一些组合查询页面需要根据用户输入得条件生成不同的查询sql语句,在jdbc或者其他像是框架中需要在代码中拼接sql容易出错,mybatis可以解决这种问题

动态sql标签与jstl相似,他允许在xml中构建不同的sql语句,常用的sql标签有:
判断标签:if,choose
关键字标签:where,set,trim
循环标签:foreach

if标签是简单的条件判断逻辑,满足指定条件时追加if标签内的sql语句,不满足时不追加,使用格式如下:

<select>
sql语句1
<if test="条件表达式">
sql语句2
</if>
</select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

if标签常用在where子句部分,根据不同情况住加入不同的sql语句。

choose标签的作用相当于jsva中的switch语句,基本上跟jstl中choose的作用和用法是一至的,通常与when和other搭配使用,使用格式如下:

<select>
sql语句1
<choose>
<when test="条件表达式">
sql语句2
</when>
<when test="条件表达式">
sql语句3
</when>
<otherwise>
sql语句4
</otherwrise>
 </select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

where标签主要是用于简化语句中where部分的条件判断,where变迁可以在变迁所在的位子输出一个where关键字,而且可以将后面多余的and或者or关键字去除,使用格式如下:

<where>
 	<if test="deptno != null">
 		deptno =#{deptno}
 		</if>	
		<if test="salary != null">
		and salary > #{salary}
	</if> 				
 </where>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

set标签主要是用在更新操作时,他的主要功能和where标签相似,组要是在标签所在位子输出一个set关键字,而且还可以去除内容结尾中无关的逗号,使用格式如下

<update>
update emp
<set>
<if test="ename != null">
ename = #{enmae},
 </if>
<if test="salary != null">
salary = #{salary},
 </if>
<if test="hiredate !=null">
 	hiredate = #{hiredate}
</if>
</set>
</update>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

trim标签的主要功能
1、可以在自己包含的内容前加上某些前缀,也可以在其后加上某些后缀,与之对应的属性是prefix和suffix
2、可以把包含内容首部的某些内容过滤,即hulue,也可以把尾部的某些内容guolv,对应的属性是

prefixOverrides和suffixOverrides
《等价于where标签》
<trim prefix="where" prefixOverrides="and|or">
......
</trim>
《等价于set标签》
<trim prefix="set">
....
</trim>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

foreach标签实现循环逻辑,可以进行一个集合的迭代,主要用在构建In条件中,使用格式如下:
如:

<select>
select * from emp where empno in
<foreach collection='集合' item='迭代变量' open="(" close=")" separator=",">
#{迭代变量}
</foreach>
</select>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

foreach标签允许指定一个集合,声明集合项和索引变量,变量可以用标签体内,他允许指定开放和关闭的字符串,在迭代项之间放置分隔符。

补充:在xml文件中处理特殊符号
第一种方式:采用xml转义字符

<   &lt;       ' &apos;
>    &gt;		      "  &quot;
&    &amp;    空格 &nbsp;
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/625601
推荐阅读
相关标签
  

闽ICP备14008679号