MyBatis学习整理

MyBatis-jar包

 

核心包下载

中文官网:http://www.mybatis.cn

英文官网:http://www.mybatis.org/mybatis-3/zh/index/html

httMyBatis学习整理_第1张图片

依赖包:

MyBatis学习整理_第2张图片

配置文件

主配置文件

MyBatis学习整理_第3张图片

 

主配置文件中可以有多个environment,更改开发(dev)或者线上模式(online)

分离主配置文件中的四大参数

  1. 创建配置文件

    jdbc.driver=com.mysql.jdbc.Driver

    jdbc.url=jdbc:mysql:///mybatis-base(当ip为本机,端口为3306时,可以使用 "/" 代替)

    jdbc.username=root

    jdbc.password=123

  2. 在主配置文件中关联 

     

映射文件

namespace的作用

每个映射文件namespace的名字不能相同。不同的命名空间,有相同id的sql语句,执行方法要使用命名空间.方法

但不建议如此使用。

映射别名


                 
           

resultType的可以使用别名和类全名,在使用别名前,需要在主配置文件设置typeAliases。

sql语句的占位符$和#

使用$在执行时是使用Statement

使用#在执行时是使用PreparedStatement

日志文件

Log4j

log4j使用properties作为配置文件

log4j.logger.命名空间,指定显示执行该命名空间相关信息

#log4j.rootLogger=TRACE,console,f1
log4j.logger.com.woniuxy.dao.StudentDao=DEBUG,console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%p] %m [%t] %c [%l]%n

log4j.appender.f1.File=d:/file.log
log4j.appender.f1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.f1.layout=org.apache.log4j.PatternLayout
log4j.appender.f1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m [%t] %c [%l]%n

数据库中表的字段与定义的实体属性名不一致时

不影响增删改,但要注意sql语句的参数名

查询语句是要给字段定义相同的属性名

或者使用resultMap接收查询结果,再转换成需要的实体

使用mapper的动态代理

自动生成接口实现类

  • 没有Dao接口的实现类,mapper映射文件放在接口包中

MyBatis学习整理_第4张图片

  • namesapce必须是接口的类全名(全限定名)

MyBatis学习整理_第5张图片

  • sql语句的id必须是要调用的方法名

MyBatis学习整理_第6张图片

MyBatis学习整理_第7张图片

 

动态代理不支持selectMap

查询操作底层只会调用selectOne()和selectList()

由于没有加入Spring,需要使用test进行测试

MyBatis学习整理_第8张图片

单表查询

模糊查询 '%'  值  '%'

%与值之间的空格不可省略

MyBatis学习整理_第9张图片

多参数查询

  • 使用数字区分参数的位置

  • 使用@Param设置参数名字

在定义接口方法是使用@Param设置参数名字

List seleteStudentParameter1(@Param("name")String name,@Param("student")Student student);

在mapper的sql语句中直接使用#{名字}

select * from student where name like '%' #{name} '%' and id=#{student.id}

动态参数

  • if

MyBatis学习整理_第10张图片

  • where(推荐)

对if进行了优化没有前置条件 where 1 = 1

MyBatis学习整理_第11张图片

  • choose

当前一条不满足,执行下一条

MyBatis学习整理_第12张图片

  • foreach

MyBatis中对数据类型等已经做了定义。,可以直接使用左图中的对应名字

MyBatis学习整理_第13张图片

数组

MyBatis学习整理_第14张图片

集合

MyBatis学习整理_第15张图片

集合<实体类>

MyBatis学习整理_第16张图片

多表查询

关系模型数据库,在程序中即为对象模型,即在建立实体时,为外键的字段,用属性表示为该字段对应的实体。

MyBatis学习整理_第17张图片

如上图,学生属性中并没有建立一个老师id的属性,而是建立老师对象的属性。

一对多

分步查询

MyBatis学习整理_第18张图片

在需要查询对象属性的时候,使用resultMap转换器进行一次转换,告诉程序,怎么进行赋值。

多对一

分步查询

MyBatis学习整理_第19张图片

多对多

至少有是三个表

MyBatis学习整理_第20张图片

多对多查询,其实就是多步骤的多对一或者一对多。

逆向工程

MyBatis官方提供一个代码生成器,可以生成单表的实体类,Dao接口和映射文件

官方文档地址:http://www.mybatis.org/generator/

官方工程地址:https://github.com/mybatis/generator/releases

修改配置文件

jdbc四大参数

实体类+映射文件+接口的包名和位置

MyBatis学习整理_第21张图片

MyBatis学习整理_第22张图片

指定表

MyBatis学习整理_第23张图片

生成实体,Dao接口,映射文件

运行主方法。

MyBatis学习整理_第24张图片

延迟加载 setting

为了降低服务器开销建议使用延迟加载

使用延迟加载的前提:多表的关联查询,查询语句是分步查询。

在帮助文档中

MyBatis学习整理_第25张图片

lazyLoadingEnabled为直接加载

直接加载

查询语句分步查询,执行方法时,分步查询按先后顺序一起执行

MyBatis学习整理_第26张图片

侵入式延迟

执行查询方法的时候只执行第一个查询,当使用对象属性的时候,会查询关联表(不管这个属性是否存在于这个关联表)

MyBatis学习整理_第27张图片

MyBatis学习整理_第28张图片

MyBatis学习整理_第29张图片

深度延迟

当使用关联表属性的时候才会执行查询

MyBatis学习整理_第30张图片

MyBatis学习整理_第31张图片

缓存

缓存以Map保存,情况缓存,其实是清空值,保留键

一级缓存(默认开启,不能禁用)

MyBatis学习整理_第32张图片

第二次执行同一个查询方法时,并没有执行查询语句,而是直接使用了缓存中的数据

一级缓存作用于SqlSession,当SqlSession关闭时,会清空缓存中的数据

MyBatis学习整理_第33张图片

当执行增删改操作的时候也会清空缓存,无论是否提交

MyBatis学习整理_第34张图片

二级缓存

与SqlSession无关,可以在映射文件中配置是否开启,底层是基于序列化的,使用二级缓存保存的实体需要实现序列化接口

主配置文件

MyBatis学习整理_第35张图片

映射文件

MyBatis学习整理_第36张图片

缓存命中率:Cache Hit Ratio

MyBatis学习整理_第37张图片

增删改操作也会清空缓存。
MyBatis学习整理_第38张图片

在这里就是将缓存中Map的值清空,只保留了键,所有会出现一次缓存命中率为0.5但还是执行了查询语句的情况

MyBatis学习整理_第39张图片

第三方的二级缓存--ehcache

MyBatis学习整理_第40张图片

配置文件

MyBatis学习整理_第41张图片

指定使用的文件位置

MyBatis学习整理_第42张图片

你可能感兴趣的:(Mybatis基础学习)