| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> mybatis 总结 -> 正文阅读 |
|
[Java知识库]mybatis 总结 |
目录 一、jdbc的几个步骤1、加载驱动 2、获得一个链接 3、创建一个Statement对象 4、操作数据库 5、获得结果集 6、关闭资源 二、什么是mybatis1、一款优秀的持久层框架,支持自定义sql、存储过程及高级映射 2、几乎免除了jdbc代码、参数设置、结果集获取转换 3、通过简单的xml 或者 annotation 来配置和映射原始类型、接口和java pojo 为数据库记录 三、什么是ORMObject Relational Mapping , 对象 — 关系型数据库 — 映射 ,用以实现面向对象编程语言里不同类型系统的数据之间的转换。简单来讲就是将程序中的对象 与 关系型数据库相互映射。 优点: 1、提高开发效率 , 开发人员不用关系数据库相关的逻辑代码 2、ORM提供对数据库的映射 , 可以向操作对象一样 ,操作数据库 缺点: 1、牺牲程序的执行效率和会固定思维模式,降低了开发的灵活性。 从系统结构上来看,采用ORM的系统一般都是多层系统,系统的层次多了,效率就会降低。ORM是一种完全的面向对象的做法,而面向对象的做法也会对性能产生一定的影响。 在我们开发系统时,一般都有性能问题。性能问题主要产生在算法不正确和与数据库不正确的使用上。 ORM所生成的代码一般不太可能写出很高效的算法,在数据库应用上更有可能会被误用,主要体现在对持久对象的提取和和数据的加工处理上,如果用上了ORM,程序员很有可能将全部的数据提取到内存对象中,然后再进行过滤和加工处理,这样就容易产生性能问题。 在对对象做持久化时,ORM一般会持久化所有的属性,有时,这是不希望的。但ORM是一种工具,工具确实能解决一些重复,简单的劳动。这是不可否认的。但我们不能指望工具能一劳永逸的解决所有问题,有些问题还是需要特殊处理的,但需要特殊处理的部分对绝大多数的系统,应该是很少的。 四、mybatis优缺点优点: 1、基于sql语句编程,灵活性高;xml文件接触sql与代码的耦合;支持动态sql 2、相对原生jdbc , 减少50%的代码量,消除jdbc大量冗余代码 3、兼容多种数据库 4、能够很好的与spring集成 5、提供映射标签,支持对象与数据库的关系映射 缺点: 1、sql编写量大 2、sql依赖数据库,移植性差 适用场景: 1、专注于sql ,是一个足够灵活的dao层解决方案 2、对性能要求高或需求变化较多的项目 五、mybatis的分页Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,先把数据都查出来,然后再做分页。 可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。 六、分页插件的基本原理分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql(SQL拼接limit),根据dialect方言,添加对应的物理分页语句和物理分页参数,用到了技术JDK动态代理,用到了责任链设计模式。 七、插件的原理Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、Executor这4种接口的插件,Mybatis使用JDK的动态代理,为需要拦截的接口生成代理对象以实现接口方法拦截功能,每当执行这4种接口对象的方法时,就会进入拦截方法,具体就是InvocationHandler的invoke()方法,当然,只会拦截那些你指定需要拦截的方法。 八、如何编写一个插件编写插件:实现Mybatis的Interceptor接口并复写intercept()方法,然后再给插件编写注解,指定要拦截哪一个接口的哪些方法即可,最后在配置文件中配置你编写的插件。 九、动态sqlmybatis可以在xml文件里,以标签的形式编写动态sql,执行原理是基于ognl表达式完成逻辑判断,并动态调整sql的功能 mybatis提供9中动态sql标签:where / if / trim / foreach / chose / when / otherwise / bind 十、xml映射文件中有哪些标签insert / update / delete / select <resultMap> <parameterMap> <sql> <include> <selectKey> 十一、mybatis是否支持延迟加载Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载 原理: 比如调用 十二、mapper.xml对应的dao接口原理简单说:使用了JDK动态代理和反射,把接口和xml绑定在一起而搞定的。 十三、#{} 和 ${} 区别${} 字符串替换 取变量的值 ,并完成替换 #{} 预处理 将#{} 替换为 ? , 调用PreparedStatement的set方法赋值 十四、.Mybatis执行批量插入,能返回数据库主键列表吗1、对于支持生成自增主键的数据库:增加 useGenerateKeys和keyProperty , 2、不支持生成自增主键的数据库:使用 方式: <insert id="insertAuthor" useGeneratedKeys="true" ? ?keyProperty="id"> insert into Author (username, password, email, bio) values ?<foreach item="item" collection="list" separator=","> ? (#{item.username}, #{item.password}, #{item.email}, #{item.bio}) ?</foreach> </insert> 十五、不同xml文件 , id是否可以重复不同xml文件 , 如果配置了namespace , id是可以重复的 , 否则不能重复。 原因就是namespace+id是作为Map<String, MappedStatement>的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。有了namespace,自然id就可以重复,namespace不同,namespace+id自然也就不同。 十六、Mybatis中Executor执行器的区别Mybatis有三种基本的Executor执行器,「SimpleExecutor、ReuseExecutor、BatchExecutor。」
作用范围:Executor的这些特点,都严格限制在SqlSession生命周期范围内。 十七、Mybatis全局配置文件中有哪些标签configuration 配置 properties 属性:可以加载 properties配置文件的信息 settings 设置:可以设置mybatis的全局属性 typeAliases 类型命名 typeHandlers 类型处理器 objectFactory 对象工厂 plugins 插件 environments 环境 environment 环境变量 transactionManager 事务管理器 dataSource 数据源 mappers 映射器 十八、实体中属性名与表字段不一致1、设置别名 2、<resultMap> 设置映射关系 3、注解设置摄影关系 十九、mybatis编写流程1、创建sqlSessionFactory 2、通过sqlSessionFactory 创建 sqlSession 3、通过sqlSession 获取一个mapper 4、通过mapper执行操作 5、提交事务 、 关闭连接 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/18 17:49:55- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |