Mybatis框架(一)初识Mybatis之Mybatis简单使用

news2024/12/24 11:35:29

本文是本人专栏【Java开发后端系列框架】里的文章,文章根据各框架官网与网上资料加上本人工作经验,进行修改总结发布在这个专栏,主要目的是用于自我提升,不用于获取利益。如果系列文章能到帮到您本人将感到荣幸,如果有侵权请联系我删除修,祝各位都能在编程这条路越走越远,早日暴富。

文章目录

      • 一、Mybatis简单概述
      • 二、编写Mybatis程序
      • 三、简单的CRUD操作

一、Mybatis简单概述

MyBatis 是一款优秀的持久层框架, 避免了大量冗余代码,同时基于对象关系映射模型,提供一套和数据库做交互的 API 。
Mybatis 本身简单易学,将sql语句与代码分离,降低耦合度,同时提供xml标签支持编写动态sql。这些特性使系统的设计更清晰,更易维护,更易单元测试。(一些更加详细的介绍与有点不在此赘述,大家百度就可以查到很多了)

二、编写Mybatis程序

项目用到依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>

        <!-- Mysql JDBC Driver -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>runtime</scope>
        </dependency>
        
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

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

        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
    </dependencies>
    
</project>

创建数据库,随便插入一些数据

-- Create table
create table USER
(
  id       VARCHAR(10) not null,
  username VARCHAR(50),
  password VARCHAR(50)
);
-- Create/Recreate primary, unique and foreign key constraints 
alter table USER add constraint USER_ID primary key (ID);

编写实体类

package top.jf.pojo;

import lombok.Data;

/**
 * @author : JF
 * @date: 2022/12/28 14:14
 */
@Data
public class User {
    private String id;
    private String username;
    private String password;
}

编写映射文件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="userMapper">

    <select id="findAllUser" resultType="top.jf.pojo.User">
        select * from USER
    </select>
</mapper>

编写Mybatis配置文件 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/jf?useUnicode=true&amp;characterEncoding=utf8" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserMapper.xml" />
    </mappers>
</configuration>

编写Mybatis工具类

package top.jf.utils;

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 java.io.IOException;
import java.io.InputStream;

/**
 * @author : JF
 * @date: 2022/12/28 16:44
 */
public class MybatisUtils {

    public static SqlSession getSession() throws IOException {
        //加载核心配置文件
        InputStream resourceAsStream = Resources.getResourceAsStream("Mybatis-Config.xml");

        // 获得sqlSession工厂对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //获得sqlSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();
        return sqlSessionFactory.openSession();
    }
}

编写测试类

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import top.jf.pojo.User;
import top.jf.utils.MybatisUtils;

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

/**
 * @author : JF
 * @date: 2022/12/28 16:48
 */
public class MybatisTest {

    @Test
    public void testSelect() throws IOException {
        SqlSession sqlSession = MybatisUtils.getSession();
        List<User> users = sqlSession.selectList("userMapper.findAllUser");
        users.stream().forEach(user -> System.out.println(user));
        // 释放资源
        sqlSession.close();
    }
}

运行测试类,结果符合预期
在这里插入图片描述
本人项目结构
在这里插入图片描述

三、简单的CRUD操作

查询在上面编写Mybatis程序中已做过示例,这里不再赘述。
insert
UserMapper.xml中添加插入语句

