javaee实验:Spring Boot 整合 Mybatis

目录

  • Mybatis
    • MyBatis 框架简介
    • Mybatis 框架执行流程图
    • 映射器
  • 实验目的
  • 实验内容
  • 实验过程
    • 数据库准备
    • 项目结构
    • 代码实现
  • 实验结果

Mybatis

MyBatis 框架简介

Mybatis 的前身是 Apache 的开源框架 iBatis,与 Hibernate 一样是一个 Java 持久层的框
架。Mybatis 的优势在于灵活,它几乎可以替代 JDBC,同时提供了接口编程。目前 Mybatis
的数据访问层 DAO(Data Access Object)是不需要实现类的,它只需要一个接口和 XML(或
者注解)。Mybatis 提供自动映射,动态 SQL,级联,缓存,注解,代码和 SQL 分离等特性,
使用方便,同时也对 SQL 进行优化。因为其具有封装少,映射多样化,支持存储过程,可
以进行 SQL 优化等特点,使得它取代了 Hibernate 成为 Java 互联网中首选持久层框架。
Mybatis 在完成其功能的过程中,主要完成两件事情:
1)封装 JDBC 操作;
2)利用反射打通 Java 类和 sql 语句之间的关系。
Mybatis 框架的建立是为了解决传统 JDBC 连接数据库中存在的大量编码问题。Mybatis
可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 中的普通对象映射成数
据库中的记录

Mybatis 框架执行流程图

在这里插入图片描述
SqlSession 去执行操作查询数据库映射文件,用途:
1)获取映射器,让映射器通过命名空间和方法名称找到对应的 SQL,发送给数据库,执
行后返回结果。
2)直接通过命名信息去执行 SQL 返回结果。

映射器

MyBatis 框架包括两种类型的 XML 文件,一类是配置文件,即 mybatis-config.xml,另外
一类是映射文件,例如 XXXMapper.xml 等。在 MyBatis 的配置文件 mybatis-config.xml 包含了
节点,这里就是 MyBatis 映射器。

  1. MyBatis 映射器分为三类,如下所示:
    (1)纯 XML 映射器,利用 SqlSession 的各种方法实现增删改查。例如:
    Person p = session.selectOne(“cn.mybatis.mydemo.mapper.PersonMapper.selectPersonById”, 1);
    (2)XML 映射器+接口映射器的混合类型
    先定义接口映射器,然后再定义 xml 映射器,其中 xml 映射器的 namespace 应该对应接
    口映射器的类名。
    (3)注解+接口映射器的混合形式
    此类形式,将原先 xml 里面的 sql 配置信息,变成 Java 注解的形式写到接口映射器,用
    法与上面的例子雷同。
  2. XML 映射器+接口映射器的混合类型
    映射器由 Java 接口和 XML 文件(或注解)共同组成,它的作用:
     定义参数类型
     描述缓冲描述
     SQL 语句定义
     查询结果和 POJO 的映射关系
    实例:先定义一个映射器接口,如下所示
public interface StudentMapper {public Student getStudent(Long id);
}

注意:映射器只是一个接口,而不是一个实现类。初学者可能会产生一个很大的疑问:
接口不是不能运行吗?的确,接口不能直接运行,但是 MyBatis 内部运用了动态代理技术,
生成接口的实现类,从而完成接口的相关功能。只要明白 MyBatis 会为这个接口生成一个
代理对象,代理对象会去处理映射器接口相关的逻辑即可。
然后,用 XML 方式创建映射器,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.mybatis.mydemo.mapper.StudentMapper"><select id="getStudent" parameterType="long" resultType="student">SELECT id,name,address FROM Student WHERE id =#{id}</select>
</mapper>

有了这两个文件,就完成了一个映射器的定义。关于 XML 文件内容介绍,如下所示:
(1) 元素中的属性 namespace 所对应的是一个接口的全限定名,于是
MyBatis 上下文就可以通过它找到对应的接口。
3
(2) 元素表明这是一条查询语句,而属性 id 标识了这条 SQL,属性
parameterType=“long” 说明传递给 SQL 的是一个 long 型的参数,而 resultType=“student”
表示返回的是一个 Student 类型的返回值。而 student 是配置文件 mybatis-config.xml 配置
的别名,指代的是 com.mybatis.domain.Student。这条 SQL 中的 #{id} 表示传递进去的参数

