如何使用IDEA搭建Mybatis框架环境(详细教程)

文章目录

  • ☕前言
    • 为什么学习框架技术
    • Mybatis框架简介
  • 🍹一、如何配置Mybatis框架环境
    • 1.1下载需要MyBatis的jar文件
    • 1.2部署jar文件
    • 1.3创建MyBatis核心配置文件configuration.xml
    • 1.4.创建持久类(POJO)和SQL映射文件
    • 1.5.创建测试类
  • 🧋二、 MyBatis框架的优缺点
    • 2.1.MyBatis框架的优点
    • 2.2.MyBatis框架的缺点

☕前言

为什么学习框架技术

  最直接的原因是让我们能更快更好地去编写代码,我们之前在使用Servlet+JSP+JDBC来做B/S架构的Web项目(如易买网)时,我们要写很多的Servlet和使用JDBC对数据库操作的重复代码,比如使用JDBC去连接数据库,定义SQL语句,数据持久化操作,关闭数据库连接等等这些结操作的步骤都是重复不断去编写,后来我们将这些JDBC访问数据库的步骤给它封装到BaseDao中,减少一定的代码量
而我们要学习的这些框架跟这BaseDao的思想是一样的,都是让我们能更快更好地去编写代码

Mybatis框架简介

  MyBatis的前身是iBatis,本是Apache的一个开源项目,2010年这个项目由Apache Software Foundation迁移到了Google Code,并改名为MyBatis。2013年迁移(Github是代码托管的公共网站)。
  MyBatis官网:http://mybatis.org。
  Github: https://github.com/mybatis
MyBatis是一个开源的数据持久化层框架。它内部封装了通过JDBC访问数据库的操作,支持普通的SQL查询、存储过程和高级映射。MyBatis作为持久层框架,其主要思想是将程序中的大量SQL语句剥离出来,配置在配置文件中,实现SQL的灵活配置。这样做的好处是将SQL与程序代码分离,可以在不修改程序代码的情况下,直接在配置文件中修改SQL。

🍹一、如何配置Mybatis框架环境

1.1下载需要MyBatis的jar文件

  MyBatis的官方网站是http://mybatis.org,可以下载到最新的Release(发布)版本的MyBatis。目前MyBatis官网在国内访问受限,可以去Github下载,地址为:https://github.com/mybatis/mybatis-3/releases/tag/mybatis-3.2.2 这个地址中找到mybatis-3.2.2、mybatis-3-mybatis-3.2.2.zip(通过相应版本的”Source Code(zip)” 链接下载)。

mybatis-3.2.2.zip解压后的目录结构如下:
在这里插入图片描述

mybatis-3.2.2.jar为MyBatis的jar文件。
mybatis-3.2.2.pdf为MyBatis官方使用手册。

1.2部署jar文件

具体的操作步骤如下:

首先打开idea,创建一个新的项目
在这里插入图片描述

选择创建Java Enterprise项目,给项目取名字,修改Project template(项目模板)为Web application。Application server选择自己下载的Tomcat版本。

依次选择以下合适的选项如图所示:
在这里插入图片描述

创建完成之后打开src目录下的main文件当中的webapp中的WEB-INF文件在里面创建一个lib的软件包把我们下载好的Mybatis所需的jar包放进去,并且添加到我们的项目当中去。

在这里插入图片描述

1.3创建MyBatis核心配置文件configuration.xml

  在项目中有个名字叫resources的文件, 然后右击这个resources创建一个File,名字为mybatis-config.xml以及database.propertieslog4j.properties这两个文件。

mybatis-config.xml代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"><!-- 通过这个配置文件完成mybatis与数据库的连接 -->
<configuration><!-- 引入 database.properties 文件--><properties resource="database.properties"/><!-- 配置mybatis的log实现为LOG4J --><settings><setting name="logImpl" value="LOG4J" /></settings><!--别名:给指定的包,生成“别”名以“类”名为别名作用:给sql映射文件,在查询功能中作为返回值使用--><typeAliases><package name="com.gd.pojo"/></typeAliases><environments default="development"><environment id="development"><!--配置事务管理,采用JDBC的事务管理  --><transactionManager type="JDBC"></transactionManager><!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 --><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${user}"/><property name="password" value="${password}"/></dataSource></environment></environments><!-- 将mapper文件加入到配置文件中 --><mappers><mapper resource="com\gd\dao\mapper\UserMapper.xml"/></mappers></configuration>

database.properties代码如下:

driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8
user=root
password=123456

