Mybatis 插入、修改、删除

这篇具有很好参考价值的文章主要介绍了Mybatis 插入、修改、删除。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前面几篇我们介绍了使用Mybatis查询数据,并且也了解了如何在Mybatis中使用JDK的日志系统打印日志;本篇我们继续介绍如何使用Mybatis完成数据的插入、修改和删除。

如果您对查询数据和Mybatis集成JDK日志系统不太了解,建议您先进行了解后再阅读本篇,可以参考:

Mybatis查询数据https://blog.csdn.net/m1729339749/article/details/132469672Mybatis 日志(JDK Log)https://blog.csdn.net/m1729339749/article/details/132565362

一、数据准备

这里我们直接使用脚本初始化数据库中的数据

-- 如果数据库不存在则创建数据库
CREATE DATABASE IF NOT EXISTS demo DEFAULT CHARSET utf8;
-- 切换数据库
USE demo;
-- 创建用户表
CREATE TABLE IF NOT EXISTS T_USER(
  ID INT PRIMARY KEY,
  USERNAME VARCHAR(32) NOT NULL,
  AGE INT NOT NULL 
);
-- 插入用户数据
INSERT INTO T_USER(ID, USERNAME, AGE)
VALUES(1, '张三', 20),(2, '李四', 22),(3, '王五', 24);

创建了一个名称为demo的数据库;并在库里创建了名称为T_USER的用户表并向表中插入了数据

二、环境搭建

1、创建实体类

在cn.horse.demo下创建UserInfo类

UserInfo类:

package cn.horse.demo;

public class UserInfo {

    private Integer id;
    private String name;
    private Integer age;

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

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append('{');
        stringBuilder.append("id: " + this.id);
        stringBuilder.append(", ");
        stringBuilder.append("name: " + this.name);
        stringBuilder.append(", ");
        stringBuilder.append("age: " + this.age);
        stringBuilder.append('}');
        return stringBuilder.toString();
    }
}

2、Mapper配置文件

在resources的目录下新建UserInfoMapper.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.horse.demo.UserInfoMapper">

    <select id="findById" resultType="cn.horse.demo.UserInfo">
        SELECT
            ID,
            USERNAME name,
            AGE
        FROM T_USER
        WHERE ID = #{id}
    </select>
</mapper>

3、引入配置文件

在resources下新建mybatis-config.xml配置文件,并引入UserInfoMapper.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>
    <settings>
        <setting name="logImpl" value="JDK_LOGGING"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="org.gjt.mm.mysql.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/demo?useUnicode=true&amp;useSSL=false&amp;characterEncoding=utf8"/>
                <property name="username" value="root"/>
                <property name="password" value="horse"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="demo/UserInfoMapper.xml" />
    </mappers>
</configuration>

4、会话工具类

在cn.horse.demo包下新建SqlSessionUtils工具类

package cn.horse.demo;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
import java.util.Objects;

public class SqlSessionUtils {

    private static final SqlSessionFactory sqlSessionFactory;
    static {
        // 读取mybatis配置文件
        InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("mybatis-config.xml");
        // 根据配置创建SqlSession工厂
        sqlSessionFactory = new SqlSessionFactoryBuilder()
                .build(inputStream);
    }

    /**
     * 开启会话
     * @return
     */
    public static SqlSession openSession() {
        return sqlSessionFactory.openSession();
    }

    /**
     * 关闭会话
     * @param sqlSession
     */
    public static void closeSession(SqlSession sqlSession) {
        if(Objects.nonNull(sqlSession)) {
            sqlSession.close();
        }
    }
}

5、JDK 日志系统配置

在resources的目录下新建logging.properties配置文件

handlers=java.util.logging.ConsoleHandler
.level=INFO

cn.horse.demo.UserInfoMapper.level=FINER
java.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tT.%1$tL %4$s %3$s - %5$s%6$s%n

在cn.horse.demo下创建JdkLogConfig类

JdkLogConfig类:

package cn.horse.demo;

import java.io.IOException;
import java.io.InputStream;
import java.util.logging.LogManager;

public class JdkLogConfig {

