如何使用IDEA搭建Mybatis框架环境

news2024/11/15 1:52:03

文章目录

  • ☕前言
    • 为什么学习框架技术
    • 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%n

log4j.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;  //id
    private 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);

	@Before
	public void setUp() throws Exception {
	}

	@Test
	public 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、创建SqlSession
			sqlsession = 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.coloradmin.cn/o/2082109.html

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

相关文章

前端性能优化:使用Vue3+TS+Canvas对图片进行压缩后再上传,优化带宽,减小服务器存储成本,减少流量损耗

在上传图片之前&#xff0c;对图片进行压缩。看到这里是不是有点懵&#xff0c;前端怎么压缩图片呢&#xff0c;这不应该是后端做的吗&#xff1f; 但是我在开发的时候接到了这样一个需求&#xff0c;要求对用户上传的图片进行一定的压缩&#xff0c;而且并且尽量还原图片的清…

大模型如何改变世界?李彦宏:未来至少一半人要学会“提问题“

2023年爆火的大模型&#xff0c;对我们来说意味着什么&#xff1f; 百度创始人、董事长兼CEO李彦宏认为&#xff0c;“大模型即将改变世界。” 5月26日&#xff0c;李彦宏参加了在北京举办的2023中关村论坛&#xff0c;发表了题为《大模型改变世界》的演讲。李彦宏认为&#…

2024年新算法-基于SBOA-BP混合神经网络的数据预测(Python代码实现)

在今天的数字化时代&#xff0c;机器学习和人工智能领域的不断发展为数据处理和预测提供了强大的工具。其中&#xff0c;BP神经网络&#xff08;反向传播神经网络&#xff09;作为一种经典的网络模型&#xff0c;因其能够处理复杂的非线性问题而备受关注。然而&#xff0c;传统…

吴恩达机器学习课后作业-07kmeans and pca

k-均值与PCA k-均值图片颜色聚类 PCA&#xff08;主成分分析&#xff09;对x去均值化图像降维 k-均值 K-均值是最普及的聚类算法&#xff0c;算法接受一个未标记的数据集&#xff0c;然后将数据聚类成不同的组。 K-均值是一个迭代算法&#xff0c;假设我们想要将数据聚类成n个…

python-变量声明、数据类型、标识符

一.变量 1.什么是变量 为什么需要变量呢&#xff1f; 一个程序就是一个世界&#xff0c;不论使用哪种高级程序语言编写代码&#xff0c;变量都是其程序的基本组成单位。如下图所示的sum和sub都是变量。 变量的定义&#xff1a; 变量相当于内存中一个数据存储空间的表示&#…

Spring MVC常用注解及用法

目录 1.建立连接--RequestMapping 2.请求 2.1 传递单个参数 2.2 传递多个参数 2.3 传递对象 2.4 参数重命名--RequestParam 2.5 传递数组 2.6 传递集合 2.7 传递json数据--RequestBody 2.8 获取URL中参数--PathVariable 2.9 上传文件--RequestPart 2.10 获取Cookie--…

bomb 实验

GDB常用命令&#xff1a; GDB调试常用命令-CSDN博客 原理&#xff1a; 编译与反汇编过程-CSDN博客 Bomb实验实现 阶段一&#xff1a; 分析 分配空间&#xff1a;sub $0x8,%rsp 为局部变量分配栈空间。设置参数&#xff1a;mov $0x402400,%esi 将字符串地址加载到 %esi。…

MMsegmentation与MMdeploy简单使用

最近涉及到了图像分割的任务&#xff0c;于是拿来写下博客加深下使用。 MMsegmentation与MMdeploy的环境配置暂不做讲解&#xff0c;在官网和其他博客中有很多说明。 MMdeploy主要是把pt转为 onnx_int8的情况。 MMsegmentation环境配置可以参考 : 安装与配置MMSegmentation 目录…

【管理型文档】软件需求管理过程(原件)

软件需求管理规程应明确需求收集、分析、确认、变更控制及验证等流程&#xff0c;确保需求准确反映用户期望&#xff0c;支撑软件开发。该规程要求系统记录需求来源&#xff0c;通过评审确保需求完整、清晰、无歧义&#xff0c;实施变更控制以维护需求基线稳定&#xff0c;并持…

后端面试真题整理

