A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

章志诚

初级黑马

  • 黑马币:

  • 帖子:

  • 精华:

© 章志诚 初级黑马   /  2018-11-21 16:52  /  1461 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第一步:
    创建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.二级缓存是缓存在磁盘中的,所以实体类或者接口要实现序列化接口才能够实现二级缓存

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马