Mybatis学习-GetMybatisInMyHead
认知
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
最近在鹅厂实习,也是在工作需要什么就去学习什么,本篇博客是实习过程中学习Mybatis的一点总结和记录,目的是为了方便自己以后使用Mybatis。
操作基本流程
1、配置mybatis-config.xml文件
该文件是Mybatis的必备文件,当然也可以采取代码中set的方式,但是不推荐。
配置优化
这些配置都可以在中文文档中找到,这里主要是记录下使用到的配置
- 别名优化,避免使用全类名
- 属性优化,自动驼峰转换、日志工厂等等
- 单独配置数据库连接配置文件..........
2、编写工具类,获取SqlSession
过程:SqlSessionFactoryBuilder -> SqlSessionFactory -> SqlSession
该方法应该编写为一个静态方法,用于不断获取SqlSession连接。获取的连接可以指定是否自动提交
同时这里可以看到SqlSessionFactory明显是单例模式,SqlSession是工厂模式。
3、编写需要的POJO和对应的POJOMapper(inteface)
这里就是Mybatis的好处了,可以将数据库查询出来的数据直接匹配到Java普通对象上去。
lombak插件
对于POJO类,需要编写属性名、无参构造方法,[有参构造方法],Getter和Setter方法以及toString方法。可以采用lombak插件进行简化代码编写,通过@Data和@NoArgsConstructor和@AllArgsConstructor来自动生成方法,只需要编写属性名即可。
4、编写POJOMapper.xml或者注解方式
这里就是实现POJOMapper中定义的方法,复杂的语句或者结果集映射最好采用.xml方式,简单的语句采用@注解方式即可。
.xml 方式
在这种方式下能使用Mybatis功能更多,同时也更加灵活
ResultMap结果集映射
- 简单的结果集映射(一对一):仅仅是修改字段和SQL查询出来的字段不一致的情况。
- 复杂的结果集映射(多对一):查询出来的数据字段对应着一个对象,但是该对象包含着另外一种对象,这时候就要使用到association标签,例如练习代码中多位学生对应着一位老师,每个学生对象中包含着老师对象。
- 复杂的结果集映射(一对多):查询出来的数据表示着一个对象,但是该对象包含着另外一种对象的集合,这时候就要使用到collection标签,例如练习代码中一位老师对应着多位学生,每个老师对象中包含着学生对象的集合。
使用复杂结果集映射可以采用两种方式(例子见练习代码mybatis-05):
- 子查询的方式:利用父查询的某字段查询出关联对象的信息输出,这种方式SQL代码简单但是.xml文件逻辑复杂
- 联表查询的方式:直接利用join的方式写出对应的SQL代码,然后在.xml文件中写出查询字段的结果映射即可。
动态SQL
动态SQL的目的是减少在Java代码的SQL语句的逻辑判断拼接和避免重复SQL(重复指的是仅仅只是where或者是set不同)的编写(例子见练习代码mybatis-06)。
- <if 标签 类似于if
- <choose <when <otherwise 标签 类似于switch
- <where <set 标签 是<trim标签的特殊情况,可以用来代替SQL语句中where和set关键字
- <sql <include 标签 代码片段,可以使用相同的代码片段
- <foreach 标签,生成一段可以控制开头符号、结尾符号和分隔符的SQL语句
注解方式
在这种方式下能使用基本的SQL语句和映射
- @Insert(插入SQL)
- @Delete(删除SQL)
- @Update(更新SQL)
- @Select(查询SQL)
- @Parm(字段别名)
5、注册Mapper
在mybatis-config文件中注册mapper,有三种方式:
- resource:指定.xml文件的路径,如果只采用了注解的方式,那么就不能用该方式注册Mapper
- package:指定.xml文件包名,必须要保证POJOMapper和POJOMapper.xml在一包下,同时如果只采用了注解方式没有问题。
- class:指定注册Mapper的全类名,必须要保证POJOMapper和POJOMapper.xml在一包下同时如果只采用了注解方式没有问题。
6、测试
Mybatis缓存
一级缓存,会话级缓存,默认开启不可关闭。增删改操作会刷新缓存,除非设置不刷新
二级缓存,Mapper级缓存,会话关闭时一级缓存刷写到二级缓存中,
查询顺序:二级缓存 -> 一级缓存 -> 数据库
Mybatis学习-GetMybatisInMyHead的更多相关文章
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...
- MyBatis学习总结(八)——Mybatis3.x与Spring4.x整合(转载)
孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(八)--Mybatis3.x与Spring4.x整合 一.搭建开发环境 1.1.使用Maven创建Web项目 执行如下命令: m ...
- MyBatis学习总结(七)——Mybatis缓存(转载)
孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(七)--Mybatis缓存 一.MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的 ...
- (原创)mybatis学习二,spring和mybatis的融合
mybatis学习一夯实基础 上文介绍了mybatis的相关知识,这一节主要来介绍mybaits和spring的融合 一,环境搭建 1,jar包下载,下载路径为jar包 2,将包导入到java工程中 ...
- (原创)mybatis学习一,夯实基础
一,what?(是什么) MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可 ...
- MyBatis学习--简单的增删改查
jdbc程序 在学习MyBatis的时候先简单了解下JDBC编程的方式,我们以一个简单的查询为例,使用JDBC编程,如下: Public static void main(String[] args) ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...
- 【Todo】Mybatis学习-偏理论
之前写过好几篇Mybatis相关的文章: http://www.cnblogs.com/charlesblc/p/5906431.html <SSM(SpringMVC+Spring+Myba ...
- MyBatis学习系列三——结合Spring
目录 MyBatis学习系列一之环境搭建 MyBatis学习系列二——增删改查 MyBatis学习系列三——结合Spring MyBatis在项目中应用一般都要结合Spring,这一章主要把MyBat ...
随机推荐
- 哈工大LTP进阶使用-三元组事件抽取
哈工大LTP基本使用-分词.词性标注.依存句法分析.命名实体识别.角色标注 上一节我们讲了LTP的基本使用,接下来我们使用其进行事件抽取. 参考代码:https://github.com/liuhua ...
- 【故障公告】数据库服务器 CPU 100% 引发网站故障
悄悄地它又突然来了 -- 数据库服务器 CPU 100% 问题,上次光临时间是 3-30 8:48,这次是 4-28 9:41. 这次我们做出了快速反应,发现后立即进行主备切换,这次一次切换成功,CP ...
- OO Unit2 总结
OO Unit2 总结 OO课Unit2电梯仿真项目技术回顾 BUAA.1823.邓新宇 2020/4/17 Part1 设计策略 从多线程的协同和同步控制方面,分析和总结自己三次作业的设计策略 第一 ...
- Redis系统学习之事物
Redis事物操作 Redis 事务可以一次执行多个命令, 并且带有以下三个重要的保证: 批量操作在发送 EXEC 命令前被放入队列缓存. 收到 EXEC 命令后进入事务执行,事务中任意命令执行失败, ...
- jmeter响应时间与postman响应时间为什么不一样?
postman响应时间 是一个线程或者一个用户再者说是发送一次请求的响应时间,一般都是200ms一下: 而jmeter属于并行,就是多个用户去访问这个功能点或者接口,多个用户同时访问,就会造成压力,自 ...
- windows黑窗口命令笔记
windows有个黑窗口,吃惊吧!意外吧!! 哈哈,我是真的有些吃惊的!! nslookup ipconfig /all ipconfig /flushdns windows 声音修复 windows ...
- 手动脱PeCompact 2.20壳实战
作者:Fly2015 PeCompact壳又是一个没有听说过的壳,需要脱壳的程序是吾爱破解培训的第一课的选修作业四.最近对脱壳有点上瘾了,当然也遭受了脱壳受挫的无奈,但是比较幸运还是把这个壳给搞了. ...
- POJ 2762 单连通图
题意: 给你一个有向图,问你这个图是不是单连通图,单连通就是任意两点之间至少存在一条可达路径. 思路: 先强连通所点,重新建图,此时的图不存在环,然后我们在看看是否存在一条路径可以 ...
- cf534D 枚举握手次数
题意: 有n个学生进教室,先后顺序不同,每个人进去后会和当前在教室里的人握手,并且记录人数,而且当教室里有超过三个人的时候 他们有可能组队去参加比赛,后来的人看不到他们. 思路: ...
- PyCharm调试程序
当我们在运行python程序出错时,我们需要定位到出错的位置.有时候通过程序运行时的报错可以很容易的找到出错的位置,但是有时候必须得通过调试程序才能找出我们的错误. PyCharm中要调试程序的话,在 ...