<!-- 插入用户 -->
    <insert id="insertUser" parameterType="top.jf.pojo.User" >
        insert into user(id,username,password) values ( #{id},#{username}, #{password})
    </insert>

编写测试方法

 @Test
    public void testInsert() throws IOException {
        SqlSession sqlSession = MybatisUtils.getSession();
        User user = new User();
        user.setId("4");
        user.setUsername("老六");
        user.setPassword("123");
        // 执行sql语句
        int rows = sqlSession.insert("userMapper.insertUser",user);
        // 打印结果
        System.out.println(rows);
        // 提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close();
    }

运行测试类,输出符合预期,数据库可以查到刚插入的数据
在这里插入图片描述
需要注意的是,在执行增删改操作时,需要提交事务,否则操作将不会写进数据库表里,还有可能造成事务锁等问题。

update
编写UserMapper.xml

<!-- 修改用户 -->
    <update id="updateUser" parameterType="top.jf.pojo.User" >
        update  user set password =#{password} where id = #{id}
    </update>

编写测试类

 @Test
    public void testUpdate() throws IOException {
        SqlSession sqlSession = MybatisUtils.getSession();
        User user = new User();
        user.setId("4");
        user.setPassword("123456");
        // 执行sql语句
        int rows = sqlSession.update("userMapper.updateUser",user);
        // 打印结果
        System.out.println(rows);
        // 提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close();
    }

输出结果符合预期
在这里插入图片描述
delete
编写UserMapper.xml

<!-- 删除用户 -->
    <delete id="deleteUser" parameterType="top.jf.pojo.User" >
        delete from  user where id=#{id}
    </delete>

编写测试类

 @Test
    public void testDelete() throws IOException {
        SqlSession sqlSession = MybatisUtils.getSession();
        User user = new User();
        user.setId("4");
        // 执行sql语句
        int rows = sqlSession.delete("userMapper.deleteUser",user);
        // 打印结果
        System.out.println(rows);
        // 提交事务
        sqlSession.commit();
        // 释放资源
        sqlSession.close();
    }

输出结果符合预期
在这里插入图片描述

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

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

相关文章

修改配置文件解决matplotlib中文与正负号乱码问题

步骤如下&#xff1a; 1、 找到配置文件matplotlibrc 不管是啥系统&#xff0c;都可以通过以下方式查找matplotlibrc所在的文件夹&#xff08;可以在终端或者编译器中运行以下代码&#xff09; import matplotlib# 查找字体路径 print(matplotlib.matplotlib_fname())结果&am…

策略模式Strategy

1.意图&#xff1a;定义一系列的算法&#xff0c;把它们一个个封装起来&#xff0c;并且使它们可以相互替换。此模式使得算法可以独立于使用它们的客户而变化。 2.结构 Strategy&#xff08;策略&#xff09;定义所有支持的算法的公共接口。Context使用这个接口来调用某Concre…

小梅哥FPGA时序分析和约束实例演练课程

P1 FPGA基本原理 基本结构 三要素可类比电路板的器件、连线、对外端子 可编程逻辑功能块 触发器用于实现时序逻辑&#xff0c;进位链用于可编程逻辑块间通讯&#xff0c;使用较少。 具体器件的可编程逻辑功能块结构。第5代将四输入查找表升级到六输入查找表 由上面两个图抽象…

Flink系列-3、Flink入门案例

版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。 大数据系列文章目录 官方网址&#xff1a;https://flink.apache.org/ 学习资料&#xff1a;https://flink-learning.org.cn/ 目录Flink程序模型…

Linux内核中sk_buff结构详解

目录 1.sk_buff结构体 1.1 sk_buff在内核中的结构 1.2 重要的长度len的解析 2. sk_buff数据区 2.1 线性数据区 2.2 非线性数据区 ---------------------------------------------------------------------------------------------------------------------------- 1.s…

内置常量--R

1. R中内置的常量 R中内置的常量有&#xff1a;1. LETTERS&#xff1a; 26个大写英文字母2. letters: 26个小写英文字母3. month.abb: 月份英文前三个字母组成的缩写4. month.name: 月份的英文名字5. pi : 圆周率π

TensorRT介绍及使用

1、简介 TensorRT是一个针对已训练好模型的SDK&#xff0c;通过该SDK能够在NVIDIA的设备上进行高性能的推理。优点如下&#xff1a; 总结下来主要有以下6点&#xff1a; Reduced Precision&#xff1a;将模型量化成INT8或者FP16的数据类型&#xff08;在保证精度不变或略微降…

Linux学习笔记——Linux实用操作(三)

4.10、环境变量 学习目标&#xff1a; 理解环境变量的作用掌握符号$的作用掌握在Linux中配置环境变量 4.10.1、环境变量 1、在讲解which命令的时候&#xff0c;我们知道使用的一系列命令其实本质上就是一个个的可执行程序。 比如&#xff0c;cd命令的本体就是&#xff1a;…

股价狂跌超70%,特斯拉到底怎么了?

​在2022年的尾声&#xff0c;曾在新能源汽车领域盛极一时的特斯拉即将取得上市以来最糟糕的年度表现&#xff0c;直接跌出全球上公司市值前10名。目前特斯拉已连续第7个交易日下跌&#xff0c;截至2022年12月28日&#xff0c;跌超11%&#xff0c;创八个月最大跌幅&#xff0c;…

Leetcode 855. 考场就座

在考场里&#xff0c;一排有 N 个座位&#xff0c;分别编号为 0, 1, 2, ..., N-1 。当学生进入考场后&#xff0c;他必须坐在能够使他与离他最近的人之间的距离达到最大化的座位上。如果有多个这样的座位&#xff0c;他会坐在编号最小的座位上。(另外&#xff0c;如果考场里没有…

「回顾2022,展望2023」- 技术和兴趣,工作和生活,我们都在旅途中

技术 Java&#xff0c;云原生&#xff0c;前端 技术面好像变窄了 远离CI/CD&#xff0c;重新回到起点 2019年毕业&#xff0c;2018年9月份在距离学校(南昌)不远不近的公司实习开始实习&#xff0c;毕业后去过深圳、上海&#xff0c;最后是杭州&#xff0c;到现在&#xff0c;又…

OV7670图像传感器介绍

OV7670图像传感器简介 OV7670是图像传感器&#xff0c;其体积小、工作电压低&#xff0c;能提供单片VGA摄像头和影像处理器的所有功能。通过SCCB 总线控制&#xff0c;可以输出整帧、子采样、取窗口等方式的各种分辨率8位影响数据。该产品VGA图像最高达到30帧/秒。用户可以完全…

西门子PLC串口协议与以太网通信协议对比

西门子plc品牌众多&#xff0c;通信协议的类型就更多了&#xff0c;具体可分为串口协议和以太网通信协议两大类。 串口协议主要有&#xff1a;MODBUS RTU 通信协议&#xff1b;PROFIBUS 通信协议&#xff1b;USS通信协议&#xff1b;PPI通信协议&#xff1b;MPI通信协议&#…

YGG:2022年年终回顾

2022 年&#xff0c;Yield Guild Games&#xff08;YGG&#xff09;扩大并发展了区块链游戏生态系统和开放的元宇宙。在这篇文章中&#xff0c;我们庆祝我们的公会成员、合作伙伴和社区所取得的里程碑式的成就&#xff0c;并期待接下来的发展。 游戏和基础设施合作伙伴的数量不…

推荐 6 个 GitHub 开源项目

本期推荐开源项目目录&#xff1a;1. B 站自动任务工具2. 学习 Solidity3. 高性能异步抖音爬取工具4. Java学习指南5. 中后台管理系统模版6. ChatGPT 中文调教指南01B 站自动任务工具BiliBiliTool 是一个自动化工具&#xff0c;它可以帮助你每天获取经验、每日签到、批量取关等…

分享几个嵌入式 C 中的实用技巧

1、动态绑定、回调函数 回调函数可以达到动态绑定的作用&#xff0c;在一定程度上可以降低层与层之间的耦合。关于回调函数&#xff0c;之前已经有写过一篇&#xff1a;C语言、嵌入式重点知识&#xff1a;回调函数。可能很多初学的小伙伴可能还不理解回调函数&#xff0c;可以…

【计算机图形学入门】笔记9:Shading3着色(插值、高级纹理映射)

09Shading3着色&#xff08;插值、高级纹理映射&#xff09;1.Barycentric Coordinates 重心坐标1.A点自己的重心坐标2.如何求出任意点的重心坐标&#xff1f;2.如何把纹理应用在实际的渲染中&#xff1f;Applying Textures3.Texture Magnification纹理放大。&#xff08;解决纹…

Transform+ASM插桩系列(1)——熟悉Java字节码

前言 为什么要学习Java字节码呢&#xff0c;因为我们学的是插桩字节码技术&#xff0c;这块技术的根底就是字节码&#xff0c;要学会字节码的阅读和字节码的编写&#xff0c;虽然现在很多工具可以帮我们阅读和编写&#xff0c;但最根本的知识还是要理解的。万层楼高从地起&…

CTF之MISC题目-西游记

CTF系列文章 第一篇 CTF之密码学题目-classical && coding 第二篇 CTF之MISC题目-西游记 文章目录CTF系列文章前言一、题目是什么&#xff1f;二、解题步骤1.下载文件&#xff0c;解压2.暴力破解3.解压文件4.处理文本文件5.手动删除多余字符总结前言 CTF中关于MISC&a…

TensorFlow之回归模型-3

1 基本概念 回归模型 线性 线性模型 非线性模型 线性回归 逻辑回归 Log Loss&#xff08;损失函数&#xff09; 分类临界值 2 效率预测 如上所示&#xff0c;使用测试数据集进行评估、用图形显示逻辑回归的预测结果&#xff0c;其中&#xff0c;test_features是测试特…