java面试题之mybatis篇
2021-02-11 07:16
                         标签:color   jdbc   poj   oci   指定   ring   rman   actor   学生    1,什么是Mybatis?Mybatis的优缺点?   MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。   JDBC有四个核心对象:     (1)DriverManager,用于注册数据库连接   Mybatis也有四个核心对象:   (1)SqlSession对象,该对象中包含了执行SQL语句的所有方法【1】。类似于JDBC里面的Connection 【2】。   (2)Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护。类似于JDBC里面的Statement/PrepareStatement。      优点:   (1)它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。   (2)很好的与各种数据库兼容(因为MyBatis使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。   (3)基于SQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL写在XML里,解除sql与程序代码的耦合,便于统一管理;提供XML标签,支持编写动态SQL语句,并可重用。   (4)能与Spring很好的集成     缺点:   (1)SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。   (2)SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。     2,Mybatis的工作流程        (1)读取配置文件,配置文件包含数据库连接信息和Mapper映射文件或者Mapper包路径。   (2)有了这些信息就能通过SqlSessionFactoryBuilder类的build()方法来创建SqlSessionFactory。SqlSessionFactory的生命周期是程序级,程序运行的时候建立起来,程序结束的时候消亡   (3)再通过调用SqlSessionFactory的openSession()方法产生SqlSession,该对象中包含了执行SQL语句增删改查的所有方法。SqlSession是过程级,一个方法中建立,方法结束应该关闭   (4)创建Executor(执行器)接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护   (5)在Executor接口的执行方法中有一个MappedStatement类型的参数,该参数是对映射信息的封装,用于存储要映射的SQL语句的id、参数等信息   (6)在有了sql语句的映射信息后就会到指定数据库中执行sql语句8        3,#{}和${}的区别是什么?   #{}是预编译处理,${}是字符串替换   Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;     Mybatis在处理${}时,就是把${}替换成变量的值。   使用#{}可以有效的防止SQL注入,提高系统安全性。     4,如何解决实体类中的属性名和表中的字段名不一样?   最常用的是ResultMap:            5,接口的动态代理需要满足哪些要求?     (1)namespace必须是接口的全路径名           (2)接口的方法名必须和接口的id一致              (3)接口的入参与parameterType类型一致,返回值与resultType类型一致          6,Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重复?   不同的Xml映射文件,如果配置了namespace,那么id可以重复;如果没有配置namespace,那么id不能重复;原因就是namespace+id是作为Map   7,一对一关联查询和一对多关联查询的实现   一对一关联查询:订单表(Order)是主表,学生表(student)是关联表   定义resultMap,使用associate标签关联一对一关系表        
    一对多关联查询:学生表(Student)为主表,订单表(Order)为关联表      定义resultMap,使用collection标签关联一对一关系表      
        java面试题之mybatis篇 标签:color   jdbc   poj   oci   指定   ring   rman   actor   学生    原文地址:https://www.cnblogs.com/javaisbest/p/12722944.html
    (2)Connection,与数据库连接对象
    (3)Statement/PrepareStatement,操作数据库SQL语句的对象
    (4)ResultSet,结果集或一张虚拟表
  (3)MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
  (4)ResultHandler对象,用于对返回的结果进行处理,最终得到自己想要的数据格式或类型。可以自定义返回类型。







上一篇:java 算法实现
下一篇:java读取tsv文件