如何使用IDEA搭建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.properties、log4j.properties这两个文件。

mybatis-config.xml代码如下:

html 复制代码
<?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代码如下:

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代码如下:

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代码如下:

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 复制代码
<?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,代码如下:

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、数据库移植性差

⭐最后⭐

🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍒博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言

相关推荐
_oP_i44 分钟前
Pinpoint 是一个开源的分布式追踪系统
java·分布式·开源
mmsx1 小时前
android sqlite 数据库简单封装示例(java)
android·java·数据库
武子康1 小时前
大数据-258 离线数仓 - Griffin架构 配置安装 Livy 架构设计 解压配置 Hadoop Hive
java·大数据·数据仓库·hive·hadoop·架构
豪宇刘2 小时前
MyBatis的面试题以及详细解答二
java·servlet·tomcat
秋恬意2 小时前
Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别
java·数据库·mybatis
FF在路上3 小时前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进3 小时前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
众拾达人4 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.4 小时前
Mybatis-Plus
java·开发语言
不良人天码星4 小时前
lombok插件不生效
java·开发语言·intellij-idea