    public JdkLogConfig() {
        try {
            InputStream inputStream = ClassLoader.getSystemClassLoader().getResourceAsStream("logging.properties");
            LogManager.getLogManager().readConfiguration(inputStream);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}

6、启动程序

package cn.horse.demo;

import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class Main {
    public static void main(String[] args) {
        // 配置日志文件
        System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");

        findById(2);
    }

    private static void findById(Integer id) {
        SqlSession sqlSession = null;
        try {
            sqlSession = SqlSessionUtils.openSession();
            UserInfo userInfo = sqlSession.selectOne("cn.horse.demo.UserInfoMapper.findById", id);
            System.out.println(userInfo);
        } finally {
            SqlSessionUtils.closeSession(sqlSession);
        }
    }
}

测试:

查询id为2的用户信息

执行后的结果如下:

Mybatis 插入、修改、删除,Mybatis,mybatis,java

三、插入数据

在UserInfoMapper.xml配置文件中新增insert标签,并写入insert语句:

<insert id="insert">
    INSERT INTO T_USER(ID,
        USERNAME,
        AGE)
    VALUES(#{id}, #{name}, #{age})
</insert>

insert标签:id代表的是标签的编号,标签的内容是insert语句,insert语句中可以使用参数,用法与查询时一致。

测试:

在启动程序中新建insert方法:

private static void insert(UserInfo userInfo) {
    SqlSession sqlSession = null;
    try {
        sqlSession = SqlSessionUtils.openSession();
        sqlSession.insert("cn.horse.demo.UserInfoMapper.insert", userInfo);
        sqlSession.commit();
    } finally {
        SqlSessionUtils.closeSession(sqlSession);
    }
}

这里插入数据,我们调用了SqlSession对象的insert方法,另外还需要调用SqlSession对象的commit方法用于提交事务。

在main方法中调用insert方法插入一条数据,并查询

// 引入JDK日志配置
System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");

UserInfo userInfo = new UserInfo();
userInfo.setId(5);
userInfo.setName("王五");
userInfo.setAge(5);
// 插入
insert(userInfo);
findById(5);

执行后的结果如下:

Mybatis 插入、修改、删除,Mybatis,mybatis,java

从执行的日志中可以看到insert语句,以及传入的参数,执行的结果(受影响的行数)

插入结束后,我们使用id进行查询,发现查询出来了新添加的数据

四、修改数据

在UserInfoMapper.xml配置文件中新增update标签,并写入update语句:

<update id="update">
    UPDATE T_USER
    SET USERNAME = #{name},
        AGE = #{age}
    WHERE ID = #{id}
</update>

update标签:id代表的是标签的编号,标签的内容是update语句,update语句中可以使用参数,用法与查询时一致。

测试:

在启动程序中新建update方法:

private static void update(UserInfo userInfo) {
    SqlSession sqlSession = null;
    try {
        sqlSession = SqlSessionUtils.openSession();
        sqlSession.update("cn.horse.demo.UserInfoMapper.update", userInfo);
        sqlSession.commit();
    } finally {
        SqlSessionUtils.closeSession(sqlSession);
    }
}

这里更新数据,我们调用了SqlSession对象的update方法,另外还需要调用SqlSession对象的commit方法用于提交事务。

在main方法中调用update方法更新数据,并查询

// 引入JDK日志配置
System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");

UserInfo userInfo = new UserInfo();
userInfo.setId(5);
userInfo.setName("王五2");
userInfo.setAge(50);
// 更新
update(userInfo);
findById(5);

执行后的结果如下:

Mybatis 插入、修改、删除,Mybatis,mybatis,java

从执行的日志中可以看到update语句,以及传入的参数,执行的结果(受影响的行数)

更新结束后,我们使用id进行查询,发现查询出来了修改后的数据

五、删除数据

在UserInfoMapper.xml配置文件中新增delete标签,并写入delete语句:

<delete id="delete">
    DELETE FROM T_USER
    WHERE ID = #{id}
</delete>

delete标签:id代表的是标签的编号,标签的内容是delete语句,delete语句中可以使用参数,用法与查询时一致。

测试:

在启动程序中新建delete方法:

private static void delete(Integer id) {
    SqlSession sqlSession = null;
    try {
        sqlSession = SqlSessionUtils.openSession();
        sqlSession.delete("cn.horse.demo.UserInfoMapper.delete", id);
        sqlSession.commit();
    } finally {
        SqlSessionUtils.closeSession(sqlSession);
    }
}

这里删除数据,我们调用了SqlSession对象的delete方法,另外还需要调用SqlSession对象的commit方法用于提交事务。

在main方法中调用delete方法删除数据,并查询

// 引入JDK日志配置
System.setProperty("java.util.logging.config.class", "cn.horse.demo.JdkLogConfig");

// 删除
delete(5);
findById(5);

执行后的结果如下:

Mybatis 插入、修改、删除,Mybatis,mybatis,java

从执行的日志中可以看到delete语句,以及传入的参数,执行的结果(受影响的行数)

删除结束后,我们使用id进行查询,发现已经查询不到数据了文章来源地址https://www.toymoban.com/news/detail-692558.html

到了这里,关于Mybatis 插入、修改、删除的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis-plus 根据指定字段 批量 删除/修改

    mybatis-plus 提供了根据id批量更新和修改的方法,这个大家都不陌生 但是当表没有id的时候怎么办) 这个就不说了,就是因为不想手写SQL 所以才有这篇博客 mybatis plus 的 executeBatch 参考 mybatis plus 的updateBatchById 方法. 调用处: 接口 重写方法 实现 这种写法其实批量的效率还是比较慢的

    2024年02月13日
    浏览(41)
  • mybatis批量插入数据list超过一定长度时报错的解决办法(批量插入数据,数据过多时报错解决和批量修改报错

    在使用MyBatis进行批量新增时,如果数据量较大,可以考虑分批次插入以减少数据库的负载压力。这里提供一种基于MyBatis的分批次插入的方法: 创建一个新的Mapper XML文件(例如:BatchInsertMapper.xml)来定义批量插入的SQL语句。在该XML文件中,添加如下内容:   请将上述代码中

    2024年02月16日
    浏览(51)
  • 【JaveWeb教程】(26) Mybatis基础操作(新增、修改、查询、删除) 详细代码示例讲解(最全面)

    学习完mybatis入门后,我们继续学习mybatis基础操作。 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除

    2024年01月17日
    浏览(53)
  • Java8 实现批量插入和更新,SpringBoot实现批量插入和更新,Mybatis实现批量插入和更新

    基于mybatis实现的批量插入和更新 由于直接执行批量所有数据可能会出现长度超出报错问题,使用如下方式即可解决 原理还是分配执行,这里的100就是设定每次执行最大数 这里使用插入作为例子,也可以使用批量更新 更新的写法

    2024年02月12日
    浏览(54)
  • Mybatis批量插入

    使用Mybatis框架批量插入的3种方法:多次调用insert方法、foreach标签、batch模式 后端java代码:

    2024年02月12日
    浏览(59)
  • MyBatis的五种批量插入

    一.直接循环插入 最终耗时:14s多 二.关闭MySql自动提交,手动进行循环插入提交 平均:0.12s 第三种:用List集合的方式插入数据库(推荐) 第四种: MyBatis-Plus提供的SaveBatch方法 直接报错: 看报错信息: 长串:Servlet.service() for servlet [dispatcherServlet] in context with path [] threw excep

    2024年03月15日
    浏览(47)
  • Mybatis批量插入方式有哪些

    MyBatis批量插入有多种写法,最后博主总结一些常见的批量插入写法供大家参考 使用XML配置文件进行批量插入:在XML映射文件中使用 insert 标签,并通过 foreach 标签迭代批量数据,然后在SQL语句中使用 VALUES 。 使用Java注解进行批量插入:在实体类上使用 @Insert 注解,并

    2024年02月11日
    浏览(44)
  • Mybatis批量插入/更新性能优化思路

            最近在做数据写入服务的性能优化,主要是基于Mybatis-Plus实现一套批量写数据的服务,不过该服务是支持整个平台所有需要持久化的业务实体。所以这种服务不仅仅有insert操作还有update的操作。根据以往的MySQL数据库写入经验,主要总结了两套批量插入、批量插入

    2024年04月25日
    浏览(42)
  • MyBatis 批量插入数据的 3 种方法!

    数据库的最终效果如下: 接下来我们将使用 Spring Boot 项目,批量插入 10W 条数据来分别测试各个方法的执行时间。​ 循环单次插入的(测试)核心代码如下: 运行以上程序,花费了 88574 毫秒,如下图所示: MP 批量插入功能核心实现类有三个:UserController(控制器)、UserS

    2024年02月07日
    浏览(43)
  • mybatis-plus 批量插入示例

    正常我们使用mybatis-plus插入的时候,首先想到的是  saveBatch 方法,不过看了下打印出来的sql和底层代码,才发现它并不是真正的批量插入。     实现层   ServiceImpl 中的代码为 通过监控控制台发现,它只是循环每1000条去插入,效率非常低。   参考网友的文章,找到一个支

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包