java面试题/认证答辩 ---主流框架(mybatis)

  1. 掌握程度:
    熟悉:熟悉相关框架的基本开发技巧,能使用框架进行基本开发
    掌握:理解AOP,IOC等概念,熟悉相关框架的基本实现原理,能独立使用相关框架搭建中型产品和项目。
    精通:熟悉相关框架源代码,能够使用拦截器,AOP等技术进行系统安全和数据监控等复杂功能的开发
    综合应用:掌握相关框架实现原理,能够对框架进行扩展开发,有大型产品或项目框架选型和搭建经验,具有问题排查解决能力

mybatis
参考:

https://blog.csdn.net/ITITII/article/details/79969447
http://www.mybatis.cn/archives/706.html
https://blog.csdn.net/mrright_senlypan/category_10650064.html

基础使用jdbc 连接数据库:

   Connection connection = null;
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            //1、加载数据库驱动
            Class.forName("com.mysql.cj.jdbc.Driver");
            //2、通过驱动管理类获取数据库链接
            String url = "jdbc:mysql://localhost:3306/qh_platform";
            String user ="root";
            String password ="root@123";
            connection =  DriverManager.getConnection(url, user, password);
            //3、定义sql语句 ?表示占位符
            String sql = "select * from plan where id = ?";
            //4、获取数据库执行对象statement
            preparedStatement = connection.prepareStatement(sql);
            //5、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
            preparedStatement.setString(1, "67");
            //6、向数据库发出sql执行查询,查询出结果集
            resultSet =  preparedStatement.executeQuery();
            //7、遍历查询结果集
            while(resultSet.next()){
                System.out.println(resultSet.getString("id")+"  "+resultSet.getString("plan_name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            //8、释放资源
            if(resultSet!=null){
                try {
                    resultSet.close();//释放结果集
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(preparedStatement!=null){
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(connection!=null){
                try {
                    connection.close();//关闭数据库连接
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

Mybatis工作原理:
java面试题/认证答辩 ---主流框架(mybatis)_第1张图片
Mybatis核心对象
(1)SqlSession对象,该对象中包含了执行SQL语句的所有方法
(2)Executor接口,它将根据SqlSession传递的参数动态地生成需要执行的SQL语句,同时负责查询缓存的维护
(3)MappedStatement对象,该对象是对映射SQL的封装,用于存储要映射的SQL语句的id、参数等信息。
(4)ResultHandler对象,用于对返回的结果进行处理,最终得到自己想要的数据格式或类型。

Mybatis 核心配置文件
① properties(属性): 驱动 账号 密码
② settings(全局设置)
③ typeAliases(类型别名)
④typeHandlers(类型处理器)
⑤objectFactory(对象工厂)
⑥plugins(插件标签)
⑦environments(环境配置)
⑧databaseIDProvider(数据库厂商标识)
⑨Mappers(映射器)

一些面试题 参考:

https://zhuanlan.zhihu.com/p/368838277
  1. 通常一个xml文件都有一个dao接口与之对应,请问这个dao接口的工作原理是什么? dao接口中的参数能重载吗?
	: Dao接口就是常说的Mapper接口, 接口的全限名就是映射文件中的namespace的值,接口的方法名就是映射文件的MappedStatement的id值, 接口方法内的参数,就是传递给sql的参数, Mapper接口没有实现类,当接口被调用时,接口全限名 + 方法名 拼接的字符串可以定位一个MappedStatement
	
	Dao接口中的方法不能重载, 因为时全限名 + 方法名在mapper.xml中查找 xml中id 不能重复 会报错
	(namespace 不同 id 可以重复)
	xml中的id 为什么不能重复   使用namespace+id是作为Map,MappedStatement>的key使用
	
	Dao接口的工作原理是 JDK的动态代理, Mybatis运行时 会使用JDK动态代理为接口生成代理proxy, 代理对象会拦截接口方法, 转而执行MappendStatement所代表的sql
  1. Mybatis动态sql是什么? 动态sql的原理是什么?
	Mybatis动态sql可以让我们在xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,Mybatis提供了9种动态sql标签
	① if
	② where
	③ trim
	④ set
	⑤ foreach
	⑥ choose
  1. mybatis是如何分页的 分页插件的原理是什么?
参考: https://www.cnblogs.com/aeolian/p/9229149.html
分页方式1: 查出所有数据,然后再list中进行分页
分页方式2:  sql 分页 使用limit
分页方式3: 拦截器分页, 创建拦截器 拦截mybatis接口方法()
分页方式4: 使用RowBounds对象进行分页(内存分页,只适合数据量小的情况下)
  1. Mybatis 缓存机制
参考: https://www.w3cschool.cn/mybatis/mybatis-xlc73bt4.html

mybatis缓存分为: 一级缓存和二级缓存
一级缓存: sqlsesson缓存, 只在sqlsession内有效(默认开启)
执行(insert、update、delete),并 commit 了,一级缓存会被清空
二级缓存: 是mapper级别的, 也就是同一个namespace的mapper.xml,当多个SqlSession
使用同一个Mapper操作数据库的时候,得到的数据会在二级缓存中存储.(二级缓存默认关闭)

你可能感兴趣的:(面试刷题,mysql)