MyBatis总结

一、MyBatis简介
Mybatis 是持久层开发框架。
MyBatis的机制的原理:
①MyBatis支持普通的SQL查询,存储过程和高级映射的持久层框架。
②MyBatis将大量的SQL语句从程序里面抛离出来,配置在配置文件中,实现SQL的灵活配置。
二、为什么要使用MyBatis?
① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。(使用MyBatis将代码和SQL语句分离,便于各自的维护)
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决: Mybatis自动将java对象映射至sql语句。

④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象。
三、MyBatis编程步骤?
① 创建SqlSessionFactory
② 通过SqlSessionFactory创建SqlSession
③ 通过sqlsession执行数据库操作
④ 调用session.commit()提交事务
⑤ 调用session.close()关闭会话 返回到连接池中

public class MyBatisUtil{
    private static MyBatisUtil instance = new MyBatisUtil();
    private SqlSessionFactory sqlSessionFactory = null;

    private MyBatisUtil(){
        String resource = "config/mybatis.xml";
        InputStream in = null;
        //读取数据库配置文件config.xml的数据,
        //包含了事务配置,连接池配置,mysqld连接信息配置,mybatis xml文件路径信息
        in = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);

        //创建sqlSessionFactory对象,整个应用周期都存在
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
    }

    public static SqlSession openSession(){
        //参数传入true设置自动提交事务的
        SqlSession session = instance.sqlSessionFactory.openSession();
        //手动提交事务
        //session.commit(true);
        return session;
    }
}

四、MyBatis的一级缓存和二级缓存
一级缓存在内存上,第一级缓存是SqlSession实现的,一级缓存实现就是实现一个Map表,Key:id val:recode 一级缓存默认开启的
对记录的任何增加删除修改都可以使一级缓存失效(所有缓存都失效)
多线程环境中,一级缓存会产生问题!!!
读到的都是缓存中的旧值

Mybatis首先去缓存中查询结果集,如果没有则查询数据库,如果有则从缓存取出返回结果集就不走数据库。Mybatis内部存储缓存使用一个HashMap,key为hashCode+sqlId+Sql语句。value为从查询出来映射生成的java对象

Mybatis的二级缓存即查询缓存,它的作用域是一个mapper的namespace,即在同一个namespace中查询sql可以从缓存中获取数据。二级缓存是可以跨SqlSession的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值