【MyBatis】安装 + 框架搭建 + 使用 + 优化(全程一条龙服务讲解~)

news2024/11/18 3:23:49

目录

前言

一、准备工作

1.1、下载MyBatis

1.2、数据库设计

二、搭建框架

2.1、创建Maven项目

2.2、jar包、引入依赖

2.3、创建MyBatis核心配置文件

2.4、映射文件

2.5、通过junit测试功能

2.6、框架优化

三、小结——注意事项


前言

        本篇全程从0到1搭建MyBatis框架,连接MySQL,以向数据库中插入一条信息为例进行使用,再到最后的优化,绝对的一条龙服务~


一、准备工作

1.1、下载MyBatis

MyBatis下载地址:GitHub - mybatis/mybatis-3: MyBatis SQL mapper framework for Java

 注意:这里的mybatis版本之间差异不是很大,可以自己选择版本,本篇以3.5.7为例;安装位置就放在一个你能找到的地方就ok;

1.2、数据库设计

这里以向用户表插入信息为例,搭建MyBatis框架;

(1)、用MySQL创建一个库名为:ssm;

(2)、在ssm数据库下创建一个表,名为user的用户表,sql语句如下:

create table user(id int, username varchar(20), password varchar(20));

二、搭建框架

2.1、创建Maven项目

创建Maven项目基本上就是把项目名自定义一下,然后一路next就完事了;

2.2、jar包、引入依赖

都是在pom.xml的project中加入:

jar包:

    <packaging>jar</packaging>

 引入依赖:

    <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驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
    </dependencies>

2.3、创建MyBatis核心配置文件

        习惯上命名为mybatis-config.xml,这个文件名仅仅只是建议,并非强制要求。将来整合Spring之后,这个配置文件可以省略;

用处:用来连接数据库以及全局配置信息;

核心配置文件存放的位置是src/main/resources目录下,如下:

注意:所有的配置文件都放在resources文件下

文件配置内容如下:

<?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.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="1111"/>
            </dataSource>
        </environment>
    </environments>
    
    <!--这里需要引入映射文件-->
    <mappers>
        <mapper resource="mappers/UserMapper.xml"/> 
    </mappers>
</configuration>

这里直接复制粘贴即可,别忘记输入你的数据库名称和密码以及url,如下图:

2.4、映射文件

这里需要映射什么呢,就是我们所要插入信息的用户表,所以还需要在java中创建一个用户表,如下:

public class User {
    private int id;
    private String username;
    private String password;

    public User(int id, String username, String password) {
        this.id = id;
        this.username = username;
        this.password = password;
    }

    public User() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

那怎么样才能通过mybatis实现与数据库的交互呢?我们可以提供一个公开的接口供MyBatis使用,如下:

解释:

        MyBatis中的mapper接口相当于以前的dao。但是区别在于,mapper仅仅是接口,我们不需要 提供实现类;

        为什么可以这么做呢,还记得JDBC实现与数据库的连接吗,咱们用MyBatis就可以不用像JDBC那一套那么繁琐,按照规定,我们只需要提供一个接口即可;

如何将这个接口和刚刚创建的映射文件关联起来呢?接着往下看!

映射文件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="com.bite.mybatis.mapper.UserMapper"> <!--这里建立映射关系-->
<!--
    mapper接口和映射文件要保证两个一致
    1.mapper接口的全类名和映射文件的namespace一致
    2.mapper接口中的方法的方法名要和映射文件的sql的id一致
-->
    <!--int insertUser();-->
    <insert id="insertUser">
        insert into user values(null, "admin", "123");
    </insert>
</mapper

解释:

        这里的<mapper namespace="com.bite.mybatis.mapper.UserMapper"> 就是在建立映射关系(注意看代码中的注释,那是我们需要格外注意的地方,否则就会报错!),然后将你想要写的sql语句写在这个标签下即可,仔细观察你会发现,不是直接将sql语句写入其中,而是通过一个inser的标签,实际上这个标签就表明了你要对这个表进行一个什么操作,MyBatis不仅提供了这个insert,还有很多其他方法,如下图:

咱们只需要将我们所要实现的逻辑(sql语句), 写入对应功能的标签下即可,例如select标签就是查询功能,那咱们只需要在这个标签下写查询的sql语句即可;

这里我的是插入功能,那么这里所需要的sql代码就是插入逻辑,向user表中插入数据;

insert标签后面的id熟悉是什么?

        这便是我们需要像MyBatis提供的接口;

2.5、通过junit测试功能

在java文件下创建如下目录结构,用于测试;

测试代码如下:(解释都在注释中)


import com.bite.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 testInsert() throws IOException {
        //获取核心配置文件的输入流
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sql的会话对象SqlSession,是MyBatis提供操作数据库的对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取UserMapper类的代理实现类对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //调用mapper接口中的方法,实现添加用户信息的功能
        int result = mapper.insertUser();
        System.out.println("结果:" + result);
        //提交事务(若没有commit,只会插入表中,但是不显示插入结果)
        sqlSession.commit();
        //关闭会话
        sqlSession.close();
    }
}

