如何使用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.mzph.cn/pingmian/52861.shtml

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

相关文章

Unity获取SceneView尺寸

获取SceneView尺寸 var sceneView SceneView.lastActiveSceneView; var size new Vector2(sceneView.position.width,sceneView.position.height);

综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 综合评价 | 基于层次-熵权-变异系数-正态云组合法的综合评价模型&#xff08;Matlab&#xff09; AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析…

Ansible自动化运维实战:打造高效、可靠的系统管理方案!

Ansible是一个在自动化运维领域广泛使用的工具&#xff0c;它基于Python开发&#xff0c;能够实现批量系统配置、程序部署和运行命令等功能。以下将详细解析Ansible自动化运维项目的构建与应用&#xff1a; 项目结构设计 ansible.cfg&#xff1a;这是Ansible的主配置文件。inv…

推荐10个开源且实用的大模型

在AI和深度学习的快速发展中&#xff0c;许多开源模型逐渐成为中小企业和个人开发者的得力助手。这些模型通常参数较少&#xff0c;易于使用和部署&#xff0c;适合实际应用场景。本文将推荐10个在GitHub上比较实用的开源大模型&#xff0c;帮助你快速上手&#xff0c;解决实际…

vscode中如何设置不显示隐藏文件

在vscode中&#xff0c;有时候&#xff0c;会显示一些隐藏文件&#xff0c;如何设置让其不显示呢&#xff1f; 解决办法 例如&#xff1a;我这里有一个.vscode隐藏文件夹&#xff0c;是vscode默认生成的一个配置目录&#xff0c;我想要它不在资源管理器中进行显示。 操作步骤&a…

Cesium 地球云图

Cesium 地球云图 使用自定义图原(Primitive)实现。 支持速度和透明的动态调整。 支持设置云图高度, 当相机高度小于云图高度时, 渐隐消失。 Cesium 地球云图

在 VS Code 中使用 Git 源代码管理【Mac 版】

文章目录 一、Git 使用文档二、使用示例1、复制远程仓库地址2、查看当前所在的分支2.1、界面查看2.2、终端查看 3、修改/新增文件4、显示增改的详细内容5、添加暂存区6、查看/取消暂存的更改7、提交本地代码库8、待提交文件9、推送到远程仓库10、验证11、查看推送记录11.1、关于…

全国大学生数学建模比赛——关联规则

一、问题背景与关联规则适用性 在数学建模比赛中&#xff0c;常常会遇到需要分析大量数据以寻找变量之间潜在关系的问题。关联规则分析作为一种数据挖掘技术&#xff0c;特别适用于这种场景。例如&#xff0c;在一些实际问题中&#xff0c;可能需要从众多的因素中找出哪些因素之…

“#!”是什么命令?Shell中指定解释器

#!&#xff08;称为 shebang 或 hashbang&#xff09;后面的内容是 解释器 的路径。它用于指定执行脚本的解释器。这个标记告诉操作系统在执行脚本时应该使用哪个程序来解释脚本文件中的内容。 详细解释 shebang 的作用: #! 是一个特殊的字符序列&#xff0c;在脚本文件的第一…

Unet改进15:添加TripletAttention||减少冗余计算和同时存储访问

本文内容:在不同位置添加TripletAttention注意力机制 目录 论文简介 1.步骤一 2.步骤二 3.步骤三 4.步骤四 论文简介 由于注意机制具有在通道或空间位置之间建立相互依赖关系的能力,近年来在各种计算机视觉任务中得到了广泛的研究和应用。在本文中,我们研究了轻量级但…

MAC环境导出项目的目录结构

一、安装Homebrew包管理工具 /bin/bash -c "$(curl -fsSL https://gitee.com/ineo6/homebrew-install/raw/master/install.sh)" 官网网址&#xff1a;https://brew.idayer.com/ 二、用brew包管理工具安装tree brew install tree 三、打开终端&#xff0c;导出项目…

APP、小程序对接聚合广告平台需要提供哪些资料?

开发者通过广告变现获得稳定的收益&#xff0c;通过在应用中展示广告获得收益&#xff0c;而广告商则能够在广告中获得曝光和用户互动。 开发者接入聚合广告SDK可以对接聚合广告平台&#xff0c;开发者可以按照提供的iOS/Android SDK 接入文档&#xff0c;完成对接。对接主要分…

【机器学习】循环神经网络(RNN)介绍

引言 在现代人工智能(AI)和机器学习领域,循环神经网络(Recurrent Neural Networks, RNNs)作为一种能够处理序列数据的神经网络架构,已经成为众多应用的核心技术之一。RNNs的出现为处理时间序列数据和自然语言处理等任务提供了强大的工具,使得计算机能够理解和生成具有时…

NLP从零开始------16.文本中阶处理之序列到序列模型(1)

1. 序列到序列模型简介 序列到序列( sequence to sequence, seq2seq) 是指输入和输出各为一个序列(如一句话) 的任务。本节将输入序列称作源序列&#xff0c;输出序列称作目标序列。序列到序列有非常多的重要应用&#xff0c; 其中最有名的是机器翻译( machine translation), 机…

硬件和软件哪个吃香?

大家好&#xff0c;我是记得诚。 知乎上的一个帖子。 本人计算机科学与技术专业本科毕业&#xff0c;准备出来工作&#xff0c;但是不知道从事哪方面的工作&#xff0c;硬件和软件哪个相对工资高&#xff0c;比较容易上手呢&#xff1f; 记得诚回答&#xff1a; 这是一个老…

数据资产目录中的主数据划分(汽车制造行业)

主数据在制造业中扮演着至关重要的角色&#xff0c;它对于提升效率、降低成本、确保产品质量和优化供应链管理等方面具有深远影响。以下是主数据在制造业中的几个重要性方面&#xff1a; 提高数据一致性&#xff1a;主数据确保了整个企业中关于产品、客户、供应商、物料等信息的…

Flask-RESTFul 之 RESTFul 的响应处理 之定制返回的 json格式

Flask-RESTFul 之 RESTFul 的响应处理 之定制返回的 json格式 使用 `marshal_with` 和 `fields` 定制响应结构重写 Flask 的 `jsonify` 方法在返回前手动构造 JSON使用 Flask-RESTful 的 `Response` 类自定义输出处理器结论在 Flask-RESTful 中,如果你想要定制返回的 JSON 格式…

中仕公考怎么样?公务员考试什么时候补录?

公务员考试补录的时间和方法通常因地区和职位的不同有所区别&#xff0c;一般来说&#xff0c;这一过程会在面试、体检和考核环节完成后启动。 如果在招录过程中出现职位空缺或者并未全部招满的情况&#xff0c;就会进行补录。用人单位会通过其官方或公告形式公布相关信息&…

构建智能化Web应用防火墙与自动化攻击测试系统

在如今高度互联的世界中&#xff0c;Web应用正承受着前所未有的安全压力。从SQL注入到DDoS攻击&#xff0c;威胁无处不在&#xff0c;防护措施不容懈怠。为了应对这些挑战&#xff0c;我开发了一款智能化Web应用防火墙&#xff08;WAF&#xff09;&#xff0c;并配套设计了一个…

【数据结构】队列(Queue)

目录 队列概念 ​方法 队列模拟实现 链表实现队列 入队列 出队列 获取队头元素 数组实现队列 入队列 出队列 返回头队列 返回尾队列 完整代码 双链表实现队列 数组实现队列&#xff08;设计循环队列&#xff09; 队列概念 队列&#xff1a;只允许在一段进行插入…