Mybatis学习日志
在Mybatis深入学习的一周中,总感觉跟着师傅的视屏讲解什么都能懂,但实际自己操作的时候才发现自己一脸懵逼,不知道从何入手。但还好自己做了点笔记。在此记录一下自己浅度学习Mybatis遇到几个小问题。
1.个人感觉学习Mybatis过程中最好使用log4j 日志文件,这样在你自己测试代码的时候,能更好的看到Mybatis的运行过程。不使用的话,测试代码的时候如果代码正确他就只会输入结果,有时候这个结果你是知道的,相比较之下使用log4j你能看到一些过程,这样在学习中能更好的理解。
作为技术小白的我,也就只会用用log4j。首先是导入jar包,log4j 和slf4j的版本一定要对应,否则会报异常。其次是log4j的配置文件,代码如上,必须放置src目录下,然后就可以使用了。
这两个包是必须的,一个是mybatis的jar包,一个是连输mysql数据用的jar包
2.就是在配置Constructor 构造器的时候,大家在对应类的构造方式的后尽量使用Interger类似的对象数据类型,因为我在写构造器的时候用int类型返回数据库的id列他会报异常。原因是数据不匹配,至于具体的问题,师傅说是源于java反射机制,这里就不多说了。
3.Mapper映射代理对象,一般来说Mybatis核心配置文件中引入Mapper映射文件有三种方式:1:resource引入映射文件位置 2.class 引入代理对象类3.package引入代理对象所在的包(批量代理)
这里必须注意的是,class 和 package 引入代理对象时,必须把映射文件和接口类放在同一文件下,同时mapper映射文件中的语句id 必须对应接口的方法名称。否则代理对象不成功。
然后通过session对象调用getMapper就可以实现对象代理了。
4.一对多和多对多关系理解。 我在学习这一章节的时候,起初是通过sql语句和sql表来理解和思考处理这些关系。其实不然,处理多对多关系的时候,首先先分析类与类的关系或者说表与表的关系 这是必须的,其次在表对应的类中建立连接
这里P_oder对应Oder是一对一的关系,Product和P_oder是一对多的关系,这里分析好了,mapper里的语句处理就好解决了
这里是P_oder的mapper里实现三表联查,首先找到一对一联查 ,也就是从数据库找到数据返回给P_oder对象类里的Oder对象,ResultMap里首先放的是P_oder的基本类型,其次Association就是处理P_oder和Oder的关系,比如这里是根据p_oder里的p_id 对应Oder里的id,一对多的关系处理也是一样的原理,只不过 collection 里返回的就是一个集合了,这里也对应了一对多的关系。
5.在配置Mybatis核心配置的Settings 配置时,要导入两个jar包。
初学Mybatis的我在这里就掉坑里了,这里cglib的版本据我搜到的资料,应该是要小于asm版本的,我试过相同版本,调试报异常。这里和log4j 和slf4j不一样,log4j 和slf4j是需要相同版本。
6.Mybatis 二级缓存。 这里最绕的就是:当你启用二缓存,又有insert/update/delect数据处理,又关闭了insert/update/delect 刷新缓存时 。
如果你的数据处理语句在session.close() (向二级缓存刷入数据)的后面,那么二级缓存中是没有数据的。虽然我们关闭了二级缓存的数据刷新,也就是当执行数据处理语句时,二级缓存不会被清除,但是这里会清除一级缓存中的数据,所以把session.close() 一级缓存刷入二级缓存放在数据处理语句前 就可以实现二级缓存中有数据,且不被清除。
<!--这里就是我入坑时遇到的一些小问题,希望对大家有一定的帮助。欢迎大家留言,一起讨论,一起进步。有不对的地方,望大佬指教,也请大家多多包涵!-->