实验目的

(1) 掌握 Mybatis 框架的基本构成
(2) 掌握如何在 Spring Boot 中集成 Mybatis 框架
(3) 掌握 Mybatis 框架实现查询等操作方法

实验内容

Spring Boot 集成 Mybatis 框架实现用户信息的增删改查操作

实验过程

数据库准备

在mysql中准备一个有username并且内容不是中文的表
实例如下

CREATE TABLE `t_user` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_name` varchar(32) NOT NULL COMMENT '用户名称',`note` varchar(256) DEFAULT NULL COMMENT '备注',PRIMARY KEY (`id`)
)

录入数据
在这里插入图片描述

项目结构

在这里插入图片描述

代码实现

IUserDao

import java.util.List;/*** @author hongjun* @create 2020-10-28 17:27*/
public interface IUserDao {/** 查询所有用户信息* */List<User> findAll();
}

IUserDaoImpl

import com.example.mybatis1.domain.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;import java.util.List;/*** @author hongjun* @create 2020-11-01 9:49*/
public class IUserDaoImpl  implements IUserDao{private SqlSessionFactory sqlSessionFactory;public IUserDaoImpl(SqlSessionFactory sqlSessionFactory){this.sqlSessionFactory=sqlSessionFactory;}@Overridepublic List<User> findAll() {SqlSession sqlSession= sqlSessionFactory.openSession();List<User> userList=sqlSession.selectList("com.example.mybatis1.dao.IUserDao.findAll");sqlSession.close();return userList;}
}

User

import lombok.Data;import java.util.ArrayList;
import java.util.Date;
import java.util.List;/*** @author hongjun* @create 2020-08-24 15:28*  id                   bigint not null,*     dept_id              bigint,*     username             varchar(20),*     password             varchar(50),*     realname             varchar(10),*     sex                  varchar(10),*     telephone            varchar(30),*     email                varchar(200),*     avatar               varchar(300),*     job_title            varchar(30),*     status               tinyint,*     sort                 int,*     del_flag             int comment '0 未删除 1 已删除',*     create_time          datetime,*     create_by            varchar(20),*     update_time          datetime,*/
@Data
public class User {private Integer id;private Integer dept_id;private String username;private String password;private String realname;private String sex;private String telephone;private String email;private String avastar;private String jobTitle;private Integer status;private Integer sort;private Integer delFlag;private Date createTime;private Date updateTime;private String createBy;
}

IUserDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis1.dao.IUserDao"><select id="findAll" resultType="com.example.mybatis1.domain.User">select * from user</select>
</mapper>

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--配置环境--><environments default="mysql"><!--配置mysql环境--><environment id="mysql"><!--配置事务--><transactionManager type="JDBC"></transactionManager><!--配置连接池--><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/stu?serverTimezone=Asia/Shanghai"/><property name="username" value="root"/><property name="password" value="password"/></dataSource></environment></environments><!--配置映射文件的位置--><mappers><!--配置文件方式,每一个映射文件所在的地方--><mapper resource="com/example/mybatis1/dao/IUserDao.xml"></mapper><!--注解方式--><!-- <mapper class="nuc.edu.mybatis.dao.IUserDao"></mapper>--></mappers></configuration>

实验结果

在这里插入图片描述
如图所示,已经查询了出来

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

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

相关文章

SpringBoot框架+原生HTML开发,基于云端SaaS服务方式的电子病历编辑器源码

一体化电子病历编辑器源码&#xff0c;电子病历系统 一体化电子病历系统基于云端SaaS服务的方式&#xff0c;采用B/S&#xff08;Browser/Server&#xff09;架构提供&#xff0c;覆盖了医疗机构电子病历模板制作到管理使用的整个流程。除实现在线制作内容丰富、图文并茂、功能…

题目:回文判定(蓝桥OJ 1371)

题目描述&#xff1a; 解题思路&#xff1a; 可以采用双指针判断&#xff08;这里说的指针其实是用下标表示&#xff09;。 题解&#xff1a; #include<bits/stdc.h> using namespace std;const int N 1e6 9;//注意大小 char s[N];//在全局写&#xff0c;默认内部为空…

常见动物经济手术3d模拟交互演示教学实现了教育资源的共享

动物常见病防治是兽医必备的技能&#xff0c;为了让实习兽医在上岗作业前拥有丰富的常见病防治经验。借助动物常见病防治VR虚拟仿真技术开展动物常见病防治VR模拟实操培训&#xff0c;能极大方便院校实训。 提高教学质量 传统的动物医学教学往往依赖于理论知识和实验室实践&…

RHEL8_Linux硬盘管理

主要介绍Linux磁盘管理 了解分区的概念对硬盘进行分区常见的分区swap分区的管理 1.了解分区的概念 1&#xff09;新的硬盘首先需要对其进行分区和格式化&#xff0c;下面来了解以下硬盘的结构&#xff0c;如图。 2&#xff09;硬盘的磁盘上有一个个圈&#xff0c;每两个圈组…

Axure原型图表组件库,数据可视化元件(Axure9大屏组件)

针对Axure制作的大屏图表元件库&#xff0c;帮助产品经理更高效地制作高保真图表原型&#xff0c;是产品经理必备元件工具。现分享完整的组件库&#xff0c;大家一起学习。 本组件库的图表模块&#xff0c;已包含所有常用的图表&#xff0c;以下为部分组件截图示意。文末可下载…

Halcon reduce_domain和scale_image的作用

在Halcon中&#xff0c;reduce_domain是用于缩小图像域&#xff08;Image Domain&#xff09;的操作。 它的作用是通过指定一个感兴趣区域&#xff08;ROI&#xff0c;Region of Interest&#xff09;&#xff0c;将图像数据限制在该区域内&#xff0c;从而实现对图像进行裁剪…

uni-app 微信小程序之好看的ui登录页面(一)

文章目录 1. 页面效果2. 页面样式代码 更多登录ui页面 uni-app 微信小程序之好看的ui登录页面&#xff08;一&#xff09; uni-app 微信小程序之好看的ui登录页面&#xff08;二&#xff09; uni-app 微信小程序之好看的ui登录页面&#xff08;三&#xff09; uni-app 微信小程…

如何优雅使用 vue-html2pdf 插件生成pdf报表

使用 vue-html2pdf 插件 业务背景&#xff0c;老板想要一份能征服客户的pdf报表&#xff0c;传统的pdf要手撕&#xff0c;企业中确实有点耗费时间&#xff0c;于是github上面看到开源的这个插件就…废话不多说&#xff0c;直接上教程 1.使用下面命令安装 vue-html2pdf npm i…

【dig命令查询方法】

dig&#xff08;Domain Information Groper&#xff09;是一个用于查询DNS&#xff08;域名系统&#xff09;的命令行工具&#xff0c;它可以帮助您获取关于域名的各种信息&#xff0c;如IP地址、MX记录、NS记录等。下面是dig的详细使用教程。 基本语法&#xff1a; dig [ser…

苹果mac电脑如何彻底删除卸载软件?

在苹果电脑上安装和使用软件非常容易&#xff0c;但是卸载软件却可能会变得复杂和困难。不像在Windows上&#xff0c;你不能简单地在控制面板中找到已安装的程序并卸载它们。因此&#xff0c;在这篇文章中&#xff0c;我们将讨论苹果电脑怎么彻底删除软件。 CleanMyMac X全新版…

进行生成简单数字图片

1.之前只能做一些图像预测,我有个大胆的想法,如果神经网络正向就是预测图片的类别,如果我只有一个类别那就可以进行生成图片,专业术语叫做gan对抗网络 2.训练代码 import torch import torch.nn as nn import torch.optim as optim import torchvision.transforms as transfo…

ArcGIS Pro中怎么设置标注换行

在ArcGIS Pro中进行文字标注的时候&#xff0c;如果标注的字段内容太长&#xff0c;直接标注的话会不美观&#xff0c;而且还会影响旁边的标注显示&#xff0c;这里为大家介绍一下在ArcGIS Pro中设置文字换行的方法&#xff0c;希望能对你有所帮助。 数据来源 本教程所使用的…