MyBatis入门介绍(一)
发布日期:2021-05-07 11:03:23 浏览次数:15 分类:技术文章

本文共 2894 字,大约阅读时间需要 9 分钟。

自学方法论: 理论 -> 实践 -> 理论 -> 实践-> 理论 -> 实践 反复迭代三遍

MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

Mybatis架构

在这里插入图片描述
1、mybatis配置
SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。
mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。
2、通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂。
3、由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession进行。
4、mybatis底层自定义了Executor执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。
5、Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。
6、Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。
7、Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。
mybatis默认使用log4j作为输出日志信息

xml文件详解:

namespace :命名空间,用于隔离sql语句,后面会讲另一层非常重要的作用

1、根据id查询用户信息:

parameterType:定义输入到sql中的映射类型

resultType:定义结果映射类型
#{id}表示使用preparedstatement设置占位符号并将输入变量id传到sql。

2、根据用户名查询用户信息

parameterType:定义输入到sql中的映射类型

resultType:定义结果映射类型
${value}表示使用参数将${value}替换,做字符串的拼接
注意:如果是取简单数量类型的参数,括号中的值必须为value

#{}和${}的区别:

#{}占位符:占位
如果传入的是基本类型,那么#{}中的变量名称可以随意写
如果传入的参数是pojo类型,那么#{}中的变量名称必须是pojo中的属性.属性.属性…
${}拼接符:字符串原样拼接
如果传入的是基本类型,那么${}中的变量名必须是value
如果传入的参数是pojo类型,那么${}中的变量名称必须是pojo中的属性.属性.属性…
注意:使用拼接符有可能造成sql注入,在页面输入的时候可以加入校验,不可输入sql关键字,不可输入空格

3、添加用户

select LAST_INSERT_ID()
insert into user(username,birthday,sex,address) values(#{ username},#{ birthday},#{ sex},#{ address})

添加selectKey实现将主键返回

keyProperty:返回的主键存储在pojo中的哪个属性
order:selectKey的执行顺序,是相对于insert语句来说,由于mysql的自增原理执行完insert语句之后才将主键生成,所以这里selectKey的执行顺序为after
resultType:返回的主键是什么类型
LAST_INSERT_ID():是mysql的函数,返回auto_increment自增列新记录id值

Mysql使用 uuid实现主键

将上面的selectKey标签内容改为如下:

select uuid()

注意这里使用的order是"BEFORE"

4、删除用户

delete from user where id=#{ id}

5、修改用户

update user set username=#{ username},birthday=#{ birthday},sex=#{ sex},address=#{ address} where id=#{ id}

Mapper接口开发需要遵循以下规范:

1、Mapper.xml文件中的namespace与mapper接口的类路径相同。
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql 的parameterType的类型相同
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

在SqlMapConfig.xml文件中加载UserMapper.xml文件

hibernate和mybatis区别:

hibernate:它是一个标准的orm框架,比较重量级,学习成本高.
优点:高度封装,使用起来不用写sql,开发的时候,会减低开发周期.
缺点:sql语句无法优化
应用场景:oa(办公自动化系统), erp(企业的流程系统)等,还有一些政府项目,
总的来说,在用户量不大,并发量小的时候使用.
mybatis:它不是一个orm框架, 它是对jdbc的轻量级封装, 学习成本低,比较简单
优点:学习成本低, sql语句可以优化, 执行效率高,速度快
缺点:编码量较大,会拖慢开发周期
应用场景: 互联网项目,比如电商,P2p等
总的来说用户量较大,高并发的项目.
高并发的时候是有很多用户在访问,导致出现系统数据不正确、丢失数据现象

映射文件:

1)传入参数类型通过parameterType属性指定
2)返回结果集类型通过resultType属性指定
3)将字段名和属性名通过resultMap做一一对应关系

上一篇:普歌-解决Tomcat启动后的控制台乱码问题(简单操作)
下一篇:普歌-毅雁团队-Tomcat安装及配置教程(傻瓜式安装)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年03月22日 16时46分46秒