Mybatis简述

MyBatis是持久层框架,用于简化JDBC开发,负责将数据保存到数据库,支持自定义SQL,免除了JDBC代码以及设计参数和获取结果集的工作,通过简单的xml文件和注解来配置sql,映射类型,接口,POJO等等作为数据库的记录。

JDBC的步骤固定,且为硬编码,每次改动时都要修改代码,手动设置参数,封装结果集时繁琐。

MyBatis入门

1.创建Maven项目,在pom.xml中导入坐标

2.从mybatis-config.xml中创建SqlSessionFactory

xml中包含获取数据库连接实例的 数据源datasource ,以及事务管理器transactionManager

<dataSource>中包含数据库连接信息,driver的value为 com.mysql.jdbc.Driver

url的value为jdbc:mysql://mybatis?useSSL=false

username的value为用户名,value是用户名称

password的value是密码

3.写映射的SQL文件 XxxMapper.xml

在mapper标签里定义select,update,delete等标签,其中标签有id属性,resultType属性,id是SQL语句的唯一标识,resultType是返回值要包装的类型。

完成后在第二步的mybatis.config.xml中的mapper标签的resource属性中添加XxxMapper.xml构成映射关系,如果使用Mapper代理,则可以使用

4.根据数据库字段,定义对应的POJO类

5.编写mybatis核心测试类

        (1).加载mybatis的核心配置文件,获取SqlSessionFactory

        (2).通过Factory获取SqlSession对象,用它执行sql

        

        (3).执行sql,参数为对应的 (命名空间.id) 

但这样依然避免不了硬编码,所以可以使用以下的Mapper代理

*使用代理时,要先定义一个与SQL映射文件同名的Mapper接口,并放在同一目录下,即在resources目录下创建与Mapper接口同名的路径(用"/"代替"."),然后把XxxMapper.xml放进去

*然后设置命名空间namespace为Mapper的全限定名。

*在Mapper接口中定义对应的方法,方法名就是sql语句的id,并保持参数类型和返回值类型一致。

*最后通过SqlSession的对象的getMapper方法获取代理实例,执行对应接口中的sql方法。

        (4).输出结果集合,并关闭对应的流释放资源

------------------------------------------------------

在核心配置文件mybatis-config.xml中,有许多配置(configuration)信息

1.environments,在其中可以定义<environment>标签,配置多个数据源,其中id不同,通过指定environments的default属性来切换environment

2.dataSource

3.transactionManager

4.typeAliases,在其中定义<package>标签,name为包名,被包裹的包名不再区分大小写

配置标签时需要遵循以下顺序,否则会报错

------------------------------------------

SQL查询时可能会遇到数据库中字段名称和测试类中字段名称不同的情况,此时会导致查询的数据无法封装,可以使用resultmap标签

其中column是数据库的列名,property是测试类的属性名称,编写完成后,将sql语句的返回值类型更改为 resultMap = "XxxResultMap"即可

------------------------------------------

--------------------------------------

动态sql,根据用户不同查询需求来改变sql语句

1.多条件动态查询

2.单条件动态查询

--------------------------------------

主键返回

然后在添加后使用getID返回对应的值。

------------------------------------------------

在springboot中,mybatis已经被整合,创建springboot工程时,只需要勾选mybatis框架

然后在项目的application.properties配置文件中配置数据库连接信息即可,不用在pom文件引入mybatis依赖了

数据源配置:

1.项目创建完成后,在dao层建立mapper包并定义对应的mapper接口(注意添加@mapper注解,这样该接口在运行时会自动生成对应的实现类对象,并通过ioc控制反转,交给spring容器),然后在接口中定义对应的方法,简单的sql语句直接在方法上通过注解完成。

2.根据三层架构的模式,除了mapper层,还需要调用mapper层的service层和控制器controller层,在service层里定义对应的service接口,定义对应的抽象方法,然后在service接口的impl实现类中实现方法,来调用mapper的sql语句,然后进行数据的转换操作。

因为定义的sql语句在接口中,而又不可以直接new一个新的接口对象,但上面提到@mapper注解会在运行时自动生成实现类对象并交给spring容器,成为一个新的bean对象,所以可以通过DI依赖注入的方式完成,即在定义的接口对象前添加@Autowired注解。

一个项目中有时会有多个实现类,定义了相同类型的bean对象,但spring容器一次只能接收一个同类型的bean对象,多于一个时会报错,所以这时不能再使用@Autowired自动装配了,如图,EmpServiceA,EmpServiceB都使用@Autowired注解修饰了相同的EmpDao对象,就会爆红。

可以在想要使其生效的实现类上使用@Primary注解;

或者在controller层,使用@Qualifier在对应的service前标识bean对象名称

或者@Resource直接替换@Autowired,只要指定注入的bean对象名称即可,因为@Autowired根据bean的类型注入,而@Resource根据bean名称注入,不会出现上述问题

注意在service和dao(mapper)层中,要想使用IOC控制反转,就要使用@component注解,把他们的实现类交给容器管理,又因为controller层需要service层的bean对象、service层又需要dao层的bean对象,所以在相应的对象上再使用@Autowired等注解进行依赖注入,