log4j.properties代码如下:

log4j.rootLogger=DEBUG,CONSOLE,file
#log4j.rootLogger=ERROR,ROLLING_FILE
log4j.logger.cn.smbms.dao=debug
log4j.logger.com.ibatis=debug 
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug 
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug 
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug 
log4j.logger.java.sql.Connection=debug 
log4j.logger.java.sql.Statement=debug 
log4j.logger.java.sql.PreparedStatement=debug 
log4j.logger.java.sql.ResultSet=debug 
log4j.logger.org.tuckey.web.filters.urlrewrite.UrlRewriteFilter=debug######################################################################################
# Console Appender  \u65e5\u5fd7\u5728\u63a7\u5236\u8f93\u51fa\u914d\u7f6e
######################################################################################
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=error
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n######################################################################################
# DailyRolling File  \u6bcf\u5929\u4ea7\u751f\u4e00\u4e2a\u65e5\u5fd7\u6587\u4ef6\uff0c\u6587\u4ef6\u540d\u683c\u5f0f:log2009-09-11
######################################################################################
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.DatePattern=yyyy-MM-dd
log4j.appender.file.File=log.log
log4j.appender.file.Append=true
log4j.appender.file.Threshold=error
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-M-d HH:mm:ss}%x[%5p](%F:%L) %m%nlog4j.logger.com.opensymphony.xwork2=error  

创建好后的目录结构如下:
在这里插入图片描述

1.4.创建持久类(POJO)和SQL映射文件

  POJO(Plain Ordinary Java Object), 从字面上来讲就是普通Java对象。POJO类可以简单地理解为符合JavaBean规范的实体类。下面以用户表(smbms_user)为例,定义用户POJO类,User.java代码如下:

package com.gd.pojo;
import javax.xml.crypto.Data;public class Smbms_User {private Integer id;  //idprivate String userCode; //用户编码private String userName; //用户名称private String userPassword;  //用户密码private Integer gender;  //性别private Data birthday; //出生日期private String phone;    //手机号码private String address;  //地址private Integer userRole;    //用户角色private Integer createdBy;    //创建者private Data creationDate; //创建时间private Integer modifyBy;    //更新者private Data modifyDate;   //更新时间public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserCode() {return userCode;}public void setUserCode(String userCode) {this.userCode = userCode;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPassword() {return userPassword;}public void setUserPassword(String userPassword) {this.userPassword = userPassword;}public Integer getGender() {return gender;}public void setGender(Integer gender) {this.gender = gender;}public Data getBirthday() {return birthday;}public void setBirthday(Data birthday) {this.birthday = birthday;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Integer getUserRole() {return userRole;}public void setUserRole(Integer userRole) {this.userRole = userRole;}public Integer getCreatedBy() {return createdBy;}public void setCreatedBy(Integer createdBy) {this.createdBy = createdBy;}public Data getCreationDate() {return creationDate;}public void setCreationDate(Data creationDate) {this.creationDate = creationDate;}public Integer getModifyBy() {return modifyBy;}public void setModifyBy(Integer modifyBy) {this.modifyBy = modifyBy;}public Data getModifyDate() {return modifyDate;}public void setModifyDate(Data modifyDate) {this.modifyDate = modifyDate;}
}

创建SQL映射文件,包名:cn.smbms.dao.user,名字为:UserMapper.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来指定 -->
<mapper namespace="cn.smbms.dao.user.UserMapper"><!-- 查询用户表的总记录数 --><select id="count" resultType="int">select count(1) as count from smbms_user </select>
</mapper>

经验:SQL映射文件一般都对于相应的POJO,所以一般都采用POJO的名称+Mapper的规则来进行命名。当然该mapper文件属于DAO层的操作,应该放置 在dao包下,并根据业务功能进行分包放置,如cn.smbms.dao.user.UserMapper.xml。另mapper文件中没有提示,可参考最后一个知识点——引入DTD文件。UserMapper.xml文件配置完后,要将这个xml在mybatis-config.xml文件中进

1.5.创建测试类

