【JAVAEE框架】Mybatis项目起步讲解

举报
追zhui 发表于 2025/11/13 20:36:08 2025/11/13
【摘要】 >  哈喽~大家好呀,这篇来看看使用Mybatis时,初始环境下的介绍。如何在 idea 创建 mybatis项目,可以看看这位[大佬](http://t.csdn.cn/ERXhe)写的**目录**[一、Mybatis介绍](#一、Mybatis介绍)[二、起步结构](#二、起步结构)[三、具体讲解](#三、具体讲解)[1、mybatis-config.xml 文件](#1、mybatis...

>  哈喽~大家好呀,这篇来看看使用Mybatis时,初始环境下的介绍。如何在 idea 创建 mybatis项目,可以看看这位[大佬](http://t.csdn.cn/ERXhe)写的


**目录**

[一、Mybatis介绍](#一、Mybatis介绍)

[二、起步结构](#二、起步结构)

[三、具体讲解](#三、具体讲解)

[1、mybatis-config.xml 文件](#1、mybatis-config.xml 文件)

[2、dao](#2、dao)

[3、xxxmapper.xml 文件](#3、xxxmapper.xml 文件)

[4、pom.xml文件](#4、pom.xml文件)

[四、结构与测试](#四、结构与测试)

[1、结构](#1、结构)

[ 2、测试代码](# 2、测试代码)

------


# 一、Mybatis介绍

> mybatis是一款orm类型的数据持久化框架,将jdbc的手动注册驱动、建立连接、获取sql执行对象、释放连接等操作进行了自动化装配,只需要进行简单的配置就可以实现自动注册驱动、建立连接、释放连接等操作,开发人员只需要关注sql语句的编写就可以了,而不用过多的关注数据库连接问题。mybatis支持自定义 SQL、存储过程以及高级映射,可以通过sql映射文件实现sql语句的编写,支持动态sql,用条件判断进行查询可以实现sql复用。

# 二、起步结构

> 上面介绍使用了mybatis,可以理解简化jdbc代码以前写项目,最常见走 MVC 架构,web到servlet,servlet到service,service到dao,dao到db,再来返回数据走一遍反流程,虽然架构思想很清晰,但很麻烦(上一篇文章的[网上购物项目](https://blog.csdn.net/aasd23/article/details/126644476?spm=1001.2014.3001.5502) ,就是MVC架构,累计1.5w行代码,里面的前端页面我一个一个div搭起来的,而光一个dao层就1k多行代码,非常的冗长)这肯定不是我们想要的。
>
> ![img](https://img-blog.csdnimg.cn/6f13b8a2e03a46e490d1b84350a80325.png)![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)编辑

> 开始的准备,我们肯定需要数据库了,这里就不一一介绍了,直接看表
>
> ![img](https://img-blog.csdnimg.cn/aa2f5c2ba1144b3cb01dff90ff008378.png)
>
> ![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)编辑

# 三、具体讲解

## 1、mybatis-config.xml 文件

mybatis-config.xml是MyBatis核心配置文件,该文件配置了MyBatis的一些全局信息,包含数据库连接信息和Mybatis运行时所需的各种特性,以及设置和影响Mybatis行为的一些属性

**configuration :**配置文件的根元素

**properties:** 属性:定义配置外在化

**settings:**设置:定义mybatis的一些全局属性

**typeAliases:**配置别名

**environments:**环境:配置mybatis的环境

**environment:**环境变量:可以配置多个环境变量,比如使用数据源时,就需要配置多个环境变量

**transactionManager:**事务管理器

**dataSource:**数据源

**mappers:**映射器:指定映射文件位置

**注意:**mybatis不能使用通配符

**示例代码**

```java
<?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">
<!-- 配置文件的根元素 -->
<configuration>
    <!--属性:定义配置外在化-->
    <properties resource="jdbc.properties"></properties>

    <!--设置:定义mybatis的一些全局属性-->
<!--    <settings>-->
<!--        <setting name="logImpl" value="LOG4J"/>-->
<!--        <setting name="autoMappingBehavior" value="FULL"/>-->
<!--    </settings>-->

    <!--配置别名-->
    <typeAliases>
        <package name="com.itxzw.model"/>
        <package name="com.itxzw.dao"/>
    </typeAliases>

    <!--环境:配置mybatis的环境-->
    <environments default="development">
        <!--环境变量:可以配置多个环境变量,比如使用数据源时,就需要配置多个环境变量-->
        <environment id="development">
            <!--事务管理器-->
            <transactionManager type="JDBC"></transactionManager>
            <!--数据源-->
            <dataSource type="POOlED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>

    <!--映射器:指定映射文件位置-->
    <!--mybatis不能使用通配符-->
    <mappers>
        <mapper resource="com\itxzw\mapper\common\BrandDaoMapper.xml"/>
    </mappers>
</configuration>
```

![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)

上面的jdbc.properties里面存放了用户名、密码、驱动与url了

## 2、dao

创建dao层,写接口,实现方法

**IBrandDao**

```java
package com.itxzw.dao;

import com.itxzw.model.Brand;

import java.util.List;

public interface IBrandDao {
    
    public List<Brand> getUserList() throws Exception;

}
```

![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)

**BrandDao**

```java
public class BrandDao implements IBrandDao {

    private String namespace = "com.itxzw.dao.IBrandDao";

    public List<Brand> getUserList() throws Exception {
        // 0. 会话工厂的创建者
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        // 0.5 读取配置文件 mybatis-config.xml
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

        // 1. 创建会话工厂
        SqlSessionFactory factory = builder.build(is);

        // 2. 获取SqlSession对象
        SqlSession sqlSession = factory.openSession();

        List<Brand> users = sqlSession.selectList(namespace+".getUserList",Brand.class);

        sqlSession.close();

        return users;
    }

}
```

![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)

**SqlSessionFactoryBuilder:**就是db与dao的一次会话,就像web与servlet的会话一样

**Resources.getResourceAsStream:**然后这里就读取你的mybatis配置的文件

开始创建会话工厂、 获取SqlSession对象、打开 Session,然后开始执行

**示例代码**

```java
public class BrandDao implements IBrandDao {

    private String namespace = "com.itxzw.dao.IBrandDao";

    public List<Brand> getUserList() throws Exception {
        // 0. 会话工厂的创建者
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

        // 0.5 读取配置文件 mybatis-config.xml
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");

        // 1. 创建会话工厂
        SqlSessionFactory factory = builder.build(is);

        // 2. 获取SqlSession对象
        SqlSession sqlSession = factory.openSession();

        List<Brand> users = sqlSession.selectList(namespace+".getUserList",Brand.class);

        sqlSession.close();

        return users;
    }

}
```

![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)

## 3、xxxmapper.xml 文件

这个mapper标签里面保存了增删改查等子标签(在这些子标签里面写对应的增删改查的sql语句)

**namespace:** 就是创建的命名空间

**resultType:**返回一般数据类型的值

> **eg:**比如根据id或者字段条件查询获取表中的某一个字段值
>
> User Sel(int id); //根据id查询
>
> \#{}:占位符,预编译
>
> ${}:sql拼接

**代码示例**

```java
<?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="com.itxzw.dao.IBrandDao">

    <select id="getUserList" resultType="Brand">
        select * from tb_brand
    </select>

    <!--#{}:占位符,预编译-->
    <!--${}:sql拼接-->

</mapper>
```

![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)

> 当然这只是查询语句,还有增删改,这里就不一一说明了,看下图
>
> ![img](https://img-blog.csdnimg.cn/d4a4bb00aff44ef4802ff47ca8b23f39.png)
>
> ![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)编辑

## 4、pom.xml文件

> 该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件。

**简称:**我们不用手动去导入.jar包了

**标签详细讲解**

```java
 <!--project是pom.xml的根元素,包含了一些约束的信息,比如xlms,xsi-->
<project>
        <!--指定了当前pom的版本-->
         <modelVersion>4.0.0</modelVersion>
        <!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->
        <!-- 基础设置 -->
        <groupId>反写公司的网址+项目名称</groupId>
        <artifactId>项目名称+模块名</artifactId>
        <version>当前项目版本号</version>
         <!-- 默认是jar,还可以打包成war/zip/pom-->
        <packaging>...</packaging>
        <!-- 项目描述名,一般是写项目文档的时候才使用 -->
        <name>...</name>
        <!-- 项目的地址-->
        <url>...</url>
        <!-- 项目的描述 -->
        <description>...</description>
        <!-- 开发人员的列表 -->
        <developers>...</developers>
        <!-- 许可证的信息 -->
        <licenses>...</licenses>
        <!-- 组织信息 -->
        <organization>...</organization>

        <!-- 依赖列表,下面可以包含多个依赖项dependency-->
        <dependencies>
           <dependency>
               <!-- 指定坐标确定依赖项的位置 -->
               <groupId></groupId>
               <artifactId></artifactId>
               <version></version>
               <type></type>
               <!-- 依赖包的依赖范围-->
               <scope></scope>
               <!-- 这个标签只有true和false两个值,是用来设置依赖是否可选 -->
               <optional></optional>
               <!-- 排除依赖传递列表 -->
               <exclusions> 
                 <exclusion>
                 </exclusion>  
               </exclusions>
            </dependency>
         </dependencies>

         <!-- 依赖管理,里面包含多个依赖,但是它并不会被运行,即不会被引用到实际的依赖中-->
         <!--这个标签主要是用来定义在父模块中,供子模块继承用 -->
         <dependencyManagement>                              
             <dependencies>
                <dependency>
                </dependency>
             </dependencies>
        </dependencyManagement>

         <!-- 常用于给构件的行为提供相应的支持 -->
          <build>
            <!-- 插件列表 -->
            <plugins>
                <plugin>
                   <groupId></groupId>
                   <artifactId></artifactId>
                   <version></version>
                 </plugin>
             </plugins>
          </build>

        <!-- 用于在子模块中对父模块的pom的继承 -->
        <parent>...</parent>
         <!-- 用来聚合多个模块,让多个模块进行编译,不用一个一个来 -->
        <modules>
          <module>
          </module>
        </modules>
</project>
```

![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)

# 四、结构与测试

上面的准备结束后我们就来看看结构与测试了

## 1、结构

![img](https://img-blog.csdnimg.cn/2c61b1bd032a4338a5e099dc2fd23b29.png)

![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)编辑

##  2、测试代码

```java
public class TestMyBatis {

    @Test
    public void test01() throws Exception {

        IBrandDao userDao = new BrandDao();

        List<Brand> userList = userDao.getUserList();

        for (Brand brand : userList) {
            System.out.println(brand);
        }


    }

}
```

![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)

**运行结果**

![img](https://img-blog.csdnimg.cn/b9cb0148d0a94f3a9522155d3cdeda00.png)![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)编辑

 出结果了,我们最开始的mybatis就没问题了。


> **不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!**
>

>
> ![img](https://img-blog.csdnimg.cn/02bed6ae9d27419b804c4605db6cee66.gif)![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)编辑

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。