第一步:
创建maven项目,在项目配置文件中.设置项目为java项目,<packaging>jar</packaging>
导入相应的包:mybatis,mysql-connection,junit,log4j
第二步:
创建相应的接口和实体类:接口里面的方法为数据库查询需要执行的方法.实体类为查询结果封装对象类.里面的属性名与
数据库列名一致
第三步:
创建主配置文件.在主配置文件中,使用
<configuration>
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
来进行连接池的数据库连接
使用
<mappers>
<mapper resource="com/itheima/dao/account.xml"></mapper>
</mappers>
来进行映射配置文件的连接读取.其中如果是使用配置文件进行操作,则使用resource名,且全限定类名使用\
如果是采用注解操作,则使用class名,全限定类型使用.
或者直接将mapper更改为package name这直接使用点.并且注解和配置文件两种方式都能使用
第四步:
编写映射配置文件.该文件的路径名需要和接口的路径名一致,并且将会应用接口的路径名.通过路径名的引用,将两者
联系在一起.然后再配置文件中使用不同的标签写不同的数据库操作语句.
标签中有id,表名引用了接口中的那个方法,resultType表名结果封装到哪里去,需要是全限定类名.
第五步:
编写测试类进行测试:
1.首先使用resources读取主配置文件,并且将会顺带一起读取到映射配置文件
2.创建SqlSessionFactoryBuilder对象
3.创建SqlSessionFactory工厂类
4.创建SqlSession对象
5.创建接口对象
6.执行接口对象里面的方法,将会调用到配置文件中的配置数据库执行语句
将使用配置文件执行mybatis的方式更改为使用注解的方式:
将映射配置文件删除,将执行语句通过@的方式写到接口需要执行的方法上.将主配置文件中的resource更改为class并且路径更改为没有后缀名的.路径
注意:
如果映射配置文件目录结构和dao接口包结构一致,必须把映射配置文件删除,否则一样能加载到导致重复。
细节:
@1.mybatis不需要使用接口的实现类,因为使用了代理模式和工厂模式,代理模式会产生一个代理对象
@2.当封装对象和数据库列名不同时,有两种方式可以改正
1.在执行语句中使用别名的方式
2.使用resultMap.然后再resultmap里面配置标签
@3.创建iuser.xml和iuser.java时.名称是为了和之前的知识保持一致,在mybatis中,它把持久层的操作接口名称和映射文件也叫作:mapper.
@4.在diea中创建目录时和包时不同的.包是多层结构.而目录只是一个一层结构
@5.mybatis的映射配置文件必须和dao接口的包结构相同
@6.映射配置文件的操作配置,id属性的取值必须是dao接口的方法名
@7.映射配置文件的mapper标签namespace的取值必须是dao接口的全限定类名.好处是,后期开发不用再写dao的实现类了
@8.模糊查询使用#{} 和使用 %${value}%的区别:
使用#{} 这是一个占位符的方式,百分号需要自己在调用方法传入参数的时候自己写,而%${value}%则不用.
并且%${value}%这个value需要和接口中方法定义的参数名称一致才行
mybatis连接池有三种:
配置的位置是主配置文件中的datasource标签的type属性
属性取值分别是POOLED(传统规范的连接池),
UNPOOLED(传统的获取连接的方式得到连接,并没有使用池的思想),
JNDI(采用服务器提供的技术实现来获取datasource对象.不同的服务器所能拿到的datasource不同.
注意:如果不是web或者maven的war工程,是不能使用JNDI.tomcat使用的是dbcp连接池.
UNPOOLEDDataSource是对应的UNPOOLED连接
POOLEDDataSource对应的是POOLED连接
POOLED连接原理:
连接池分为空闲连接和活动连接,进入连接池后,首先进入到空闲池,如果空闲池里面有空闲的连接
则会将这个连接获取到返回.用来连接数据库.如果空闲池没有空闲的连接,则跳转进入活动池,看
活动池里面的连接是否达到最大允许数量,如果没有,则会创建一个连接然后获取到该连接返回.连接数据库
如果已经达到最大值,则找到最早建立的那个连接返回.连接数据库.
延迟加载:
延迟加载的概念:
在真正使用数据时才发起查询,不用的时候不查询:按需加载,懒加载
立即加载:
不管使不使用.立马发起查询
多表查询的时候,看关联表查询是否是多.多的话,通常是延迟加载.一的话通常是立即加载
将多表查询里面的数据封装配置给删除链接封装.然后再全局配置文件中,增加setting标签,增加两个对象
然后数据封装的配置中,使用select标签指向被延迟加载的方法.
缓存:
概念:
存在于内存中的临时数据,可以减少和数据库\服务端的交互,提高效率.
适用与缓存的数据:
经常查询的\不经常改动的\数据的正确与否对最终结果影响不大的.因为存储数据有可能和数据库里面的数据不同步.
不适用的:
经常改变的\不常查询的\影响较大的
一级缓存:
它指的是mybatis中的SqlSession对象的缓存.当我们执行查询之后,查询的结果会同时存入到SqlSession中.SqlSession的缓存原理是
里面有一个map集合用来存储缓存数据,key是sql语句,value值是找到的数据.SqlSession的一级缓存是默认开启的,不用配置.
清除缓存的三种方法:
SqlSession关闭\SqlSession.clearCatch()\数据库相关数据更改了,将会清除缓存
二级缓存
它指的是mybatis中SqlSessionFactory对象的缓存,有同一个二级缓存区域,然后由SqlSession共享这个缓存区域.
那么拿到这个缓存区域的是SqlSession是既有自己的缓存有拿到二级缓存还是SqlSession的一级缓存本省就是在二级缓存区域内?
二级缓存是需要配置的.同样在主配置文件中,setting设置开启缓存,然后再映射配置文件中,增加catch需要对应的方式.
@1.二级缓存是缓存在磁盘中的,所以实体类或者接口要实现序列化接口才能够实现二级缓存
|
|