执行结果:

 

2.6、框架优化

优化一:自动提交事务(commit)

        上面我们提到,若不写commit方法,是不会自动提交sql语句的,并且每次此提交都要写是很麻烦的,实际上我们在创建SqlSession会话的时候是可以指定是否自动提交的,只需要在openSession构造参数中填写true,即可实现自动提交事务~

如下代码:


import com.bite.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 testInsert() throws IOException {
        //获取核心配置文件的输入流
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        //获取SqlSessionFactoryBuilder对象
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        //获取sqlSessionFactory对象
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
        //获取sql的会话对象SqlSession(不会自动提交事务,如下),是MyBatis提供操作数据库的对象
        //SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取sql的会话对象SqlSession(会自动提交事务,如下),是MyBatis提供操作数据库的对象
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        //获取UserMapper类的代理实现类对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        //调用mapper接口中的方法,实现添加用户信息的功能
        int result = mapper.insertUser();
        System.out.println("结果:" + result);
        //提交事务(若没有commit,只会插入表中,但是不显示插入结果)
        //sqlSession.commit();
        //关闭会话
        sqlSession.close();
    }
}

优化二:日志功能

        日志功能就是可以在我们执行代码后,会给打印一些日志信息,如:执行的sql代码,修改了几行...等等;

(1)首先先向pom.xml中加入log4j依赖

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

(2)向resources中添加如下配置文件

<?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>

注意:如下图,这里标红,是没事的,直接点击运行没有关系:

执行效果: 


三、小结——注意事项

注意:mapper接口和映射文件要保证两个一致

1.mapper接口的全类名和映射文件的namespace一致;

2.mapper接口中的方法的方法名要和映射文件的sql的id一致;

以上两点一定要注意,否则就会失败;


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/129937.html

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

相关文章

Python编程 简单春节倒计时教程(附源代码)

作者简介&#xff1a;一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.应用的技术 1.Tkinter 2.PHotoimage 函数 3.label组件 二.效果图 三…

pytorch 咖啡豆识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章地址&#xff1a; 365天深度学习训练营-第P6周&#xff1a;好莱坞明星识别&#x1f356; 作者&#xff1a;K同学啊一、前期准备 1.设置GPU import torch from torch import nn …

2022 年 pnpm 为什么这么火?

pnpm是 Node.js 的替代包管理器。它是 npm 的直接替代品&#xff0c;但速度更快、效率更高。 为什么更有效率&#xff1f;当你安装一个包时&#xff0c;我们将它保存在你电脑上的全局存储中&#xff0c;然后我们从它创建一个硬链接而不是复制。也就是说&#xff1a;对于模块的…

8.移动端学习-rem适配方案

1.适配方案 1、当设备尺寸发生变化时&#xff0c;页面宽高等比例变化 2、使用媒体查询根据不同设备按比例设置html字体大小&#xff0c;页面元素使用rem做单位&#xff0c;当html字体大小变化&#xff0c;元素尺寸也会发生变化&#xff0c;从而达到等比缩放的适配 2.rem实际开…

ubuntu18.04运行ORB_SLAM2

1、基础工具安装 安装cmake、git、gcc、g。 sudo apt-get install cmake git gcc g 2、安装Eigen库 在终端输入以下代码。 sudo apt-get install libeigen3-dev 3、安装Pangolin0.5 版本过高会导致错误&#xff0c;安装依赖项。 sudo apt-get install libglew-dev libpyth…

Hadoop之Hdfs

一、基本概述 1、定义 HDFS&#xff08;Hadoop Distributed File System&#xff09;&#xff0c;它是一个文件系统&#xff0c;用于存储文件&#xff0c;通过目 录树来定位文件&#xff1b;其次&#xff0c;它是分布式的。HDFS 的使用场景&#xff1a;适合一次写入&#xff0…

这是长新冠,还是我老了?浙江出国抢订单又抢CTO;脉脉发布人才迁徙报告;元宇宙产业生态图谱;GitHub今日热榜 | ShowMeAI资讯日报

&#x1f440;日报合辑 | &#x1f3a1;AI应用与工具大全 | &#x1f514;公众号资料下载 | &#x1f369;韩信子 &#x1f3a1; 这是长新冠&#xff0c;还是我老了&#xff1f; 感染后身体出现了疲劳、关节疼痛、咳嗽等新症状&#xff1f;你并不孤单&#xff01;约翰霍普金斯…

数据结构进阶 二叉树OJ题一

作者&#xff1a;小萌新 专栏&#xff1a;数据结构进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍几道二叉树的oj题 二叉树OJ题题目一 根据二叉树创建字符串题目二 二叉树的层序遍历题目三 二叉树的最近公共祖先题目一 根据…

自动化信息治理:推动价值、安全性和合规性

