当前位置: 移动技术网 > IT编程>开发语言>Java > 回顾MyBatis

回顾MyBatis

2020年07月09日  | 移动技术网IT编程  | 我要评论
MyBatis文章目录MyBatisXML配置方式环境搭建注意事项:简单例子(xml)注解方式案例设计模式分析自定义mybatis分析OGNL表达式连接池JNDI延迟加载一级缓存、二级缓存持久层解决方案,封装了JDBC很多细节,使开发者只需关注业务本身,无需关注连接创建,ORM思想,搭好“舞台”,任我们表演.JDBC三大对象:ConnectionPrepareStatementResultSetJDBC只是一种规范,像Spring的JdbcTemplate或者Apache的DBUtils都

MyBatis


持久层解决方案,封装了JDBC很多细节,使开发者只需关注业务本身,无需关注连接创建,ORM思想,搭好“舞台”,任我们表演.
JDBC三大对象:

  • Connection
  • PrepareStatement
  • ResultSet

JDBC只是一种规范,像Spring的JdbcTemplate或者Apache的DBUtils都只是简单的封装,只是一种工具类.

XML配置方式

mybatis加载配置文件的4种方式:

  1. 依据Mapper类具体路径配置mapper

    <configuration>  
        <mappers>       
            <!-- class 级别的指定 -->  
            <mapper class="cn.zoujidi.mybatis.dao.IUserDao"/>  
        </mappers>  
    </configuration>  
    
  2. 依据Mapper类所在的Package配置mapper

    <configuration>  
        <mappers>  
            <package name="cn.zoujidi.mybatis.dao"/>  
        </mappers>  
    </configuration>  
    
  3. 把Mapper配置文件与单独放到resource中,和Mapper类分开了

      <!-- 指定映射配置文件位置,映射配置文件是每个dao的独立配置文件 -->
        <mappers>
            <mapper resource="cn/zoujidi/mybatis/dao/IUserDao.xml" />
        </mappers>
    
  4. 直接在spring中配置Mapper的路径,但是mybatis.xml还是必不可少的

环境搭建注意事项:

  1. 创建IUserDao.xml和IUserDao.java时,名称是为了我们之前的知识保持一致.在mybatis中,它把持久层的操作接口和映射文件也叫做:Mapper,所以IUserDao.xml与IUserMapper.xml是一样的

  2. 在idea中创建目录的时候,它和包是不一样的:包在创建时cn.zoujidi.mybatis是三级目录,而目录在创建时cn.zoujidi.mybatis是一级目录

  3. mybatis的映射文件配置位置必须和dao接口的包结构相同(使用上部分加载mapper配置文件的第三种方式)

  4. 映射配置文件namespace属性取值必须是dao接口的全限定类名

  5. 映射配置文件的操作配置(select),id属性的值必须是dao接口的方法名

    当我们遵从3、4、5点之后,我们就无需再写dao的实现类

简单例子(xml)

// 1、读取配置文件
InputStream in = Resources.getResourceAsStream("SqlMapConfig");
// 2、创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
// 3、使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
// 4、使用SqlSession创建Dao接口的代理对象
IUserDao iUserDao = session.getMapper(IUserDao.class);
// 5、使用代理对象执行方法
List<User> users = iUserDao.findAll();
users.forEach(System.out::println);
// 6、释放资源
session.close();
in.close();

步骤描述:

  1. 第一步读取配置文件,获取连接数据库的信息
  2. 有了工厂就可以生成操作对象:session
  3. 我们一般不使用session直接操作数据库,而是使用dao操作数据库
  4. 所以在在第五步中,让session给我们生成代理对象
  5. 代理对象(方法增强)
  6. 通过代理对象操作数据库
  7. 切记映射配置中告知返回映射的实体类,制定全限定类名

注解方式

移除mapper.xml的配置,同时在dao的方法上用@Select标记,并制定sql语句,在config中用class属性指明使用该注解的全限定名

案例设计模式分析

  1. 读配置文件

    常使用:1.使用类加载器读取类路径的配置文件、2.ServletContext.getRealPath()获取当前部署环境的路径

    绝对路径、相对路径均不常使用。

  2. 创建factory工厂,使用了构建者模式

  3. 工厂模式生成SqlSession(解耦:降低类之间的依赖关系)

自定义mybatis分析

mybatis在使用代理dao实现增删改查做了哪些事情?

两件事。

  1. 创建dao的代理对象
  2. 代理对象中SelectList方法

自定义mybatis能通过入门案例看到的类:

​ class Resource

​ class SqlSessionFactoryBuilder

​ interface SqlSessionFactory

​ interface SqlSession

OGNL表达式

object Graphic Navigation Lauguage

对象。 图。 导航。 语言

它是通过对象的取值方法来获取数据,在写法上给省略了.

比如:我们获取用户名称

​ 类中:user.getUserName

​ OGNL表达式写法:user.userName

​ mybatis中为什么直接写userName,而不用user.呢,因为在parameterType中已经提供了属性所属类

连接池

连接池就是存储连接的一个容器,其实就是一个集合对象,并且必须是容器安全的.不能两个线程拿到同一个连接,该集合还必须实现队列的特性:先进先出

减少获取连接的所消耗的时间.

mybatis中的连接池提供了三种方式的配置: 配置的位置->主配置文件SqlMapConfig.xml中的datasource标签,type属性表示采用何种连接池的方式,取值分别是:

​ POOLED:采用传统的javax.sql.DataSource规范中的连接池,有针对规范的实现

​ UNPOOLED:采用传统获取连接的方式,虽然也实现了java.sql.DataSource接口,但是并没有使用池的思想

​ JNDI:采用服务器提供的JNDI技术实现来获取DataSource对象,不同服务器能拿到的DataSource又不一样,注意:如 果不是web或者maven 的war工程是不能使用的.如果使用的tomcat服务器,采用的连接池就是dbcp连接池

JNDI

Java Naming and Direction Interface,是sun公司推出的一套规范,属于javaee技术之一,目的在于模仿windows系统中的注册表。

延迟加载

按需加载,懒加载

一级缓存、二级缓存

减少与数据库的交互此。

什么样的数据适用于缓存:

  1. 经常查询并且不经常修改;
  2. 数据的正确与否对最终结果影响不大。

什么样的数据不适用于缓存:

  1. 经常改变的数据;
  2. 数据的正确与否对最终结果影响很大的(例如商品的库存、汇率、股市的牌价)

一级缓存:指的是SqlSession的缓存,即当我们执行查询后,查询的结果会同时存到SqlSession为我们提供的一块区域中,该结构是一个Map,当我们再次查询同样的数据时,mybatis回先去SqlSession中查看是否有,有的话直接拿出来。当SqlSession对象消失时,mybatis的一级缓存也就消失了。

当SqlSession调用更新、删除、添加、commit()、close()等方法时,会清空一级缓存。

二级缓存:指的是mybatis中SqlSessionFactory对象的缓存,由同一个SqlSessionFactory对象创建的SqlSession共享其缓存。

二级缓存使用步骤:

​ 一、让mybatis框架支持二级缓存(主配置文件配置);

​ 二、在映射文件中支持二级缓存(IUserDao.xml);

​ 三、让当前操作支持二级缓存(select标签中)

二级缓存存放的事数据,而不是对象。

本文地址:https://blog.csdn.net/qq_36443497/article/details/107191607

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网