MyBatis

基础

问答

你对MyBatis的理解?

是什么?

  • Mybatis本是apache的一个开源项目iBatis。
  • 是java编写的优秀的持久层框架,它支持定制化 sql、存储过程以及高级映射,实现了结果集的封装。
  • mybatis避免了几乎所有的 jdbc代码和手动设置参数以及获取结果集。
  • 是一个半ORM(对象关系映射)框架,内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建Statement等繁琐的过程;
  • MyBatis可以使用简单的 XML 或注解来配置和映射原生类型、接口,将Java 的 pojo(plain old Java objects,普通老式 Java 对象)映射成数据库中的记录。

通过XML文件 或 注释的方式,将要执行的各种Statemet配置起来,并通过java对象和Statement中SQL的动态参数进行映射生成最终执行的SQL语句,最后由MyBatis框架执行SQL并将结果映射为java对象返回。(从执行SQL到返回Result的过程)。

MyBatis的优缺点有哪些?

优点
对于JDBC,减少了50%的代码量;
最简单的持久化框架,小巧且简单易学;
SQL写在XML里,从程序代码中彻底分离,降低耦合度,便于统一管理,可重用;
提供XML标签,支持编写动态SQL语句(XML中使用if, else)。
提供映射标签,支持对象与数据库的ORM字段关系映射(在XML中配置映射关系,也可以使用注解)。

缺点
SQL语句的编写工作量较大,尤其是字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。
SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

MyBatis与Hibernate有哪些不同?

区别MyBatisHibernate
自动性只有基本的字段映射,需要通过手写sql来实现和管理完全可以自动生成sql
数据库移植性移植性差,由于需要手写sql移植性好,依赖于强大的映射结构和hql语言,降低了对象与数据库的耦合性。
日志系统基本记录功能较为健全
关心细节更多关注技术细节,由于其使用简单配置较为复杂,学习成本高
sql直接优化较为方便sql是自动生成的,无法直接维护sql

MyBatis中的#{} 和 ${} 有什么不同?*

动态sql是Mybatis的主要特性之一。
Mybatis提供了两种支持动态sql的语法:#{} 和 ${}

区别#{}${}
符号类型参数占位符,即预编译字符串替换符,即SQL拼接
处理处理#{}会将#{}替换为?号,调用PreparedStatement的set方法来赋值把${} 替换成变量的值
防注入问题很大程度上能防止sql注入不能防止sql注入
参数替换位置在DBMS中在DBMS外
参数解析将传入的数据都当做一个字符串,
会对传入的变量自动加一个单引号
将传入的参数直接显示生成在sql中,
不加任何引号
用$的情况MyBatis排序使用order by,动态参数时使用$而不是#
一般用于传入数据库对象(比如表名)
sql执行过程编译好SQL语句后再去取值取值以后再去编译SQL语句
流程动态解析→预编译→执行动态解析→编译→执行
一般情况一般可以用#就别用$

MyBatis是如何进行分页的?分页插件的原理是什么?

MyBatis有哪几种分页方式?

MyBatis逻辑分页和物理分页的区别是什么?

MyBatis是否支持延时加载?如果支持,它的实现原理是什么?

说一下MyBatis的一级缓存和二级缓存?

MyBatis有哪些执行器(Excetor)?

MyBatis动态SQL是做什么的?都有哪些动态SQL?简述一下动态SQL的执行原理?

实战

问题1:mybatis+mysql 实现数据读取

参考博客;https://blog.csdn.net/qq_39746820/article/details/124571053
已经实现;

参考博客:https://blog.csdn.net/huangxiaoben/article/details/130683023
该博客中mapper继承的是BaseMapper,该类中以及存在数据库的增删改查等操作;

思考1:mybatis实现数据持久化

在springboot项目中会涉及到entity、mapper、controller、service四个文件夹
entity = 存储与数据库中某个数据表对应的实例对象的类;
	通过@TableName("table name") 将数据库中的表映射到该类上;
	通过resource文件夹中的与mapper同目录的.xml文件,编写sql语句实现映射;
	
mapper = 接口,创建要执行的抽象方法,具体的实现在resource中的同文件夹索引目录下;注解是@mapper
	demo\src\main\java\com\example\testxhj1\demo\mapper\TestClass1Mapper.java
	demo\src\main\resources\com\example\testxhj1\demo\mapper\TestClass1Mapper.xml
	可以看出 两个文件夹只有java 以及 resources的区别;
.xml文件:
	<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">        
<mapper namespace= "com.example.testxhj1.demo.mapper.TestClass1Mapper">
<select id="selectTestClass1ById" resultType="com.example.testxhj1.demo.entity.TestClass1">
        select id,str1,str2 from table1 where id = #{id}
    </select>
   // 其中id的内容需要与mapper接口的抽象方法名称一致;
</mapper>

service = 与mapper接口相同,但是注解不同 @Service 同样也是接口
	serviceImpl service接口的实现;使用mapper接口实现,自动装载@Autowired;
	
controller = 类,自动装载service接口;
整体调用流程是:controller类--service接口实现-mapper接口

问题2:mybatis+mysql 导入csv数据

参考博客:
https://blog.51cto.com/u_16213374/7691073
https://cloud.tencent.com/developer/article/2106459

在这里插入图片描述
在这里插入图片描述

扩展

ORM

ORM = 对象关系映射。
ORM = Object Relational Mapping对象关系映射,就是把数据库表和实体类及实体类的属性对应起来,让开发者操作实体类就可以实现操作数据库表;
封装了jdbc操作的很多细节,使开发者只需要关注sql语句本身,而无需关注注册驱动、建立连接等复杂过程。

hql语言

hql语言 = hibernate query language的缩写,提供更加丰富灵活、更为强大的查询能力。sql查询的是表和表中的列;hql查询的是对象与对象中的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值