#Mybatis框架小结
什么是Mybatis mybatis是一款半自动ORM框架,主要用来跟数据库打交道 Mybatis的好处 半自动化,能够自动去获取数据源,关闭资源等操作,能够大大加快开发的效率,因为是半自动化。 Mybatis的缺点 半自动化,还需要手动的去写sql语句配置关系映射步骤繁琐Mybatis对数据库的通用性不好,不同的数据库需要写不同的sql语句##如何使用Mybatis
首先要导入Mybatis,数据库连接,数据池相关的jar包(如果要用到懒加载,还要导入懒加载相关的jar包)
配置Mybatis的核心配置文件Mybatis_config.xml,需要配置以下内容
配置事务管理器配置数据源配置是否开启二级缓存,是否使用懒加载加载映射文件,如果是加载实体类的映射,则要用到的是resource=“pojo/user.xml”,如果是加载接口的映射,用到的是class=“dao.userdao”。还可以通过package对一个包下的类或者接口进行映射在实体映射文件中要自己写sql语句,可以写select,update,insert,delete语句
parameterType为接受的数据类型,分为三种:第一种,八大基本数据类型+String,可以通过#{0},#{_parameter}${_parameter}来接收。第二种map类型,通过#{map的key}来接收。第三种对象类型,直接通过#{对象中的属性名}来接收。resultType=“实体类具体路径” resultMap="resultMap的ID"手动映射,如果实体类包含集合可以通过,如果包含实例的方法来映射,里面的参数跟映射成集合一样。动态生成接口的实现类,及可以分为基于配置和基于注解,一般使用基于配置。基于注解相对不灵活。(ps.namespace中必须写接口的完整路径)
##Mybatis的工作流程
先根据核心配置文件创建sqlsession工厂工厂创建session实例调用session动态生成接口的实现类session.getMapper(接口.class)生成实例。通过session.selectList(“namespace.方法”)来调用某个namespace下的sql语句##Mybatis中的一二级缓存概念
一级缓存是基于一个session,同一个session中初次调用某个方法会将该方法查询到的结果存放到session的一级缓存中,再次调用该方法查询就不会再去数据库中查找数据,而是直接去缓存中找。
脏数据概念:及得到的数据跟数据库中的数据不匹配,产生脏数据的原因,查询到数据放到缓存中之后,又去数据库中直接改变了数据,当再次调用该查询方法就不会去数据库中查数据,就会导致数据的不匹配,及脏读。解决脏读的办法就是清空缓存,再次查询。一级缓存清空缓存的方法有:1.直接提交事务。2.关闭session。3.增删改语句都会清空缓存。4.clearCache(),flushStatements()方法手动清空缓存。二级缓存是基于同一个namespace下,跟一级缓存的作用相似,区别在于同一个namespace下操作sql语句都会在二级缓存中存入查询结果,但是二级缓存需要手动开启,可以手动设置缓存的刷新时间。
对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。主配置文件中的配置。 需要开启二级缓存的namespace的配置。需要开启二级缓存的映射的实体必须实现序列化接口!。清空缓存的方法:##多表映射解决方案
通过视图建一个新的pojo类去映射实体类中放list集合,然后通过手动映射来实现多层映射##懒加载
需要手动导入相应的jar包,并需要在主配置文件中配置相关参数</setting name=“lazyLoadEnabled” value=“true”/>。 </setting name=“aggressiveLazyLoading” value=“false”/> 给全局加上懒加载 在resultMap中对需要进行懒加载的属性加上 fetchType="lazy"就会懒加载,如果加上 fetchType="eager"就不会懒加载。
####想要学好框架,还是需要多动手,多去自己配置相关的文件!!!