MyBatis教程第一章 超详细2022最新版

请注意下面这段话!!!

大家好呀,2022年最新版MyBatis教程来啦,本文章是第一章节,我会将MyBatis技术分成2-3个章节来讲,决心要把MyBatis讲清楚,讲明白了,本教程适合复习MyBatis的人群以及新手来学习MyBatis框架,请不要嫌文章太长,文字太多,而划走,相信我,只要认真慢慢看完这篇文章,你一定会有很大收获的,浏览本文章大概耗时20-30分钟,本教程是基于尚硅谷2022MyBatis教程,如果有时间允许的话,那就去b站看视频学习吧。

一、MyBatis简介

1MyBatis的历史
	MyBatis最初是Apache的一个开源项目iBatis, 
	20106月这个项目由Apache Software Foundation迁移到了Google Code。
	随着开发团队转投Google Code旗下, iBatis3.x正式更名为MyBatis。
	代码于201311月迁移到Github。
	iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。
	iBatis提供的持久层框架包括SQL MapsData Access Objects(DAO)。
2MyBatis特性
	1MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架
	2MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集
	3MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(普通的Java对象)映射成数据库中的记录
	4MyBatis 是一个 半自动的ORM(Object Relation Mapping)框架

3.MyBatis下载地址
MyBatis下载地址:https://github.com/mybatis/mybatis-3
在这里插入图片描述
在这里插入图片描述
下载完成之后是一个压缩包。
如下图所示:
在这里插入图片描述
压缩包解压之后,里面的内容是这样的。
如下图所示:
在这里插入图片描述

接下来就是代码环节了

1、配置开发环境
IDE:idea 2021.1
构建工具:maven 3.6.3(我是用的idea自带的maven)
MySQL版本:MySQL 8.0
MyBatis版本:MyBatis 3.5.7

2、创建maven工程
创建maven项目的步骤,这里就不介绍了,主要是讲解MyBatis框架,不会创建的小伙伴们可以去百度一下。
file ==》
在这里插入图片描述
在这里插入图片描述

创建完的maven项目的目录应该是下图所示这样,有些小伙伴选择了webapp模板,main目录下面还会有一个webapp文件夹。
在这里插入图片描述

3、引入依赖

<dependencies> 

  <!-- Mybatis的依赖 --> 
  <dependency> 
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.7</version>
  </dependency> 

  <!-- junit测试的依赖,也就是单元测试的依赖 --> 
  <dependency>
     <groupId>junit</groupId>
     <artifactId>junit</artifactId>
     <version>4.12</version>
     <scope>test</scope>
  </dependency>

  <!-- MySQL的驱动,version对应你的数据库大版本号,
  比如5.5和5.7版本的MySQL数据库,驱动的version只要是5开头就行 -->
  <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>   
    <version>8.0.37</version>
   </dependency>

 </dependencies>

4、然后就是创建MyBatis的核心配置文件
在resource目录下面,创建mybatis-config.xml文件,当然不一定要这个名字,此时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">

<configuration>

    <!--
    environments:设置多个连接数据库的环境
    属性:
    default:设置默认使用的环境的id
    -->
    <environments default="development">

        <!--
        environment:设置具体的连接数据库的环境信息
         属性:
          id:设置环境的唯一标识,可通过environments标签中的default设置某一个环境的id, 表示默认使用的环境
           -->
        <environment id="development">
            <!--transactionManager:设置事务管理方式
            属性:
            type:设置事务管理方式,type="JDBC|MANAGED"
            type="JDBC":设置当前环境的事务管理都必须手动处理
            type="MANAGED":设置事务被管理,例如spring中的AOP
            -->
            <transactionManager type="JDBC"/>
            <!--
            dataSource:设置数据源
             属性:
             type:设置数据源的类型,
             type="POOLED|UNPOOLED|JNDI"
             type="POOLED":使用数据库连接池,即会将创建的连接进行缓存,下次使用可以从 缓存中直接获取,不需要重新创建
             type="UNPOOLED":不使用数据库连接池,即每次使用连接都需要重新创建
             type="JNDI":调用上下文中的数据源 -->
            <dataSource type="POOLED">
                <!-- 设置驱动类的全类名 -->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!-- 设置连接数据库的连接地址 -->
                <property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/>
                <!-- 设置连接数据库的用户名 -->
                <property name="username" value="root"/>
                <!-- 设置连接数据库的密码 -->
                <property name="password" value="123456"/>
            </dataSource>
        </environment>

    </environments>