在工程中加入JUnit4(单元测试)。
创建测试类UserMapperTest.java,代码如下:

 private Logger logger = Logger.getLogger(UserMapperTes.class);@Beforepublic void setUp() throws Exception {}@Testpublic void test() {String resource = "mybatis-config.xml";int count = 0;SqlSession sqlsession = null;//1、获取myBatis-config.xml的输入流try {InputStream is = Resources.getResourceAsStream(resource);//2、创建SqlSessionFactory对象,此对象可以完成对配置文件的读取SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);//3、创建SqlSessionsqlsession = factory.openSession();//4、调用mapper文件来对数据进行操作,在此之前一定要将mapper文件引入到mybatis-config.xml中
//MyBatis通过mapper文件的namespace和子元素的id来找到相应的SQL,从而执行查询操作。count = sqlsession.selectOne("cn.smbms.dao.user.UserMapper.count");
//注意:这里要事先保存UserMapper.xml文件在mybatis-config.xml中进行了引入。
//这里cn.smbms.dao.use.UserMapper为UserMapper.xml文件里的namespace属性值。logger.debug("UserMapperTes count----->" + count);} catch (IOException e) {e.printStackTrace();} finally {//关闭SqlSession对象sqlsession.close();}}

🧋二、 MyBatis框架的优缺点

2.1.MyBatis框架的优点

1、与JDBC相比,减少了50%以上的代码量
2、最简单的持久化框架,小巧并简单易学
3、SQL代码从程序代码中彻底分离,可重用
4、提供XML标签,支持编写动态SQL
5、提供映射标签,支持实体类对象与数据库的字段映射

2.2.MyBatis框架的缺点

1、SQL语句编写工作量大,对开发人员有一定要求
2、数据库移植性差

⭐最后⭐

🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁
🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

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

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

相关文章

Linux下UDP编程

一.概念介绍 1.socket 是什么&#xff1f; socket&#xff08;套接字&#xff09;本质上是一个抽象的概念&#xff0c;它是一组用于网络通信的 API&#xff0c;提供了一种统一的接口&#xff0c;使得应用程序可以通过网络进行通信。在不同的操作系统中&#xff0c;socket 的实…

【Python系列】Jinja2 模板引擎

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【软件测试】软件测试生命周期与Bug

目录 &#x1f4d5; 前言 &#x1f334;软件测试的生命周期 ​编辑&#x1f332;BUG &#x1f6a9; 概念 &#x1f6a9;描述bug的要素 &#x1f6a9;bug的级别 &#x1f6a9;bug的生命周期 &#x1f3c0;先检查自身&#xff0c;是否bug描述不清楚 &#x1f3c0;站在用…

Docker 安装 SqlServer

摘要&#xff1a;我们工作当中经常需要拉取多个数据库实例出来做集群&#xff0c;做测试也好&#xff0c;通过 Docker 拉取 SqlServer 镜像&#xff0c;再通过镜像运行多个容器&#xff0c;几分钟就可以创建多个实例&#xff0c;效率是相当的高。 1. docker 拉取镜像 注意&am…

[mysql]mysql的演示使用

mysql的演示使用 几个常见操作 1&#xff1a;show databases 这里第一个information_schema代表的是数据库的基本系统信息&#xff0c;数据库名称&#xff0c;表的名称&#xff0c;存储权限 第二个是mysql&#xff0c;保存的是我们数据库运行的时候需要的系统信息&#xff0…

数据中台即将消亡,数智基建取而代之?

数据中台即将消亡&#xff0c;数智基建取而代之&#xff1f; 前言数智基建 前言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;企业的发展如同在浩瀚海洋中航行的巨轮&#xff0c;而数据则是推动这艘巨轮前行的强大动力。然而&#xff0c;如何有效地管理和利用数据&#xff0c;…

Kafka3.x 使用 KRaft 模式部署 不依赖 ZooKeeper

前言 Kafka 从 2.8.0 版本开始引入了 Kafka Raft Metadata Mode&#xff08;KRaft 模式&#xff09;&#xff0c;这个模式允许 Kafka 在不依赖 ZooKeeper 的情况下进行元数据管理。KRaft 模式在 Kafka 3.0.0 中进入了稳定版本,本文部署的 Kafka_2.12-3.6.0 单机模式 环境 Ce…

工厂andon暗灯系统数字化应用案例

在当今数字化浪潮席卷制造业的时代&#xff0c;工厂的高效运作和精益管理离不开先进的技术手段。Andon 暗灯系统作为精益制造执行中的核心工具和 MES 制造执行系统的重要组成部分&#xff0c;正以其强大的功能为工厂带来全新的变革。 某汽车零部件制造工厂&#xff0c;拥有多条…

Java设计模式之策略模式详细讲解和案例示范

Java设计模式之策略模式详细讲解和案例示范 在软件开发中&#xff0c;策略模式是一种常见且非常有用的设计模式。它允许定义一系列算法&#xff0c;将它们一个个封装起来&#xff0c;并且使它们可以互相替换。策略模式让算法可以独立于使用它们的客户端而变化。本篇文章将详细…

[MySql]保姆级上手教程

介绍 通过数据库管理系统, 编写执行SQL语句, 实现对数据库数据的管理 数据库(DataBase): 储存和管理数据的仓库数据库管理系统(DBMS): 操作和管理数据库的软件SQL语言: 操作关系型数据库的通用语言数据库可以分为关系型数据库和非关系型数据库 相关产品 常见的关系型数据库产…

【golang-入门】环境配置、VSCode开发环境配置

golang介绍基础信息 windows环境配置安装包下载安装环境变量设置检查 VSCode开发配置插件配置在 Visual Studio Code 中安装通义灵码go hello word 参考资料 golang介绍 基础信息 golang官网&#xff1a;https://go.dev/golang学习网&#xff1a;https://studygolang.com/使用…

android使用YOLOV8数据返回到JAVA方法(JAVA)

一、下载扩展文件(最耗时,所以放第一步) 1.opencv下载 1)官网:Releases - OpenCV 2)下载最新版本的android包 2.NCNN下载 1)NCNN下载地址(20220420版本):https://github.com/Tencent/ncnn/releases/download/20220420/ncnn-20220420-android-vulkan.zip 3.在你的…

