事务中mybatis通过id查不到但是通过其他条件可以查到_IT培训机构框架mybatis(2)笔记...

9e9e7b9a9bac02a99430ab5d758b369a.png

搭建Mybaties环境

1、什么是mybatis框架

1、是一个开源的数据持久化框架

2、有什么用

1、内部封装了通过jdbc访问数据库的操作,支持普通的sql查询、存储过程和高级映射,几乎消除了所有jdbc代码和参数的手工设置以及结果集的检索,简单来说取代了jdbc数据访问层(basedao层)

3、其思想

1、将程序中的大量sql语句剥离出来,配置在配置文件中,实现sql的灵活配置

2、将sql与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改sql

4、mybatis的前身是ibatis,是Apache的一个开源项目

1、官网网址:mybatis。org

2、GitHub下载:http://github.com/mybatis,这个网站可以下载器的的框架如spring等

5、什么是ORM(对象、关系映射),是一种数据持久化技术

1、简述:它在对象模型和关系型数据库之间建立对应关系,并提供一种机制,通过Javabean对象去操作数据库表的数据

6、mybatis与orm的关系

1、mybatis通过简单的xml或者注解进行配置好原始映射,在实体类和sql语句之间建立映射关系,是一种半自动的ORM实现

2、基于ORM,mybatis在对象模型和关系型数据库的表之间建立一座桥梁

3、通过mybatis,可以建立sql关系映射,便捷地实现数据存储、查询、更改和删除操作

7、搭建mybatis环境步骤

1、下载需要的jar文件并部署所需的jar文件到项目中

1、mybatis-3.2.2.zip jar文件中的jar包,在其lib目录中找到mybatis-3.2.2.jar 和mysql-connector-java-5.1.0.jar(数据库驱动jar文件)、log4j-1.2.12.jar(负责日志输出的jar文件)

2、所有的jar文件都需要放到web-INF下的lib目录中

3、还有一些源文件的配置可以详细查看官方文档进行

2、设置目录结构

1、src源文件夹存放dao层包、pojo实体类包、还有其他的service层、controller层等

2、创建一个源文件(sourcefolder)resources,存放mybatis-config.xml核心配置文件和属性文件如日志属性文件(需要在网上找到相关的配置信息,拷贝上去)和数据库连接配置属性文件

3、创建mybatis核心配置文件mybatis-config.xml文件

1、核心配置文件的作用:配置数据库连接、mybatis运行时所需的各种特性、设置和影响mybatis行为的属性

2、配置文件具体信息如图:

要起别名是<typealiase><package name="实体类的包名,不用具体到哪个类"/></typealiase>

ce22f199ecd0ea23cbbb67c19e0859b4.png

4、创建实体类pojo

1、根据数据库的表创建相应的实体类,并且根据字段生产相应的属性,最好是属性名跟字段名一致,这样方便进行对象模型和关系型数据库表的映射

2、实体类的属性需要实现setter和getter方法

5、配置sql映射文件

1、sql映射文件和接口在dao层包创建,并且存放在一个包下,方便映射,sql映射文件和接口的起名要一致,接口的方法名和映射文件的操作标签的id一致

2、具体配置

sql语句中还有一个入参的属性parameterType="基本数据类型或者对象"

c67f31b25831d071aa3e23cf630f9a9b.png

6、使用Junit进行测试

1、获取读取mybatis-config。xml的文件输入流

InputStream is = Resources.getResourceAsStream("mybatis-config.xml")

2、通过sqlsessionfactorybuilder获得会话工厂

SqlsessionFactory sqlsessionfactory = new SqlsessionFactoryBuilder().build(is输入流);

3、通过会话工厂获得sqlsession、然后执行相关sql语句操作

Sqlsession session = sqlsessionfactory.opensession(true);

//opensession的参数为true表示关闭事务控制,自动提交,默认为true

session.selectOne("映射文件的全限定名.sql语句的id")

