J2EE框架之mybatis学习——连接数据库实现查询操作

J2EE框架之mybatis学习——连接数据库实现查询操作

作业要求:

image-20240628192943713

作者:杨建东

关于具体内容我正准备更新至我的CSDN【被瞧不起的神】也可移步我的公众号【猿小馆】

结合老师的课件和黑马程序员的课程学习。

因为我上课老师已经讲过了基本的概念和理解,所以我的项目中有些地方会有跳跃,但是在此报告将会尽力详细些。(关于具体代码我放到了我在宿舍的服务器,是解析为内网ip,muc连接校园网的同学可以访问www.daleyang.top找到下载,或通过我提供的账号进入https://ddns.daleyang.top/查看ip访问)

1、什么是Mybatis?

MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。

优点:

1、与JDBC相比,减少了50%的代码量

2、 最简单的持久化框架,简单易学

3、SQL代码从程序代码中彻底分离出来,可以重用

4、提供XML标签,支持编写动态SQL

5、提供映射标签,支持对象与数据库的ORM字段关系映射

缺点:

1、SQL语句编写工作量大,熟练度要高

2、数据库移植性比较差,如果需要切换数据库的话,SQL语句会有很大的差异

image-20240628201224871

image-20240628202531313

项目中会有很多很多代码,为了保证职责单一,所以把有关数据库的那些代码都放到持久层

表现层:页面展示

业务层:逻辑处理

持久层:对数据进行持久化,保存到数据库去的

记得抖音之前看到过一个特别正式的概括,有些不同的课程对于某些层的命名都不一样,我把详细的放到这里:

image-20240628202429945

与JDBC的对比:

image-20240628202740593

—>>

image-20240628202901362

2、第一个Mybatis项目

image-20240628203641949

1.创建user表

代码:

 create database mybatis;use mybatis;drop table if exists tb_user;create table tb_user (id int primary key auto_increment,username varchar(20),password varchar(20),gender char(1),addr varchar(30));INSERT INTO tb_user VALUES (1,'zhangsan','123','男','北京');INSERT INTO tb_user VALUES (2,'李四','234','女','天津');INSERT INTO tb_user VALUES (3,'王五','11','男','西安');​

两种方法,第一个方法是在cmd输入mysql -u root -p之后创建数据库手动运行在我的官网或者问我要的sql文件;第二个方法是直接在Navicat新建一个查询

第二个截图:

image-20240628204556253

image-20240628204616001

2.创建模块,导入坐标

现在你知道要导入哪些坐标吗,你肯定不知道,你才开始学,但你知道我要完成mybatis的开发,所以你要么大模型问,要么慢慢查,要么官网去找。

我推荐官网,也是感谢李老师上学期强调的要学习文档的阅读能力。

这个问题官网已经给的清清楚楚的了:(关于maven的导入如果有问题直接看我之前的文章——关于IDEA创建Maven一直爆红无法下载的问题_maven一直无法-CSDN博客)

image-20240628204928994

很贴心吧,粘过来呗:

 <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion>​<groupId>com.yjd</groupId><artifactId>daima</artifactId><version>1.0-SNAPSHOT</version>​<properties><maven.compiler.source>20</maven.compiler.source><maven.compiler.target>20</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>​<dependencies><!-- MyBatis 的依赖 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.4</version> <!-- 确保版本号是存在的 --></dependency>​<!-- MySQL JDBC 驱动依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version> <!-- 使用最新的版本号,截至知识截止日期 --></dependency>​<!-- JUnit 测试依赖 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency>​<!-- SLF4J API 依赖 --><dependency><groupId>org.slf4j</groupId> <!-- 修正了 groupId 的拼写错误 --><artifactId>slf4j-api</artifactId><version>1.7.30</version> <!-- 使用最新的版本号,截至知识截止日期 --></dependency>​<!-- Logback Classic 依赖 --><dependency><groupId>ch.qos.logback</groupId> <!-- 修正了 groupId 的拼写错误 --><artifactId>logback-classic</artifactId><version>1.2.3</version></dependency>​<!-- Logback Core 依赖 --><dependency><groupId>ch.qos.logback</groupId> <!-- 修正了 groupId 的拼写错误 --><artifactId>logback-core</artifactId><version>1.2.3</version></dependency></dependencies>​</project>

还有个配置文件先粘贴进来:(放到resource下去)是为了看到彩色的日志信息

 <?xml version="1.0" encoding="UTF-8"?><configuration><!--    console表示当前日志信息是可以输出到控制台的--><appender name="Console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>[%level]%blue(%d{HH:mm:ss.SSS}) %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern></encoder></appender><logger name="com.Carter_x" level="DEBUG" additivity="false"><appender-ref ref="Console"/></logger></configuration>

3.编写Mybatis的核心配置文件

还是看官网

image-20240628211602421

如下:

mybatis-config.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="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--数据库连接信息--><property name="driver" value="${com.mysql.jdbc.Driver"/><property name="url" value="${jdbc:mysql://mybatis?useSSL=false}"/><property name="username" value="${root}"/><property name="password" value="${root}"/></dataSource></environment></environments><mappers><!--加载sql映射文件--><mapper resource="UserMapper.xml"/></mappers></configuration>

4.SQL映射文件

还是上官网,直接看示例!

UserMapper.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="test"><select id="selectAll" resultType="com.yjd.pojo.User">select * from tb_user;</select></mapper>

如果这里test爆红,参考这个:

image-20240628213617315

5.编码

1.定义pojo类

image-20240628214040410

2.加载核心配置文件,获取SqlSessionFactory对象

User.java

 package com.yjd.pojo;​public class User {private Integer id        ;private String username  ;private String password  ;private String gender    ;private String addr      ;​public Integer getId() {return id;}​public void setId(Integer id) {this.id = id;}​public String getUsername() {return username;}​public void setUsername(String username) {this.username = username;}​public String getPassword() {return password;}​public void setPassword(String password) {this.password = password;}​public String getGender() {return gender;}​public void setGender(String gender) {this.gender = gender;}​public String getAddr() {return addr;}​public void setAddr(String addr) {this.addr = addr;}​@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", gender='" + gender + '\'' +", addr='" + addr + '\'' +'}';}}​
3.获取SqlSession对象,执行SQL语句

MyBatisDemo.java

 package com.yjd;import com.yjd.pojo.User;​import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.InputStream;import java.io.IOException;import java.util.List;​public class MyBatisDemo {public static void main(String[] args) throws IOException {​//1.加载核心配置文件,获取SqlSessionFactory对象String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);​//2.获取SqlSession对象,执行SQL语句SqlSession sqlSession = sqlSessionFactory.openSession();​//3.执行sqlList<User> users = sqlSession.selectList("test.selectAll");​System.out.println(users);​//4.释放资源sqlSession.close();​}}​

运行:

image-20240628220922156

image-20240628223250084

spring的部分因自学范围有限所以未发,后期再择时更新​详细版。

实验心得:

在进行第三次作业的三个任务的自学过程当中,我体会并学习到了自学能力的重要性和阅读文档的重要性,并且理解了老师之前对我们说的框架的作用!

首先通过配置maven的pom.xml文件可以进行包管理并添加依赖,同时在进行这一步的时候,我遇到了一直爆红的问题,最后我的解决方法是在maven的配置文件里面有个setting.xml文件里面更改下载镜像,这样就可以正常下载了。

在MySQL中创建数据表并生成对应的实体类,这一步让我明白了数据与代码之间的映射关系,以及如何通过实体类来简化数据操作。配置 mybatis-config.xml 文件,设置数据库连接信息,并实现DAO层接口和对应的SQL映射文件,这一系列步骤使我对MyBatis的工作机制有了清晰的认识。

特别是通过编写工具类实现连接工厂模式,我掌握了如何通过 SqlSessionFactory 实例化 SqlSession并与数据库交互。这种模式不仅使代码结构更加清晰,而且提高了代码的可维护性和扩展性。

在Spring的IOC部分,通过简单类和复杂类的测试,我体验到了Spring框架的强大之处。利用Spring的配置文件,实现了对象的创建、属性的赋值以及对象之间的依赖注入。这不仅简化了代码的编写,还增强了代码的灵活性和可测试性。

AOP的实现让我对横切关注点的分离有了深刻的理解。通过编写日志系统,利用Spring AOP实现方法前后、异常抛出等各种切入点的日志记录,使得业务逻辑和日志功能得以解耦,大大提高了代码的可读性和维护性。

从初始配置到最终测试,每一步的成功都离不开对细节的关注和对原理的理解。这次实验不仅让我掌握了具体的技术实现,更让我理解了这些技术背后的设计思想和最佳实践。相信这些宝贵的经验将在我以后的学习和工作中起到重要的作用。

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

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

相关文章

[leetcode]avoid-flood-in-the-city 避免洪水泛滥

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> avoidFlood(vector<int>& rains) {vector<int> ans(rains.size(), 1);set<int> st;unordered_map<int, int> mp;for (int i 0; i < rains.size(); i) {i…

LabVIEW网络开发资源

在LabVIEW开发中&#xff0c;利用网络资源进行学习和查找资料是提高技能和解决问题的重要途径。以下几个国内外优质资源可以帮助开发者获得丰富的技术支持和交流机会&#xff1a; 1. NI Community (NI社区) 简介: National Instruments官方运营的社区&#xff0c;提供丰富的资…

sql想查询一个数据放在第一个位置

sql想查询一个数据放在第一个位置 背景:比如在查询后台账号的时候想将管理员账号始终放在第一个,其他账号按照创建时间倒序排序, 可以这样写sql: SELECTid,create_time FROMuser ORDER BY CASEWHEN id 1 THEN1 ELSE 2 END ASC, create_time DESC 运行截图: 可以看到id…

专业报考628

目录 掌上高考相关专业两步走 研招网、软科最后 刚才看了&#xff0c;挺有用的育 就是一点&#xff0c; 查找相关专业 掌上高考 如果不知道喜欢什么专业&#xff0c;直接查大学&#xff0c;就查那个大学有什么不是物化强行绑定的 看**招生计划**一栏 如果有明确目标&#xf…

日志可视化监控体系ElasticStack 8.X版本全链路实战

目录 一、SpringBoot3.X整合logback配置1.1 log4j、logback、self4j 之间关系 1.2 SpringBoot3.X整合logback配置 二、日志可视化分析ElasticStack 2.1为什么要有Elastic Stack 2.2 什么是Elastic Stack 三、ElasticSearch8.X源码部署 ​四、Kibana源码部署 五、LogSta…

ffmpeg使用png编码器把rgb24编码为png图像

version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 note 不使用AVOutputFormat code void CFfmpegOps::EncodeRGB24ToPNG(const char *infile, const char *width_str, const char *height_str, c…

BigInteger 和 BigDecimal(java)

文章目录 BigInteger(大整数&#xff09;常用构造方法常用方法 BigDecimal(大浮点数&#xff09;常用构造方法常用方法 DecimalFormat(数字格式化) BigInteger(大整数&#xff09; java.math.BigInteger。 父类&#xff1a;Number 常用构造方法 构造方法&#xff1a;BigIntege…

【CSS in Depth 2 精译】2.2 em 和 rem + 2.2.1 使用 em 定义字号

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力 2.1.1 响应式设计的兴起 2.2 em 与 rem ✔️ 2.2.1 使用 em 定义字号 ✔️2.2.2 使用 rem 设置字号 2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 2.…

JVM专题八:JVM如何判断可回收对象

在JVM专题七&#xff1a;JVM垃圾回收机制中提到JVM的垃圾回收机制是一个自动化的后台进程&#xff0c;它通过周期性地检查和回收不可达的对象&#xff08;垃圾&#xff09;&#xff0c;帮助管理内存资源&#xff0c;确保应用程序的高效运行。今天就让我们来看看JVM到底是怎么定…

Element UI搭建使用过程

本章内容基于上一篇---Vue-cli搭建项目基础版 Vue-cli搭建项目----基础版-CSDN博客 官网地址:Element - The worlds most popular Vue UI framework 介绍:完全基于Vue.js ,用于快速搭建用户界面. 第一步:安装ElementUI 在终端输入 npm i element-ui -S 在main.js输入 …

Mac提示此电脑不能读取您插的磁盘的原因,Mac磁盘无法读取内容怎么处理

为了能在不同设备中快速传输大容量的文件&#xff0c;我们常常会使用到外接磁盘进行文件的传输。但由于各种原因&#xff0c;比如硬件、文件系统格式等问题&#xff0c;Mac电脑插磁盘会出现无法读取的问题。本文会介绍Mac提示此电脑不能读取您插的磁盘的原因&#xff0c;以及Ma…

MySQL之可扩展性(八)

可扩展性 负载均衡 负载均衡的基本思路很简单:在一个服务器集群中尽可能地平均负载量。通常的做法是在服务器前端设置一个负载均衡器(一般是专门的硬件设备)。然后负载均衡器将请求的连接路由到最空闲的可用服务器。如图显示了一个典型的大型网站负载均衡设置&#xff0c;其中…

ONLYOFFICE 8.1 桌面编辑器测评:引领数字化办公新潮流

目录 前言 下载安装 新功能概述 1.PDF 编辑器的改进 2. 演示文稿中的幻灯片版式 3.语言支持的改进 4. 隐藏“连接到云”板块 5. 页面颜色设置和配色方案 界面设计&#xff1a;简洁大方&#xff0c;操作便捷 性能评测&#xff1a;稳定流畅&#xff0c;高效运行 办公环…

【python】一篇文零基础到入门:快来玩吧~

本笔记材料源于&#xff1a; PyCharm | 创建你的第一个项目_哔哩哔哩_bilibili Python 语法及入门 &#xff08;超全超详细&#xff09; 专为Python零基础 一篇博客让你完全掌握Python语法-CSDN博客 0为什么安装python和pycharm&#xff1f; 不同于c&#xff0c;c&#xff0…

HBuilder X 小白日记01

1.创建项目 2.右击项目&#xff0c;可创建html文件 3.保存CtrlS&#xff0c;运行一下 我们写的内容&#xff0c;一般是写在body里面 注释的快捷键&#xff1a;Ctrl/ h标签 <h1> 定义重要等级最高的(最大)的标题。<h6> 定义最小的标题。 H标签起侧重、强调的作用…

Socket编程详解(一)服务端与客户端的双向对话

目录 预备知识 视频教程 项目前准备知识点 1、服务器端程序的编写步骤 2、客户端程序编写步骤 代码部分 1、服务端FrmServer.cs文件 2、客户端FrmClient.cs文件 3、启动文件Program.cs 结果展示 预备知识 请查阅博客http://t.csdnimg.cn/jE4Tp 视频教程 链接&#…

AI大模型怎么备案?

随着人工智能技术的飞速发展&#xff0c;生成式AI正逐渐渗透到我们的日常生活和各行各业中。从文本创作到艺术设计&#xff0c;从虚拟助手到智能客服&#xff0c;AI的身影无处不在。然而&#xff0c;技术的创新与应用&#xff0c;离不开法律的规范与引导。为进一步保障和监管AI…

cocos creator 调试插件

适用 Cocos Creator 3.4 版本&#xff0c;cocos creator 使用google浏览器调试时&#xff0c;我们可以把事实运行的节点以节点树的形式显示在浏览器上&#xff0c;支持运行时动态调整位置等、、、 将下载的preview-template插件解压后放在工程根目录下&#xff0c;然后重新运行…

树莓派4B_OpenCv学习笔记15:OpenCv定位物体实时坐标

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 今日学习 OpenCv定位物体实时位置&#xff0c;代码来源是…

操作系统期末复习(对抽象概念的简单形象化)

操作系统 引论 定义与基本概念&#xff1a;操作系统是计算机硬件与用户之间的桥梁&#xff0c;类似于家中的管家&#xff0c;它管理硬件资源&#xff08;如CPU、内存、硬盘&#xff09;&#xff0c;并为用户提供方便的服务&#xff08;应用程序执行、文件管理等&#xff09;。…