面试问题整理 本人主要记录2024年秋招、春招过程中的疑难八股真题&#xff0c;参考来源&#xff1a;牛客网、知乎等。 八股 深拷贝与浅拷贝 浅拷贝&#xff1a; 浅拷贝会在堆上创建一个新的对象&#xff08;区别于引用拷贝的一点&#xff09;&#xff0c;不过&#xff0c;如果…

井盖丢失隐患大?智慧井盖监管系统帮你解决

在现代都市中&#xff0c;我们每天行走在钢筋水泥之间&#xff0c;却很少有人注意到脚下的小小井盖。这些不起眼的圆形铁盘不仅是城市地下管网的入口&#xff0c;更是维系城市生命线的重要组成部分。然而&#xff0c;当暴雨来袭&#xff0c;或是深夜无人之时&#xff0c;井盖的…

无线麦克风什么牌子的音质效果好?一文读懂麦克风哪个牌子的好

无线领夹麦克风哪款音质最好&#xff1f;在这个追求高质量音效的年代&#xff0c;选择一款合适的无线领夹麦克风&#xff08;简称领夹麦&#xff09;对于提升录音或直播的音质至关重要。随着市场的不断扩大&#xff0c;市面上充斥着大量信号不稳定、音质差的无线领夹麦克风&…

2024年汽车零部件企业CRM研究:服务商排名、案例分析、需求分析

最近媒体上频现各车企大佬发声&#xff0c;抗议某汽车企业“不要卷价格&#xff0c;要卷长期价值”&#xff0c;还有的直接批判其打破行业规则。图穷匕现&#xff0c;汽车行业的竞争愈发激烈了。 汽车产业作为我国国民经济的重要支柱产业、经济增长和转型的重要抓手&#xff0…

微软将持续多年的 Mono 项目移交给 Wine

今天&#xff0c;微软突然决定将 Mono 项目交由 Wine 开发社区管理。自Mono项目上一次作为开源.NET框架发布以来&#xff0c;已经过去了五年时间&#xff0c;此前Wine已经使用了Mono的代码&#xff0c;而在微软专注于开源.NET和其他工作的情况下&#xff0c;此举是合理的&#…

Python编程的终极十大工具(非常详细)零基础入门到精通,收藏这一篇就够了

&#x1f91f; 基于入门网络安全打造的&#xff1a;&#x1f449;黑客&网络安全入门&进阶学习资源包 Python一直以来都是程序员们的首选编程语言之一&#xff0c;其灵活性和功能强大的库使其成为解决各种问题的理想选择。在本文中&#xff0c;我们将介绍Python编程的终…

fdMemTable内存表进行SQL查询

fdLocalSql可以对fdMemTable内存表进行SQL查询&#xff08;可以对多个fdMemTable内存表进行联表查询哦&#xff09;&#xff0c;fdLocalSql使用SQLITE引擎&#xff0c;而FIREDAC驱动SQLITE&#xff0c;连SQLITE驱动DLL都不需要附带的。 所有设置用FormCreate里用代码 procedure…

【C#】Visual Studio2017 MSDN离线安装

1. 运行Visual Studio Installer 在Windows的开始菜单中直接搜索 2. 单击“修改”按钮 3. 依次点击&#xff0c;单个组件 - 代码工具 - Help Viewer - 修改&#xff0c;开始安装 4. 下载速度慢解决方法 修改IPv4 DNS 参考&#xff1a;visual studio下载慢解决方法&#xf…

unity脚本

Transform.Rotate 描述 使用 Transform.Rotate 以各种方式旋转 GameObjects。通常以欧拉角而不是四元数提供旋转。 可以在世界轴或本地轴中指定旋转。 世界轴旋转使用 Scene 的坐标系&#xff0c;因此在开始旋转 GameObject 时&#xff0c;它的 x、y 和 z 轴与 x、y 和 z 世…

Leetcode 131.分割回文串 回溯 C++实现

Leetcode 131. 分割回文串 问题&#xff1a;给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 算法&#xff1a; 创建二维返回数组 ans &#xff0c;和临时数组 path 。 进入 dfs 函数&#xff0c;当 …

初识linux(1)

linux背景 1991年10月5日&#xff0c;赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组 &#xff08;comp.os.minix&#xff09;中宣布他编制出了一种类似UNIX的小操作系统&#xff0c;叫Linux。新的操作系统是受到另 一个UNIX的小操作系统——Minix的启发…