也可以使用下列的注解,controller层使用@Controller,service层使用@Service,dao层使用@Repository,但后续会使用@Mapper注解代替,其中controller层默认已经使用了@Controller,原因是自带的@RestController注解就是@Controller和@ResponseBody的组合

其次,bean对象的名称默认都是实现类的名称的首字母小写;

上述的注解,要想生效,必须遵守三层架构的分层模式,否则无法被扫描到,如果软件包没有分层,还要使用注解,则解决方法是手动添加@ComponentScan注解,指定扫描的包名

-------------------------------------

lombok,是一个简化实体类的插件,可以自动生成pojo实体类的get,set,tostring,equals和hashcode方法,还可以生成无参,全参的构造方法,通过使用注解,免除了手动生成代码的步骤

使用前只要在pom文件添加lombok的依赖,然后添加对应的注解,其中@data是@getter,@setter,@tostring,@equalsandhashcode的综合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/497925.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot2入门到实战 - JWT

JWT是什么&#xff1f; JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object。 This information can be verified and trusted because it is digi…

如何做代币分析:以 USDT 币为例

作者&#xff1a;lesleyfootprint.network 编译&#xff1a;cicifootprint.network 数据源&#xff1a;USDT Token Dashboard &#xff08;仅包括以太坊数据&#xff09; 在加密货币和数字资产领域&#xff0c;代币分析起着至关重要的作用。代币分析指的是深入研究与代币相关…

CSS:弹性盒子Flexible Box布局

CSS:Flexible Box弹性盒子布局 一、flex布局原理 ​ flex是flexible Box的缩写,意为 ”弹性布局“&#xff0c;用来为盒状模型提供最大的灵活性&#xff0c;任何一个容器都可以指定为flex布局。 当我们的父盒子设置为flex布局之后&#xff0c;子元素的 float 、clear 和 vert…

用友 NC 23处接口XML实体注入漏洞复现

0x01 产品简介 用友 NC 是用友网络科技股份有限公司开发的一款大型企业数字化平台。 0x02 漏洞概述 用友 NC 多处接口存在XML实体注入漏洞,未经身份验证攻击者可通过该漏洞读取系统重要文件(如数据库配置文件、系统配置文件)、数据库配置文件等等,导致网站处于极度不安全…

国产动漫|基于Springboot的国产动漫网站设计与实现(源码+数据库+文档)

国产动漫网站目录 目录 基于Springboot的国产动漫网站设计与实现 一、前言 二、系统功能设计 三、系统功能设计 1、用户信息管理 2、国漫先驱管理 3、国漫之最管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题…

k8s.gcr.io/pause:3.2镜像丢失解决

文章目录 前言错误信息临时解决推荐解决onetwo 前言 使用Kubernetes&#xff08;k8s&#xff09;时遇到了镜像拉取的问题&#xff0c;导致Pod沙盒创建失败。错误显示在尝试从k8s.gcr.io拉取pause:3.2镜像时遇到了超时问题&#xff0c;这通常是因为网络问题或者镜像仓库服务器的…

C++——类的6个默认成员函数

目录 类中的6个默认成员函数 构造函数 构造函数的特点 初始化列表 隐式类型转换 析构函数 拷贝构造函数 赋值重载 运算符重载 赋值重载 取地址重载 类中的6个默认成员函数 类中的6个默认成员函数根据不同的作用可以分为&#xff1a; 初始化和使用后清理&#xff1a;…

基于springboot实现保险信息网站系统项目【项目源码+论文说明】

基于springboot实现保险信息网站系统演示 摘要 随着互联网的不断发展&#xff0c;现在人们获取最新资讯的主要途径来源于网上新闻&#xff0c;当下的网上信息宣传门户网站的发展十分的迅速。而保险产品&#xff0c;作为当下人们非常关注的一款能够给人们带来医疗、生活、养老或…

[spark] RDD 编程指南(翻译)

Overview 从高层次来看&#xff0c;每个 Spark 应用程序都包含一个driver program&#xff0c;该程序运行用户的main方法并在集群上执行各种并行操作。 Spark 提供的主要抽象是 resilient distributed dataset&#xff08;RDD)&#xff0c;它是跨集群节点分区的元素集合&…

蓝桥杯_中断系统

一 中断 中断&#xff0c;即cpu暂停执行当前程序&#xff0c;转而执行另外一段特殊程序&#xff0c;处理结束后。返回之前暂停程序继续执行。 中断向量&#xff0c;中断服务程序的入口地址&#xff0c;每个中断源都对应一个固定的入口地址。 中断服务函数&#xff0c;内核响应中…

Transformer之self-attention

注意力是一个有助于提高神经机器翻译应用程序性能的概念。在这篇文章中&#xff0c;我们将看看Transformer&#xff0c;一个使用注意力来提高这些模型训练速度的模型。Transformer在特定任务中优于谷歌神经机器翻译模型。最大的好处来自于Transformer如何使自己适合并行化。 在…

虚拟机上为AzureDevOps Server 创建用户

为DevOpsServer创建登录用户 背景虚拟机的本地用户和组去DevOps Server上添加本地用户 背景 我们有一台虚拟机&#xff0c;然后在上面安装了一台Azure DevOps Server&#xff0c;然后我们创建几个登录用户。 虚拟机的本地用户和组 首先我们登陆到虚拟机&#xff0c;然后我们…