</configuration>

至此数据库算是配置好了,但是仅仅配置好了数据库还不行,我们还需要创建数据库呀,还有数据表。
数据库:mybatis
数据表:t_user
数据表的结构如下:
在这里插入图片描述
因为一张数据表对应一个实体类,所以我们需要创建一个User类,并生成如下内容。
1.无参构造
2.有参构造
3.get和set方法
4.toString方法
在这里插入图片描述
然后还需要创建一个UserMapper接口。
在这里插入图片描述
MyBatis框架的每一个接口都和一个xml文件相对应,俗称“映射”,也就是写一个接口,就要写一个同名的xml文件,我们刚刚创建了UserMapper接口,所以我们现在创建一个UserMapper.xml文件,我们现在resource下创建一个mappers目录,然后在mappers目录下,创建一个UserMapper.xml文件
在这里插入图片描述
目前UserMapper.xml文件是空的,所以我们需要加入一些配置,将我如下的代码复制到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>

至此,文件是都创建完成了,但是mybatis怎么知道你把UserMapper.xml文件创建在哪里了呢,是的,mybatis并不知道你将UserMapper.xml文件创建在哪里了,所以我们需要告诉一下mybatis框架,当然是去mybatis-config.xml告诉它啦,我们在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">

<configuration>

    <environments default="development">

        <environment id="development">
           
            <transactionManager type="JDBC"/>
           
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="123"/>
            </dataSource>
        </environment>

    </environments>

	 我们主要是来看看下面这里!!!
    <!--我们引入映射文件-->
    <mappers>
    	<!--
    		resource: 这是UserMapper.xml文件的路径,
    		也就是告诉mybatis框架,你创建的的映射文件在哪里
    	-->
        <mapper resource="mappers/UserMapper.xml"/>
    </mappers>
</configuration>

有些小伙伴不禁要问了,配置了这么多东西,配置完了吗,我想玩玩mybatis框架了?
博主在这里告诉大家,还有亿点点配置哈哈哈,好吧好吧,还需要最后一个配置。

我们只是将UserMapper.xml文件的位置告诉了mybatis框架,可是大家别忘记了,UserMapper.xml和UserMapper接口,才是相亲相爱的一对,和情侣一样是不可分开的,UserMapper.xml需要找到UserMapper接口,那么怎么找呢?

大家仔细看一下UserMapper.xml文件,mapper标签的namespace属性,namespace属性就是UserMapper.xml文件寻找UserMapper接口的地方,可以大致理解为名字,UserMapper就是名字,但是要是全类名,所以是com.atguigu.mybatis.mapper.UserMapper
在这里插入图片描述
在这里插入图片描述
至此所有的配置都已经完成了,我们快乐的敲代码了。
1.先在UserMapper接口中,定义一个方法
在这里插入图片描述
2.在UserMapper.xml文件中创建一个映射此方法的语句,之前不是说了嘛,UserMapper接口和UserMapper.xml文件是相亲相爱的一对,所有的东西都是成双成对的,这个是插入操作,所以需要使用insert标签,代码如下图所示:
在这里插入图片描述
接下来我们就可以测试了,看看我们的配置有没有成功
我们需要创建一个测试类,然后在类里面创建一个测试方法。
测试类代码如下:

package com.atguigu.mybatis.test;

import com.atguigu.mybatis.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisTest {

    @Test
    public void testCRUD() throws IOException {
        //读取MyBatis的核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通过mybatis核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //创建SqlSession对象,括号里面的参数,是设置自动提交事务的,
        // 默认是false,false就是需要自己调用commit方法,插入操作才会生效
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //通过SqlSession对象获取接口对象,传入的参数,是接口的class对象,
        // 底层采用代理模式创建接口的代理实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //通过接口对象,调用接口中的方法
        int result = userMapper.insertUser();
        //返回的result,是影响行数
        System.out.println("结果: " + result);

    }
}

运行结果如下:
在这里插入图片描述
我们来看一下数据库,看看是否插入成功,很清楚,插入成功
在这里插入图片描述

接下来我们来执行一下修改操作,和删除操作。因为查询操作有返回值,放后一点将。