【C++二分查找】2271. 毯子覆盖的最多白色砖块数

本文涉及的基础知识点 C二分查找 LeetCode2271. 毯子覆盖的最多白色砖块数 给你一个二维整数数组 tiles &#xff0c;其中 tiles[i] [li, ri] &#xff0c;表示所有在 li < j < ri 之间的每个瓷砖位置 j 都被涂成了白色。 同时给你一个整数 carpetLen &#xff0c;表…

使用 Jpom 自动化构建并部署项目

1、前言 Jpom 是一款专为开发者设计的轻量级运维工具。它提供了一整套从项目构建到自动部署&#xff0c;再到日常运维和项目监控的解决方案&#xff0c;帮助开发者更好地管理和维护项目。 Jpom 的目标是让开发者不再为复杂的运维流程头疼。它支持多种安装方式&#xff0c;灵活…

RoboCat: A Self-Improving Generalist Agent for Robotic Manipulation

发表时间&#xff1a;22 Dec 2023 论文链接&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId4836882796542689281&noteId2413286807916664832 作者单位&#xff1a;Google DeepMind Motivation&#xff1a;受视觉和语言基础模型的最新进展的启发&#xff0c…

【教程】实测np.fromiter 和 np.array 的性能

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 函数简介 np.fromiter np.array 测试代码 实验结果 结果分析 实验总结 学长想说 函数简介 np.fromiter np.fromiter 是 NumPy 提供的一…

设计模式 -- 装饰者模式(Decorator Pattern)

1 问题引出 1.1 咖啡馆订单项目 咖啡种类/单品咖啡&#xff1a;Espresso(意大利浓咖啡)、ShortBlack、LongBlack(美式咖啡)、Decaf(无因咖啡) 调料&#xff1a;Milk、Soy(豆浆)、Chocolate 要求在扩展新的咖啡种类时&#xff0c;具有良好的扩展性、改动方便、维护方便 使用…

无人机之云台的作用

无人机云台在无人机技术中扮演着至关重要的角色&#xff0c;其作用主要体现在以下几个方面&#xff1a; 一、 确保拍摄稳定性 防抖动&#xff1a;无人机在飞行过程中&#xff0c;尤其是在复杂环境下&#xff0c;如遇到风力干扰或进行高速飞行时&#xff0c;机身容易产生震动和…

Beyond Compare忽略特定格式文本,忽略匹配正则表达式

一 概述 文本对比时忽略某些文本。比如有些生成的文件需要做差异对比&#xff0c;除了内容有差异外&#xff0c;自动生成的ID也不同&#xff0c;想忽略这些ID。特别是文件内容比较多的时候。 如上图&#xff0c;其中UUID“*”的部分我想忽略。 二 方法 方法1 通过Beyond Co…

MySQL 中间件 MySQL-Router

目录 1 MySQL-Router 的介绍 2 MySQL-Router 负载均衡 2.1 设计目的&#xff1a; 2.2 HAProxy 与 Nginx 和 MySQL-Router 之间的区别 2.3 MySQL-Router 的优势 3 MySQL-Router 的获取 3 MySQL-Router 的使用 3.1 实验环境 3.2 MySQL-Router 部署 3.3 MySQL-Router 配置 3.4 测…