当前位置: 首页 > news >正文

mybatis基本构成mybatis与hibernate的区别添加mybatis支持

目录

1. mybatis简介

2. mybatis基本构成

3. mybatis与hibernate的区别

4. 项目中添加mybatis支持


1. mybatis简介

Mybatis是Apache的一个Java开源项目,是一个支持动态Sql语句的持久层框架。Mybatis可以将Sql语句配置在XML文件中,避免将Sql语句硬编码在Java类中。与JDBC相比:
1)Mybatis通过参数映射方式,可以将参数灵活的配置在SQL语句中的配置文件中,避免在Java类中配置参数(JDBC)
2)Mybatis通过输出映射机制,将结果集的检索自动映射成相应的Java对象,避免对结果集手工检索(JDBC)
3)Mybatis可以通过Xml配置文件对数据库连接进行管理

2. mybatis基本构成

SqlSessionFactoryBuilder: 根据配置信息生成SqlSessionFactory
SqlSessionFactory: 用于生成SqlSession
SqlSession:
SqlSession是MyBatis的关键对象,通过这个接口可以操作命令,管理事务等
SqlMapper:MyBatis的设计组件,有java接口和xml文件构成。需要给出对应的sql映射和映射规则

3. mybatis与hibernate的区别

两者均为ORM框架,但也有一些不同

4. 项目中添加mybatis支持

1) 使用maven新建一个web工程
2) idea在创建web工程时不会自动创建java,resources,test等目录,可以手动创建

3)通过pom.xml添加必要的依赖,pom.xml文件随课件提供,直接将相关依赖考到项目中的pom.xml文件即可。

4)将mybatis核心配置文件(mybatis.cfg.xml),jdbc.properties, log4j.xml考到项目的resources目录下,并修改数据库的连接。

5) 在src/main/resources目录下创建mapper用于方式mybatis的映射文件

6)创建包的目录结构,如下图所示:

7)ssh2与ssm的对应关系

8)将课件中提供的PinYinUtil.java,MybatisSessionFactoryUtils.java考到util包下,这两个文件不能手动编写,但需要能够看懂。

9)编写model,即存放数据的对象,在ssh2时叫做entity。

10)mapper编写(相当于dao)。
10.1)在目录结构中加入一个mapper包,在该包中创建一个StudentMapper接口

10.2)编写相关的xml文件,可以从课件中考StudentMapper.xml作为例子
将xml文件中的namespace修改为刚才定义的StudentMapper接口的完整类名。

 

注意:在xml中注释的方法要在对应的java接口中注释掉,(注释掉只是为了少写点代码,尽快测试)

注:#{} 与 ${} 的区别
#{ }是预编译处理,MyBatis在处理#{ }时,它会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如上面的值 “4,44,514”就会变成“ ‘4,44,514’ ”

${ }是字符串替换, MyBatis在处理${ }时,它会将sql中的${ }替换为变量的值,传入的数据不会加两边加上单引号。

使用${ }会导致sql注入,不利于系统的安全性!

SQL注入:就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。常见的有匿名登录(在登录框输入恶意的字符串)、借助异常获取数据库信息等

11)service服务

12)在mybatis的核心配置文件中加入mapper

...
<mappers>    <mapper resource="mapper/StudentMapper.xml"/>
</mappers>

如果没有加入该配置,会报绑定异常:BindingException

12)测试服务
在将输入光标定位到需要创建测试类的名上,按alt+enter可以快速创建测试类。

http://www.lryc.cn/news/168496.html

相关文章:

  • c++23中的新功能之十四输入输出指针
  • Day42:网易云项目,路由进阶
  • Open3D(C++) 三维点云边界提取
  • AUTOSAR汽车电子嵌入式编程精讲300篇-经典 AUTOSAR 安全防御能力的分析及改善
  • LeetCode 1584. 连接所有点的最小费用【最小生成树】
  • 超简单,几行js代码就实现一个 vue3 的数字滚动效果!
  • 两阶段鲁棒优化matlab实现——CCG和benders
  • 二进制安全虚拟机Protostar靶场(4)写入shellcode,基础知识讲解 Stack Five
  • 【Flink实战】玩转Flink里面核心的Source Operator实战
  • [2023-09-12]Oracle备库查询报ORA-01187
  • leetcode 16.最接近的三数之和
  • antd table 自定义排序图标
  • 第十九章、【Linux】开机流程、模块管理与Loader
  • GMAC PHY介绍
  • 华为OD机考算法题:最远足迹
  • QScrollBar滚动条、QSlider滑块、 QDial表盘
  • Prometheus+Grafana可视化监控【MySQL状态】
  • 五,编译定制rom并刷机实现硬改(二)
  • Modbus协议详解3:数据帧格式 - RTU帧 ASCII帧的区别
  • 认识数据分析
  • Learn Prompt-ChatGPT 精选案例:写作博客
  • 《确保安全:PostgreSQL安全配置与最佳实践》
  • Unity中Shader抓取屏幕并实现扭曲效果
  • 深浅拷贝详解
  • @Scheduled 定时任务
  • 丙烯酸共聚聚氯乙烯树脂
  • Navicat导入Excel数据顺序变了
  • uni-app的生命周期
  • Vulnhub实战-DC9
  • 软件设计模式系列之七——原型模式