修改操作
其实修改操作的步骤和插入一样的,也是如下2步
1.UserMapper接口中定义一个修改方法
在这里插入图片描述

2.UserMapper.xml文件中,创建此方法的映射标签,什么操作就用什么标签
在这里插入图片描述

3.进行测试,测试类代码如下

package com.atguigu.mybatis.test;

import com.atguigu.mybatis.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisTest {

    @Test
    public void testCRUD() throws IOException {
        //读取MyBatis的核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通过mybatis核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //创建SqlSession对象,括号里面的参数,是设置自动提交事务的,
        // 默认是false,false就是需要自己调用commit方法,插入操作才会生效
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //通过SqlSession对象获取接口对象,传入的参数,是接口的class对象,
        // 底层采用代理模式创建接口的代理实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //通过接口对象,调用接口中的方法
//        int result = userMapper.insertUser();//插入操作
        int result = userMapper.updateUser();//修改操作
        //返回的result,是影响行数
        System.out.println("结果: " + result);
    }
}

运行结果如下图所示:
在这里插入图片描述
那我们来看看数据库的数据有没有发生改变吧,很明显,修改成功。
在这里插入图片描述
删除操作
删除操作,和插入操作,以及修改操作一样。
1.UserMapper接口添加删除方法
在这里插入图片描述
2.在UserMapper.xml文件中添加删除方法的映射
在这里插入图片描述
3.测试类代码如下

package com.atguigu.mybatis.test;

import com.atguigu.mybatis.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisTest {

    @Test
    public void testCRUD() throws IOException {
        //读取MyBatis的核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通过mybatis核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //创建SqlSession对象,括号里面的参数,是设置自动提交事务的,
        // 默认是false,false就是需要自己调用commit方法,插入操作才会生效
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //通过SqlSession对象获取接口对象,传入的参数,是接口的class对象,
        // 底层采用代理模式创建接口的代理实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //通过接口对象,调用接口中的方法
//        int result = userMapper.insertUser();//插入操作
//        int result = userMapper.updateUser();//修改操作
        int result = userMapper.deleteUser();//删除操作
        //返回的result,是影响行数
        System.out.println("结果: " + result);

    }
}

运行结果:
在这里插入图片描述
数据库效果:
在这里插入图片描述
接下来我们说一下查询操作,小伙伴们要认真听呀!!!

查询操作,和增加,删除,修改是差不多的,唯一要注意的就是返回值。
1.UserMapper接口编写查询方法
在这里插入图片描述
2.UserMapper.xml文件,创建此方法的映射标签
在这里插入图片描述
3.测试代码

package com.atguigu.mybatis.test;

import com.atguigu.mybatis.mapper.UserMapper;
import com.atguigu.mybatis.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class MyBatisTest {

    @Test
    public void testCRUD() throws IOException {
        //读取MyBatis的核心配置文件
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //创建SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //通过mybatis核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //创建SqlSession对象,括号里面的参数,是设置自动提交事务的,
        // 默认是false,false就是需要自己调用commit方法,插入操作才会生效
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //通过SqlSession对象获取接口对象,传入的参数,是接口的class对象,
        // 底层采用代理模式创建接口的代理实现类对象
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        //通过接口对象,调用接口中的方法
//        int result = userMapper.insertUser();//插入操作
//        int result = userMapper.updateUser();//修改操作
//        int result = userMapper.deleteUser();//删除操作
        List<User> userList = userMapper.selectAllUser();//查询操作
        //打印返回的结果
        for (User user:userList) {
            System.out.println(user);
        }
    }
}

控制台打印结果:
在这里插入图片描述

mybatis-config文件详解


这里告诉大家一个小技巧,我们可以使用log4j日志功能,只需要两步就可以啦。
1.在pom.xml文件中,引入log4j的依赖

<!-- log4j日志 -->
 <dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
  </dependency>

2.在resources目录下,创建log4j.xml文件,并将如下内容粘贴到,log4j.xml文件中

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <param name="Encoding" value="UTF-8"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n"/>
        </layout>
    </appender>
    <logger name="java.sql">
        <level value="debug"/>
    </logger>
    <logger name="org.apache.ibatis">
        <level value="info"/>
    </logger>
    <root>
        <level value="debug"/>
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>

然后,再次测试查询操作, 就会打印sql语句和参数了
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值