4-6 Mabatis 框架
Mabatis 框架
Ⅰ.关于Mabatis
对数据库中的数据进行访问的框架
数据库执行过程:
连接数据库-->准备好SQL-->发送SQL语句-->执行语句-->获取结果-->关闭
1.Mabatis工程创建
- 创建流程了解即可
1.创建maven项目
可以更方便的管理依赖项(下载依赖项和关联依赖项)
添加依赖
框架 作用 依赖项 mabatis 对数据库的数据进行访问的框架 mybatis mabatis-spring Mybatis整合Spring mabatis-spring spring 创建和管理对象 spring-context jdbc 创建和管理数据库编程 spring-jdbc mysql connector MySQL连接的依赖项 mysql-connector-java DBCP 数据库连接池的依赖项 commons-dbcp2 junit 测试 junit-jupiter-api
2.配置Mabatis
datasource.properties
连接数据库的参数- url
- driver
- username
- password
使用mybatis时,配置SQL的XML文件的位置- classpath:mapper/AdminMapper.xml
配置类SpringConfig类
@PropertySource(classpath:datasource.properties)
- @PropertySource是Spring框架的注解,用于读取properties类型的配置文件,读取到的值将存入到Spring容器的Environment对象中
- @Value注解是将Environment中对应的对象读出来
配制出一个数据源:Datasource
使框架连接数据库;
使用(DBCP2)的BasicDatasource(可换其它的source)设置datasource的值;
返回datasource的值会保存在Spring容器中,供随时调用;
SqlSessionFactoryBean
- mabatis框架正常运行的前提:获取文件位置和数据源
- mabatis的强制要求配置
- datasource(是哪一个)
- MapperLocations(在哪儿)
配置MapperScan
- 指定接口所在的根包
- MapperScan("cn.tedu.mybatis.mapper")
- 用于Mybatis处理数据的接口被Mybatis识别
创建数据库表字段对应的类例如:Admin
- implements Serializable序列化接口
- 私有属性private
- getter and setter
- equals() and hashcode()
- toString()
3.实现功能
写Mapper接口里边的抽象方法:(方法不允许重载)
- 定义抽象方法
返回值类型
- 增删改:返回int
- 查询:返回对应的结果只类型
- 参数:
- 参数超过一个需要添加@Param注解
- 参数太多,需要进行封装例如:Admin
xml文件配置sql
- namespace接口:必须实现
- SQL语句
- 根据查询类型选取相应的节点
- id的值就是抽象方法的名称
- 获取自动编号的值:
useGeneratedKeys="true" keyProperty="id"
建议:
不建议加分号
设计大于需求
查询
- 查询所使用的必须是select节点
- select节点必须配置resultType或resultMap中的一个
- resultType与resultMap
resultType- 的值就是抽象方法的返回值类型的全限定名
resultMap- 节点的作用:指导mybatis将查询到的结果集封装到对象中
- id:自定义名称
- type:封装查询结果的类型的全限定名
- -查询某1条记录
- 通过测试可以发现:当存在匹配的数据时,将可以查询到数据,当不存在匹配的数据时,将返回null
Ⅱ.动态sql
1.<foreach>节点:重要
其它节点
//
Ⅲ.关联查询
1.RBAC
- Role Based Access Control(基于角色的访问控制)
- 经典的用户权限管理的设计思路
- 用户、角色、权限将分配到各种角色上,
- 用户可以关联某种角色,
- 进而实现用户与权限相关
- unsigned--无符号位(无负数)
- comment(备注,注释)
- 经典的用户权限管理的设计思路
2.<sql>节点封装(xml)
由于不建议使用星号表示字段列表,而关联查询时,由于涉及多张表,则字段列表可能较长,可以使用
<sql>节点封装字段列表,并在编写SQL语句时,使用<include>节点进行引用使用封装了查询的字段列表,与resultMap的相性更好,所以,在开发实践中,通常结合一起使用
resultMap节点- resultMap节点的作用:指导mybatis将查询到的结果集封装到对象中
- resultMap节点的id属性:自定义名称
- resultMap节点的type属性:封装查询结果的类型的全限定名
- 主键应该使用id节点进行配置,非主键、非集合的使用result节点进行配置
1.
result子节点- 主键应该使用id节点进行配置,非主键、非集合的使用result节点进行配置
- column=结果集中的列名,property=属性名
- 在关联查询中,即便结果集中的列名与类的属性名完全相同,也必须配置
2.
collection子节点- collection子节点:用于配置1对多关系的数据部分,通常在类中是List类型的属性
- collection子节点的ofType:List集合中的元素的类型
- resultMap节点的作用:指导mybatis将查询到的结果集封装到对象中
id节点作为主键具有唯一性
Ⅳ.小结
1.了解Spring框架的MYbatis工程
2.了解整合了Spring框架的Mybatis工程的配置
3.掌握声明抽象方法的原则
返回值类型:
- 增删改 返回int
- 查询
- 统计 int
- 单条结果 返回可装下的数据类型
- 多条结果
- List
- /String...
- /String[]
方法名称
- 自定义,不重载
参数列表
根据需
要执行的sql语句来设计当需要进行插入数据时,必须将参数进行
封装建议配置获取自动ID:(设计大于需求)
useGeneratedKeys="true" keyProperty="id"
其它类型的操作
- 参数较多,可以封装
- 1个参数直接声明
- 如果超过一个数量不多可以,在每个参数之前添加@Param注解
4.配置sql语句
了解注解配置sql语句
- @Insert/@Select...
掌握xml配置sql语句
- xml配置sql语句的优点
- 更加直观,方便阅读
- 易于长篇sql语句;
- 利于分工合作
- 易于更多复杂sql语句的实现(动态sql/关联查询...)
- XML文件需要顶部的特殊声明==
- 网上下载/复制粘贴
- *根节点是
<mapper>,且必须配置namespace--取值为对应的Java接口的全限定名 - 根据执行的sql语句来选择不同的//...节点,都必须配置id属性==>取值为对应的抽象方法的名称
- 当
插入数据时,当需要获取自动生成的主键值时,需要在节点上配置useGeneratedKeys和keyProperty属性 - 在
<select>节点上,必须配置resultMap或者resultType属性中的一个
- xml配置sql语句的优点
掌握使用
<sql>封装sql语句片段- 使用
<include>进行引用,实现sql语句的复用
- 使用
掌握
<resultMap>的配置方式*主键列与属性的映射必须使用子节点配置
mabatis在处理id时,它会认为值必须是唯一的,
如果连续读到了两条一样的数据,它会跳过第2条记录,
它会认为它和第一条是一样的,它就不管了
在一对多,多对多的查询中,集合类型的属性的映射必须使用
<collection>子节点进行配置其他列与属性的映射使用
<result>子节点配置在单表的查询中,列与属性名一样,可以不必显示的配置
在关联查询中,即使列与属性名一样,也必须显示的配置出来
理解
<resultType>与<resultMap>的使用原则- 尽可能的全部使用resultMap
- 如果查询结果是单一的某一个数据类型(例如基本数据类型或字符串或某个时间等),则使用resultType
掌握动态sql中的
<foreach>的使用大概了解动态sql中的其他标签
4-6 Mabatis 框架的更多相关文章
- 在spring+springMvc+mabatis框架下集成swagger
我是在ssm框架下集成swagger的,具体的ssm搭建可以看这篇博文: Intellij Idea下搭建基于Spring+SpringMvc+MyBatis的WebApi接口架构 本项目的GitHu ...
- Mybatis学习笔记(九) —— Mybatis逆向工程
一.什么是Mybatis逆向工程? 简单的解释就是通过数据库中的单表,自动生成java代码. 我们平时在使用Mabatis框架进行Web应用开发的过程中,需要根据数据库表编写对应的Pojo类和Mapp ...
- Mybatis初步认识
分三层 第一章 1.三层架构 界面层:和用户打交道,接收用户的请求参数明显是处理结果的(jsp,html,servlet) 业务逻辑层:接收了界面层传递的数据,计算逻辑,调用数据库,获取数据 数据访问 ...
- SSM框架总结(1)
----------------------20170106-------------------------------------- 1.mabatis.genertor中自动生成文件,需要在ge ...
- spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架
前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...
- 在eclipse中使用Maven分模块搭建SSM框架,创建jar、war、pom工程模块教学,项目的热部署,需要的可以留下邮箱,给大家发整理过的Maven笔记
第一章:Maven概述 (1)Maven是一个项目构建工具,由apache提供,用Java开发的 (2)构建工具:Ant(蚂蚁),Maven(专家) (3)构建工具作用:帮助程序员进行项目的创建,目录 ...
- SSM框架搭建详细解析
总结了一下搭建SSM框架流程,在以后用到的时候方便回头使用. 使用工具:MyEclipse 2015:Tomcat 8版本:jdk1.8版本. 首先: 1:创建一个WebProject项目,jdk1. ...
- shiro框架整合ssm框架
下面我通过一个web的maven项目来讲解如何将shiro整合ssm框架,具体结构如下图 一.引入依赖的jar包 <?xml version="1.0" encoding=& ...
- ssm项目框架搭建(增删改查案例实现)——(SpringMVC+Spring+mybatis项目整合)
Spring 常用注解 内容 一.基本概念 1. Spring 2. SpringMVC 3. MyBatis 二.开发环境搭建 1. 创建 maven 项目 2. SSM整合 2.1 项目结构图 2 ...
随机推荐
- 创建进程,join方法,进程对象相关属性和方法,僵尸进程和孤儿进程,守护进程,互斥锁
创建进程 在python中提供了一个multiprocessing模块可以帮助我们使用多进程解决问题.在multiprocessing 模块中有一个类Process. from multiproces ...
- React 与 Hooks 如何使用 TypeScript 书写类型?
React 与 Hooks 如何使用 TypeScript 书写类型? 本文写于 2020 年 9 月 20 日 函数组件与 TS 对于 Hooks 来说是不支持使用 class 组件的. 如何在函数 ...
- C语言函数调用栈
C语言函数调用栈 栈溢出(stack overflow)是最常见的二进制漏洞,在介绍栈溢出之前,我们首先需要了解函数调用栈. 函数调用栈是一块连续的用来保存函数运行状态的内存区域,调用函数(calle ...
- CentOS自动同步时间
安装ntpdate yum install ntpdate -y 测试是否正常 ntpdate cn.ntp.org.cn # 正常情况 [root@centos7 www]# ntpdate cn. ...
- 题解 P7075 [CSP-S2020] 儒略日
当时考场上因为这个炸掉,一年后回来复仇. 这里提供一个与大多数人不一样的做法. 首先考虑一个简单一些的问题,怎么应付单个询问? 不难想到,我们对于一个日期,让他从 \(-4713\) 年 \(1\) ...
- Kafka消息的压缩机制
最近在做 AWS cost saving 的事情,对于 Kafka 消息集群,计划通过压缩消息来减少消息存储所占空间,从而达到减少 cost 的目的.本文将结合源码从 Kafka 支持的消息压缩类型. ...
- React简单教程-5-使用mock
前言 一个前后端分离的项目,前端人员需要对接后端的接口.如果在后端的接口没有开发好,或者没有测试版可以对接的情况下,前端人员也不能坐等后端接口写好后再开始开发. 一个项目的,理想情况下接口的规范应该是 ...
- 一个全新的Vue拖拽特性实现:“调整尺寸”部分
关于拖拽 CabloyJS提供了完备的拖拽特性,可以实现移动和调整尺寸两大类功能,这里对调整尺寸的开发进行阐述 关于移动的开发,请参见:拖拽:移动 演示 开发步骤 下面以模块test-party为例, ...
- zigbee技术数传电台在石油探井状态监测系统
石油探井分布分散,数量众多,出现异常现象需及时处理.人工巡视耗时长.时效性差:有线传输存在布线繁琐.成本高.现场无移动网络覆盖等诸多缺点. 现需要一种支持大量接入.覆盖范围广.数据传输高效且有数据中心 ...
- .NET 处理[未能为 SSLTLS 安全通道建立信任关系]问题
更新记录 2022年4月16日本文迁移自Panda666原博客,原发布时间:2021年7月16日. 在.NET的开发过程中,发现[基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系]问题 ...