Java - MyBatis(上)

Mybatis(上)

简介

Mybatis是一款优秀的持久层框架。
Mybatis支持定制化SQL、存储过程以及高级映射。
MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

持久化

持久化就是将程序的数据在持久状态和瞬时状态转化的过程 内存因为断电即失的特点,而有一些对象,不能让它丢掉,所以需要持久化。内存又太贵了,不能将数据持久放在内存中。

持久层

完成持久化工作的代码块

第一个Mybatis程序实现 (思路大纲)

使用Mybatis对数据库进行操作

1.配置环境

导入依赖:

首先需要导入Mybatis依赖和Mysql依赖,才能使用Mybatis和连接Mysql。
之后需要一个sqlSession对象,这需要写一个Mybaits工具类来返回一个sqlSession对象。

Mybatis工具类:

这个Mybatis工具类的实现,是为了返回一个sqlSession对象,需要一个sqlSessionFactory;
而一个sqlSessionFactory对象需要通过 SqlSessionFactoryBuilder 获得;
而 SqlSessionFactoryBuilder 则可以从 XML 配置文件进行加载。

Mybatis核心配置文件:

这样我们就需要一个Mybatis的核心配置文件XML。
这个XML文件需要进行事务管理和数据库连接配置,同时还需要要包含一组映射器(mapper),这些映射器的 XML文件包含了 SQL 代码和映射定义信息。

环境配置完毕!!!

2.编写代码

实体类:

之后就是编写代码, 创建一个与数据库表对应的实体类。
比如针对数据库查询select,首先写一个实体类,内容是包括select的表的各个字段的信息。

Mapper接口

之后写一个Mapper映射接口,自定义的,里面写一个方法用来返回结果集的。
不过每个Mapper接口都需要注册,就是在上述的Mybatis中注册,才能使用。

对应的XML文件

之后通过写一个配置文件,在配置文件中写SQL的相关操作,对接Mapper接口,用来返回结果集。
MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。

2.测试

使用MyBatis

获取 sqlSesion对象,通过MyBatis工具类返回一个sqlSession对象;
使用SqlSession获取Mapper接口的实例;
通过该实例方法的调用,执行相关操作,获取结果集;
关闭SQL Session。

第一个Mybatis程序实现 (代码实现)

配置环境:
  1. 导入依赖,解决 Maven 配置文件未被导出或生效的问题(build)

    <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.16</version></dependency></dependencies>
<!--在子部写--><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
  1. 编写Mybatis工具类,并配置Mybatis核心xml文件,mapper映射器可以候补!

public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;static {try {String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}public static SqlSession getSqlSession() {return sqlSessionFactory.openSession();}
}
<?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="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/><property name="username" value="root"/><property name="password" value="111111"/></dataSource></environment></environments><mappers><mapper resource="org/example/Dao/UserMapper.xml"/></mappers>
</configuration>
编写代码
  1. 编写一个实体类,与数据库的表相对应。

//实体类
public class User {private int id;private String name;private String pwd;public User() {}public User(int id, String name, String pwd) {this.id = id;this.name = name;this.pwd = pwd;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPwd() {return pwd;}public void setPwd(String pwd) {this.pwd = pwd;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", pwd='" + pwd + '\'' +'}';}
}
  1. 创建一个mapper接口,在里面编写一个方法,用来返回结果集。

public interface UserDao {public List<User> getUserList();
}
  1. 配置一个与mapper接口对应的xml文件,对应接口、返回类型,在相应标签内写SQL语句即可。
    MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。

<?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="org.example.Dao.UserDao"><select id="getUserList" resultType="org.example.pojo.User">select * from mybatis.user</select>
</mapper>

测试

  1. 创建一个sqlSession对象,用Mybatis工具类返回值对象值。

  2. 通过sqlSession对象的getMapper()方法,获取一个Mapper接口的实例对象。这样通过动态代理获取了 Mapper 接口的实现,以便于进行数据库操作。

  3. 调用这个实例对象的方法,这个方法调用会触发 MyBatis 执行与 getUserList() 相关联的 SQL 语句。
    执行后,会将结果集通过返回类型映射成一个Java对象,如List<表对应的对象>,返回结果。

  4. 关闭sqlSession,释放资源。

public class testDao {@Testpublic void test() {//获得SqlSession对象SqlSession sqlSession = MybatisUtils.getSqlSession();//方式一执行SQLUserDao mapper = sqlSession.getMapper(UserDao.class);List<User> userList = mapper.getUserList();for (User user : userList) {System.out.println(user);}//关闭sqlSessionsqlSession.close();}
}

总结

使用Mybatis对数据库进行操作

配置环境:
  1. 导入依赖,解决解决 Maven 配置文件未被导出或生效的问题(builder)

