MyBatis学习整理

MyBatis-jar包

 

核心包下载

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

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

htt

依赖包:

配置文件

主配置文件

 

主配置文件中可以有多个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. 在主配置文件中关联 

     <properties resource="mysqljdbc.properties"/>

映射文件

namespace的作用

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

但不建议如此使用。

映射别名

<typeAliases>
                <package name="com.woniuxy.entity"/> 
           </typeAliases>

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映射文件放在接口包中

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

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

 

动态代理不支持selectMap

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

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

单表查询

模糊查询 '%'  值  '%'

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

多参数查询

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

  • 使用@Param设置参数名字

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

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

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

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

动态参数

  • if

  • where(推荐)

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

  • choose

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

  • foreach

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

数组

集合<Internet>

集合<实体类>

多表查询

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

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

一对多

分步查询

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

多对一

分步查询

多对多

至少有是三个表

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

逆向工程

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

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

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

修改配置文件

jdbc四大参数

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

指定表

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

运行主方法。

延迟加载 setting

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

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

在帮助文档中

lazyLoadingEnabled为直接加载

直接加载

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

侵入式延迟

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

深度延迟

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

缓存

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

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

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

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

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

二级缓存

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

主配置文件

映射文件

缓存命中率:Cache Hit Ratio

增删改操作也会清空缓存。

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

第三方的二级缓存--ehcache

配置文件

指定使用的文件位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值