现代组织充斥着数据&#xff0c;但信息的洪流可能变得势不可挡&#xff0c;危及利用其价值的能力。内容服务解决方案能够减轻洪水泛滥的风险&#xff0c;并帮助组织更好地控制信息。 从信息中获取价值的不同之处在于治理。建立正确的治理框架&#xff0c;组织可以最大限度地利…

难以挖掘的真相——塑料版薯条、意大利面、披萨……

下方图片中的“美食”&#xff0c;看起来是不是十分美味&#xff1f; ▲莱佛士平面设计学生作品 可千万要擦亮眼睛&#xff0c;它们其实是&#xff1a;黄色瓶盖“蛋黄”的荷包蛋&#xff0c;黄色吸管的“薯条”&#xff0c;桔黄色的塑料带子“意大利面”&#xff0c;红色塑料袋…

Exynos4412的Linux5.4.174时钟驱动开发(四)——clk API的调用方法

系列文章目录 Exynos4412的Linux时钟驱动开发&#xff08;一&#xff09;——Exynos4412的时钟管理单元CMU Exynos4412的Linux时钟驱动开发&#xff08;二&#xff09;——clock的初始化&#xff08;CLK_OF_DECLARE的机制&#xff09; Exynos4412的Linux时钟驱动开发&#x…

新蜂商城 -- 代码学习研读

新蜂商城 -- 代码学习研读1.Big Data -- Postgres1.1 Big Data -- Postgres2.Big Data -- Postgres3.AwakeningGit Website: https://github.com/newbee-ltd/newbee-mall. 新蜂商城线上预览地址: http://mall.newbee.ltd. &#x1f449;&#x1f449;学习的朋友给个小星星.感…

蓝牙标签操作流程

电脑网页端后台系统 下载蓝牙标签APP注册账号&#xff0c;登录电脑网页端即可制作模板 蓝牙标签管理系统 安卓手机系统 1. 使用手机浏览器扫码下载 2. 拷贝链接到手机浏览器下载 http://a.picksmart.cn:8088/picksmart/app/new-app-release-v3.0.31.apk 苹果手机系统&#…

公众号运营要做什么?公众号运营规划方案分享

你真的理解什么是公众号运营吗&#xff1f; 公众号运营遵循的是创作-分发-增长-变现的路径&#xff0c;从内容创作到内容分发到用户增长&#xff0c;到最终的转化变现&#xff0c;这才是完整的一个运营闭环&#xff0c;在这条路径中&#xff0c;缺少了哪一环都将影响整体运营效…

学习笔记之范海鹰微表情识别

微表情识别1. 微表情由来1.1 基本情绪和次级情绪1.2 保罗埃克罗的贡献2. 微表情意义2.1 微表情产生原理2.2 微表情的形态意义2.3 微表情的读心内涵2.4 微表情的应用价值3.微表情面部表情3.1 基线反应3.2 惊讶3.3 厌恶、轻蔑3.4 愤怒3.5 恐惧3.6 悲伤3.7 愉悦作为网上冲浪12级选…

redis实现session管理以及缓存穿透与雪崩

小伙正在评博客之星&#xff0c;欢迎大家来互相助力 我的链接 redis实现session管理以及缓存穿透与雪崩一、Redis实现分布式Session管理1 管理机制2 开发Session管理1. 引入依赖2. 开发Session管理配置类3.打包测试即可二、缓存穿透与雪崩缓存穿透缓存击穿&#xff08;量太大&a…

APSIM练习 2:残留物覆盖对休耕期间土壤储水的影响

跟踪覆盖度随着残留物分解而下降。 APSIM 模拟了作物残茬对休耕期间水分捕获和保留效率的影响。随着残留物分解&#xff0c;残留物覆盖率下降。在 APSIM 中模拟残留物分解以响应天气以及残留物的化学成分。通过进行此模拟&#xff0c;您将加强在先前练习中学到的技能&#xff0…

如何给藏品赋能?元宇宙电商NFG系统助力跨境电商新机遇

当前营销市场已陷入沉闷、难以创新的困境&#xff0c;大环境不容乐观&#xff0c;品牌方迫切需要新的创意与内容来吸引消费者。数字藏品是 Z世代和千禧一代在自我表达和社交方面的新兴媒介&#xff0c;在展示形式和互动方式上突破了传统营销方式的局限&#xff0c;帮助品牌在营…

github上传代码记录

文章目录新建仓库执行命令新建仓库 首先先创建一个仓库&#xff08;在主页面中点击New即可创建&#xff09; 填写仓库名称&#xff08;剩下的可以不用点击选择&#xff09; 创建完成之后&#xff0c;github上就会出现提交的提示代码。我们选择第一个进行代码的提交。 执行命…

数据结构中【迷宫问题】的两个OJ题

前言 今天是美好的一天&#xff0c;现在是体育课时间&#xff0c;我神奇的体育老师让我们男生需要做40个俯卧撑作为期末作业&#xff0c;可惜啊可惜&#xff0c;我差了一丝丝&#xff0c;这个东西对于我这种高瘦子还是有很大的挑战的&#xff0c;我现在能充分的感觉到码字的手…