  2. 编写Mybatis工具类,并配置Mybatis核心xml文件,mapper映射器可以候补!

编写代码
  1. 编写一个实体类,与数据库的表相对应。

  2. 创建一个mapper接口,在里面编写一个方法,用来返回结果集。

  3. 配置一个与mapper接口对应的xml文件,对应接口、返回类型,在相应标签内写SQL语句即可。
    MyBatis 会根据 Mapper 接口方法的返回类型自动将查询结果映射到相应的 Java 对象。

测试
  1. 创建一个sqlSession对象,用Mybatis工具类返回值对象值。

  2. 通过sqlSession对象的getMapper()方法,获取一个Mapper接口的实例对象。这样通过动态代理获取了 Mapper 接口的实现,以便于进行数据库操作。

  3. 调用这个实例对象的方法,这个方法调用会触发 MyBatis 执行与 getUserList() 相关联的 SQL 语句。
    执行后,会将结果集通过返回类型映射成一个Java对象,如List<表对应的对象>,返回结果。

  4. 关闭sqlSession,释放资源。

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

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

相关文章

传感器模块编程实践(三)舵机+超声波模块融合DIY智能垃圾桶模型

文章目录 一.概要二.实验模型原理1.硬件连接原理框图2.控制原理 三.实验模型控制流程四.智能感应垃圾桶模型程序五.实验效果视频六.小结 一.概要 随着科技的飞速发展和环保意识的日益增强&#xff0c;智能垃圾桶成为了城市生活的新宠&#xff0c;智能垃圾桶人们无需接触垃圾桶…

灵足时代:具身智能核心部件的新秀崛起——解析数千万元天使轮融资

在智能科技日新月异的今天,具身智能作为连接物理世界与数字世界的重要桥梁,正逐步成为科技创新的前沿阵地。近日,具身智能核心部件领域的新锐公司——“灵足时代”宣布完成数千万元天使轮融资,这一消息无疑为行业内外带来了强烈的震撼与期待。本轮融资由雅瑞智友科学家基金…

计算机组成原理(笔记6阵列乘法器、补码阵列乘法器)

手算阵列乘法器 平时我们计算乘法的时候是手算的 平时手算过程中我们是进行平行移位&#xff0c;可是在计算机里平行移位&#xff0c;会带来更大的开销&#xff0c;如下图我们可以看到&#xff0c;为此聪明的人&#xff0c;设计了斜移位的计算机 值得注意的是最后一行用的是平…

wsl中git difftool調用beyond compare

發現有兩種方案&#xff0c;鏈接如下&#xff1a; 1&#xff0c;https://blog.csdn.net/u014175785/article/details/121558365 2&#xff0c;https://www.jianshu.com/p/3a72e2e1260b 下面的鏈接供參考&#xff1a; https://sep.com/blog/20170607wsl-git-and-beyond-compare…

学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)

在线学籍管理平台系统 目录 基于SpringbootVUE的在线学籍管理平台系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大…

高度细化的SAGA模式实现:基于Spring Boot与RabbitMQ的跨服务事务

场景与技术栈 场景&#xff1a;电商系统中的订单创建流程&#xff0c;涉及订单服务&#xff08;Order Service&#xff09;、库存服务&#xff08;Inventory Service&#xff09;、支付服务&#xff08;Payment Service&#xff09;。 技术栈&#xff1a; Java 11 Spring Bo…

Thinkphp/Laravel旅游景区预约系统的设计与实现

目录 技术栈和环境说明具体实现截图设计思路关键技术课题的重点和难点&#xff1a;框架介绍数据访问方式PHP核心代码部分展示代码目录结构解析系统测试详细视频演示源码获取 技术栈和环境说明 采用PHP语言开发&#xff0c;开发环境为phpstudy 开发工具notepad并使用MYSQL数据库…

Qt的互斥量用法

目的 互斥量的概念 互斥量是一个可以处于两态之一的变量:解锁和加锁。这样&#xff0c;只需要一个二进制位表示它&#xff0c;不过实际上&#xff0c;常常使用一个整型量&#xff0c;0表示解锁&#xff0c;而其他所有的值则表示加锁。互斥量使用两个过程。当一个线程(或进程)…

国际 Android WPS Office v18.13 解锁版

WPS Office 移动版&#xff0c;设计不断优化&#xff0c;性能再次提升&#xff01;融入Google Android最新设计标准&#xff0c;Material Design设计风格&#xff0c;完美支持沉浸式&#xff01;简化文档操作&#xff0c;全新移动办公力作。全新界面更清晰舒适&#xff0c;功能…

MySQL 库的操作

温馨提示&#xff1a;非特殊情况不要删除和随意修改数据库 清除MySQL历史命令&#xff1a;system clear 增删数据库 增删数据库 登录MySQL&#xff1a;mysql -u root -pMySQL数据目录&#xff1a;/var/lib/mysql查看当前数据库列表&#xff1a;show databases;创建数据库&#…

代码随想录 | Day26 | 二叉树:二叉搜索树中的插入操作删除二叉搜索树中的节点修剪二叉搜索树

代码随想录 | Day26 | 二叉树&#xff1a;二叉搜索树中的插入操作&&删除二叉搜索树中的节点&&修剪二叉搜索树 主要学习内容&#xff1a; 二叉搜索树的插入删除操作 701.二叉搜索树中的插入操作 701. 二叉搜索树中的插入操作 - 力扣&#xff08;LeetCode&…

CSS3练习--电商web

免责声明&#xff1a;本文仅做分享&#xff01; 目录 小练--小兔鲜儿 目录构建 SEO 三大标签 Favicon 图标 布局网页 版心 快捷导航&#xff08;shortcut&#xff09; 头部&#xff08;header&#xff09; logo 导航 搜索 购物车 底部&#xff08;footer&#xff0…

C(九)while循环 --- 军训匕首操情景

匕首操&#xff0c;oi~oi~oi~~~~~ 接下来的几篇推文&#xff0c;杰哥记录的是三大循环结构的运行流程及其变式。 本篇的主角是while循环。&#x1f449; 目录&#xff1a; while循环 的组成、运行流程及其变式关键字break 和 continue 在while 循环中的作用while 循环的嵌套题目…

微信小程序 图片的上传

错误示范 /*从相册中选择文件 微信小程序*/chooseImage(){wx.chooseMedia({count: 9,mediaType: [image],sourceType: [album],success(res) {wx.request({url:"发送的端口占位符",data:res.tempFiles[0].tempFilePath,method:POST,success(res){//请求成功后应该返…

搜索引擎相关的一段实习经历

0 前言 就是跟搜索相关的一段经历。主要工作就是建立倒排索引库相关的一些简单内容。 又翻到了以前的工作&#xff0c;权作纪念。 就是简单的封装cpp的库供python语言调用。 反正就是很多版本问题等等吧各种鬼问题。 我感觉这个思路可能还是待考证。 跨语言的调用我感觉还是不…

STM32 Hal库SDIO在FATFS使用下的函数调用关系

STM32 Hal库SDIO在FATFS使用下的函数调用关系 本文并不将FATFS的相关接口操作&#xff0c;而是将HAL在使用FATFS通过SDIO外设管理SD卡时&#xff0c;内部函数的调用逻辑&#xff0c;有助于当我们使用CUBEMX生成FATFS读取SD卡的代码时无法运行时Debug。本文也会说明一些可能出现…

Study--Oracle-09--部署Openfiler存储服务器

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。 免费的存储服务器软件有FreeNAS 和 Openfiler。 其中Freenas的网站上只有i386及amd64的版本,也就是说Freenas不能支持64位版本的Intel CPU,而Openfiler则提供更全面的版本支持,在其网站上…

一个真实可用的登录界面!

需要工具&#xff1a; MySQL数据库、vscode上的php插件PHP Server等 项目结构&#xff1a; login | --backend | --database.sql |--login.php |--welcome.php |--index.html |--script.js |--style.css 项目开展 index.html&#xff1a; 首先需要一个静态网页&#x…

Linux线程(七)线程安全详解

当我们编写的程序是一个多线程应用程序时&#xff0c;就不得不考虑到线程安全的问题&#xff0c;确保我们编写的程序是一个线程安全&#xff08;thread-safe&#xff09;的多线程应用程序&#xff0c;什么是线程安全以及如何保证线程安全&#xff1f;带着这些问题&#xff0c;本…

zookeeper选举kafka集群的controller

zookeeper选举kafka集群的controller目录 文章目录 zookeeper选举kafka集群的controller目录前言一、实操体验controller的选举二、模拟controller选举四、删除controller节点 前言 kafka集群的controller是kafka集群中一个有特殊作用的broker&#xff0c;负责整个kafka集群的…