核心包下载
中文官网:http://www.mybatis.cn
英文官网:http://www.mybatis.org/mybatis-3/zh/index/html
依赖包:
主配置文件中可以有多个environment,更改开发(dev)或者线上模式(online)
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///mybatis-base(当ip为本机,端口为3306时,可以使用 "/" 代替)
jdbc.username=root
jdbc.password=123
每个映射文件namespace的名字不能相同。不同的命名空间,有相同id的sql语句,执行方法要使用命名空间.方法
但不建议如此使用。
resultType的可以使用别名和类全名,在使用别名前,需要在主配置文件设置typeAliases。
使用$在执行时是使用Statement
使用#在执行时是使用PreparedStatement
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接收查询结果,再转换成需要的实体
查询操作底层只会调用selectOne()和selectList()
由于没有加入Spring,需要使用test进行测试
%与值之间的空格不可省略
在定义接口方法是使用@Param设置参数名字
List
在mapper的sql语句中直接使用#{名字}
select * from student where name like '%' #{name} '%' and id=#{student.id}
对if进行了优化没有前置条件 where 1 = 1
当前一条不满足,执行下一条
MyBatis中对数据类型等已经做了定义。,可以直接使用左图中的对应名字
数组
集合
集合<实体类>
关系模型数据库,在程序中即为对象模型,即在建立实体时,为外键的字段,用属性表示为该字段对应的实体。
如上图,学生属性中并没有建立一个老师id的属性,而是建立老师对象的属性。
在需要查询对象属性的时候,使用resultMap转换器进行一次转换,告诉程序,怎么进行赋值。
至少有是三个表
多对多查询,其实就是多步骤的多对一或者一对多。
MyBatis官方提供一个代码生成器,可以生成单表的实体类,Dao接口和映射文件
官方文档地址:http://www.mybatis.org/generator/
官方工程地址:https://github.com/mybatis/generator/releases
运行主方法。
为了降低服务器开销建议使用延迟加载
使用延迟加载的前提:多表的关联查询,查询语句是分步查询。
在帮助文档中
lazyLoadingEnabled为直接加载
查询语句分步查询,执行方法时,分步查询按先后顺序一起执行
执行查询方法的时候只执行第一个查询,当使用对象属性的时候,会查询关联表(不管这个属性是否存在于这个关联表)
当使用关联表属性的时候才会执行查询
缓存以Map保存,情况缓存,其实是清空值,保留键
第二次执行同一个查询方法时,并没有执行查询语句,而是直接使用了缓存中的数据
一级缓存作用于SqlSession,当SqlSession关闭时,会清空缓存中的数据
当执行增删改操作的时候也会清空缓存,无论是否提交
与SqlSession无关,可以在映射文件中配置是否开启,底层是基于序列化的,使用二级缓存保存的实体需要实现序列化接口
主配置文件
映射文件
缓存命中率:Cache Hit Ratio
在这里就是将缓存中Map的值清空,只保留了键,所有会出现一次缓存命中率为0.5但还是执行了查询语句的情况
指定使用的文件位置