8、mybatis几个核心类的生命周期和作用域

1、SqlsessionFactoryBuilder:创建SqlsessionFactory实例

1、用过即丢,一旦创建SqlsessionFactory对象,这个类就不需要存在了

2、它的作用域是在方法体内,作为一个局部变量存在

2、SqlsessionFactory:创建Sqlsession实例,是mybatis应用的中心

1、一旦创建,就会在整个应用运行过程中始终存在,并且同时之存在一个对象实例

2、作用域是application

3、Sqlsession:是用于执行持久化操作的对象,类型jdbc的connection

1、对应着一次数据库会话,每一个线程都有自己的会话实例,不能被共享,也不是线程安全

2、最佳作用域是request或者方法体作用域

3、要保证会话关闭

4、两种使用方式

1、通过实例来直接执行已映射的sql语句

2、基于sql映射文件对应的接口操作数据

9、resulttype和resultmap的联系

1、resultType:表示返回类型,包括基本数据类型和复杂数据类型

2、resultMap:是对外部resultMap的引用,表示返回结果映射到哪个resultMap上

1、应用场景:数据库字段信息与对象属性不一致或者需要做复杂的联合查询,以便自由控制映射结果

2、自动映射级别

1、none,不做自动映射,在resultmap里做映射,才能获取

2、partial:若字段名和属性名一致,即使没有做属性名和字段名的匹配,也可以在后台获取到未匹配过的属性值,如果字段名和属性名不一致,且在resultmap里没有做映射,name就无法在后台获取并输出 不包括association和collection里面的

3、full:自动匹配所有属性,包括association和collection里面的

3、属性<association property="属性名" javaType="返回值类型">

<id property="属性" column="字段名"/>

<result property="属性" column="字段名"/>

//其他 跟都是样的写法,一个类中有另一个类的属性是使用的

</association>

4、实行<collection property="属性名" ofType="返回的类型">

<id property="属性" column="字段名"/>

<result property="属性" column="字段名"/>

//其他 跟都是样的写法,一个类中有另集合的属性时使用的

</collection>

10、多参数入参:

1、注解入参:@param("其别名"),在映射文件中的#{就是入参的别名},4个以上的最好是对象入参

b32eeb3b44cc965d3466c17db7c2d8da.png

11、mybatis缓存

1、一级缓存

是基于PerpetualCache(mybatis自带)的HashMap本地缓存,作用范围session,当session flush或者close之后,该session中所有的缓存都会被清空,只要进行增改删操作就会清空缓存,查询的话要close才清空

2、二级缓存

是全局缓存可以被所有sqlsession共享,要在核心配置文件中的settings配置

<setting name="cacheEnabled" value="true"/>

然后在映射文件中

<cache eviction="FIFO先进先出" flushinterval=“60000毫秒清空时间间隔” size=“” readonly=""/>

然后在sql语句中添加一个属性 useCache="true" 是否使用缓存

12、动态sql

1、if:利用if实现简单的条件选择,test属性存放判断的条件,并且要用 and代替

36db43eb964bc38bcfcbd73c1c8e48ec.png

2、choose(when,otherwise):相当于java中的switch语句,通常与when otherwise搭配使用

<choose>

<when test="判断条件是否符合">符合条件要执行的sql语句</when>

<otherwise>当when的条件没有一个符合时才会执行这个sql语句</otherwise>

</choose>

3、where:简化sql语句中where的条件判断

<where></where>相当于添加一个where关键字,智能忽略sql语句and、or这些关键字

4、set:解决动态更新语句

<set></set>相当于添加一个set关键字,不过会自动忽略sql修改语句后面的逗号

5、trim:可以灵活地去除多余的关键字

28ce691c0e7f710f416ac6a475b4c0e0.png

6、foreach:迭代一个集合,通常用于in条件

<foreach collection="指定的集合类型如List" item="迭代的元素别名" open="以(开始" separator="以,作为间隔" close="以)结束">

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值