您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

MyBatis源码解读 | 使用MyBatis操作数据库

时间:2022-07-15 14:40:32  来源:  作者:嗨皮汪小成

本篇文章主要介绍了使用MyBatis框架完成数据库的增、删、改、查操作。

准备工作

运行schema.sql和data.sql脚本文件中的 SQL 语句创建t_user表并添加部分测试数据。

schema.sql:

DROP TABLE IF EXISTS `t_user`;
create table t_user
(
    id          int auto_increment primary key COMMENT '主键',
    username    varchar(64) null COMMENT '用户名',
    nick_name   varchar(64) null COMMENT '昵称',
    password    varchar(64) null COMMENT '密码',
    phone       varchar(32) null COMMENT '手机号',
    create_time varchar(64) null COMMENT '创建时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';

data.sql:

insert into t_user(`username`, `nick_name`, `password`, `phone`, `create_time`)
values ('user01', 'user01', '123456', '15900001111', '2022-07-14 16:00:00');
insert into t_user(`username`, `nick_name`, `password`, `phone`, `create_time`)
values ('user02', 'user02', '123456', '15900001111', '2022-07-14 16:00:00');
insert into t_user(`username`, `nick_name`, `password`, `phone`, `create_time`)
values ('user03', 'user03', '123456', '15900001111', '2022-07-14 16:00:00');
insert into t_user(`username`, `nick_name`, `password`, `phone`, `create_time`)
values ('user04', 'user04', '123456', '15900001111', '2022-07-14 16:00:00');

使用MyBatis框架操作数据库步骤:

(1)定义JAVA实体

User.java

@Data
public class User {
    private Integer id;
    private String username;
    private String nickName;
    private String password;
    private String phone;
    private String createTime;
}

(2)定义MApper接口

UserDao.java

public interface UserDao {
    void insert(User user);
    void update(User user);
    User findByUsername(String username);
    void deleteById(Integer id);
}

(3)编写XML映射文件

UserDao.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.jasmine.mybatis.demo.dao.UserDao">
    <insert id="insert" parameterType="User">
        insert into t_user(`username`, `nick_name`, `password`, `phone`, `create_time`)
        values(#{username}, #{nickName}, #{password}, #{phone}, #{createTime})
    </insert>
    <update id="update" parameterType="User">
        update t_user
        set username = #{username}, nick_name = #{nickName}, password = #{password}, phone = #{phone}, create_time = #{createTime}
        where id = #{id}
    </update>
    <select id="findByUsername" parameterType="String" resultType="User">
        select id, username, nick_name as nickName, password, phone, create_time as createTime
        from t_user where username = #{username}
    </select>
    <delete id="deleteById" parameterType="Integer">
        delete from t_user where id = #{id}
    </delete>
</mapper>

(4)编写MyBatis主配置文件

MyBatis使用 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>
    <typeAliases>
        <typeAlias alias="User" type="com.jasmine.mybatis.demo.entity.User" />
    </typeAliases>
    <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/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="abc123" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mappers/UserDao.xml" />
    </mappers>
</configuration>

(5)编写测试类

Demo.java

public class Demo {
    public static void main(String[] args) throws IOException {
        // 获取配置文件输入流
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        // 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 获取 SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        // 获取 Mapper 接口
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        // 新增一个用户
        User newUser = new User();
        newUser.setUsername("new-user");
        newUser.setNickName("新建的用户(修改前)");
        newUser.setPassword("123123");
        newUser.setPhone("13900001111");
        newUser.setCreateTime("2022-07-14 16:00:00");
        userDao.insert(newUser);
        // 根据用户名获取用户信息
        User user = userDao.findByUsername("new-user");
        System.out.println("########## 修改前用户信息 ##########");
        System.out.println(new Gson().toJson(user));
        // 修改用户信息
        user.setUsername("update-user");
        user.setNickName("新建的用户(修改后)");
        userDao.update(user);
        user = userDao.findByUsername("update-user");
        System.out.println("########## 修改后用户信息 ##########");
        System.out.println(new Gson().toJson(user));
        // 删除用户
        userDao.deleteById(user.getId());
    }
}

输出结果:

########## 修改前用户信息 ##########
{"id":5,"username":"new-user","nickName":"新建的用户(修改前)","password":"123123","phone":"13900001111","createTime":"2022-07-14 16:00:00"}
########## 修改后用户信息 ##########
{"id":5,"username":"update-user","nickName":"新建的用户(修改后)","password":"123123","phone":"13900001111","createTime":"2022-07-14 16:00:00"}


Tags:MyBatis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
本文主要讲解如何在Springboot中逐步实现对mybatis的集成应用。1、引入依赖在pom.xml文件中引入mybatis依赖。// pom.xml <dependency> <groupId>org.mybatis.spring.boo...【详细内容】
2022-11-02  Tags: MyBatis  点击:(4)  评论:(0)  加入收藏
最近发现之前使用的MyBatis插件很久都没更新了,就想换个其他插件来用用。偶然发现MyBatis-Plus团队也开发了一款插件MyBatisX,体验了一把确实非常好用,提示很全,而且还能通过GUI...【详细内容】
2022-11-01  Tags: MyBatis  点击:(6)  评论:(0)  加入收藏
前言本章主要介绍MyBatis-Plus的条件构造器,条件构造器是MyBatis-Plus的核心,可以使用面向对象的方式来实现查询,本文内容涵盖开发的90%以上查询场景,我们慢慢往下看一、条件构...【详细内容】
2022-10-25  Tags: MyBatis  点击:(16)  评论:(0)  加入收藏
使用过Spring Data操作ES的小伙伴应该有所了解,它只能实现一些非常基本的数据管理工作,一旦遇到稍微复杂点的查询,基本都要依赖ES官方提供的RestHighLevelClient,Spring Data只...【详细内容】
2022-10-11  Tags: MyBatis  点击:(31)  评论:(0)  加入收藏
操作步骤如下所示:Preferences -> Editor -> File and Code Templates,点击+加号按钮,创建一个新的模板文件,如图所示: 其中,需要输入模板文件的名称,以及后缀名为xml。 模板文件...【详细内容】
2022-10-05  Tags: MyBatis  点击:(27)  评论:(0)  加入收藏
作为CRUD程序员,大部分Java开发者应该都在用Mybatis Plus来操作数据库。但是BaseMapper默认仅提供了int insert(T entity)这个单条插入的方法。那么我们想批量插入数据该怎么...【详细内容】
2022-09-26  Tags: MyBatis  点击:(98)  评论:(0)  加入收藏
MP是一个很唬人的名字,毕竟在Mybatis后面加了一个plus,就好像iphone机型后面加了plus就感觉更牛一样。但是我要告诉你,Mybatis-plus的特性只会让你的代码更烂。Mybatis-plus的...【详细内容】
2022-09-21  Tags: MyBatis  点击:(85)  评论:(0)  加入收藏
Java面试经常问到Mybatis一级缓存和二级缓存,今天就给大家重点详解Mybatis一级缓存和二级缓存原理与区别Mybatis缓存缓存就是内存中的数据,常常来自对数据库查询结果的保存,使...【详细内容】
2022-09-20  Tags: MyBatis  点击:(8)  评论:(0)  加入收藏
一,概述mybatis的分页使用的关键字就是limit,插件分页的原理就是在sql语句中拼接limit关键字,进行数据的分页查询,所以pageHelper也不例外,底层处理的就是使用的代理对象拼接的Sq...【详细内容】
2022-09-20  Tags: MyBatis  点击:(92)  评论:(0)  加入收藏
批量插入功能是我们日常工作中比较常见的业务功能之一,今天咱们来一个 MyBatis 批量插入的汇总篇,同时对 3 种实现方法做一个性能测试,以及相应的原理分析。先来简单说一下 3...【详细内容】
2022-09-02  Tags: MyBatis  点击:(56)  评论:(0)  加入收藏
▌简易百科推荐
这篇文章中我们将会介绍Spring的框架以及本体内容,包括核心容器,注解开发,AOP以及事务等内容那么简单说明一下Spring的必要性: Spring技术是JavaEE开发的必备技能,企业开发技术...【详细内容】
2022-11-03  嘻呱互联   网易号  Tags:Spring   点击:(5)  评论:(0)  加入收藏
本文主要讲解如何在Springboot中逐步实现对mybatis的集成应用。1、引入依赖在pom.xml文件中引入mybatis依赖。// pom.xml <dependency> <groupId>org.mybatis.spring.boo...【详细内容】
2022-11-02  高道天    Tags:SpringBoot   点击:(4)  评论:(0)  加入收藏
真正的大师,永远都怀着一颗学徒的心!一、项目简介Vue2/Vue3前后端分离开发框架二、实现功能 支持移动端和pc端 支持自动生成代码 支持各种图表表单 支持树形菜单 支持...【详细内容】
2022-11-02  菜鸟程序猿  今日头条  Tags:Vue2   点击:(1)  评论:(0)  加入收藏
一、自动注入没有添加泛型问题自定义RedisTemplate<String,Object>后,在使用时,需要在自动注入的RedisTemplate中添加泛型为RedisTemplate<String,Object>,否则会报错:com.fast...【详细内容】
2022-11-01  德才兼备清风Q  今日头条  Tags:Springboot   点击:(5)  评论:(0)  加入收藏
在考虑 笔记本 或者 显示器 默认设置125%或者150%缩放,导致布局错乱的解决方法 一、为什么会出现有这个问题? 因为现在很多14寸的笔记本,出厂默认就是150%的显示。导致很多时...【详细内容】
2022-11-01  零端阿飞  今日头条  Tags:vue   点击:(11)  评论:(0)  加入收藏
我们将研究 request-validator 库,它能够将用户输入与预定义的一组规则(如 required、max、min、email 等)进行比较。我们有时会遇到由于用户提供的输入长于数据库列大小甚至不...【详细内容】
2022-10-31  qaseven  今日头条  Tags:Spring Boot   点击:(6)  评论:(0)  加入收藏
Svelte 的优点 代码是根据说明在没有额外运输规格的情况下生成的。 它将指令转换为强大的运行时语言。 它运行代码并优化代码生成,速度相比React、vue的运行资源消耗小很多...【详细内容】
2022-10-29  三维棱镜prism3dcn  今日头条  Tags:Svelte   点击:(9)  评论:(0)  加入收藏
一、Forest1.1 业务需求一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为了方便,复用别人的接口(网上的,公共的第三方接口(短信、天气等)),就出现了后端调用后端接口的情况...【详细内容】
2022-10-27  程序猿阿嘴  今日头条  Tags:Forest   点击:(20)  评论:(0)  加入收藏
为了k8s和别的程序不起冲突,默认端口的范围是 30000-32767 ,这里面我们可以手动修改api-server的配置,缺点是可能占用其它程序的端口或者与其他程序的端口产生冲突。1、方法:修...【详细内容】
2022-10-25  gongjing2012  今日头条  Tags:K8S   点击:(13)  评论:(0)  加入收藏
本地装聊mysql数据库,真吃内存啊,微服务一起来,idea 开发工具就疯狂吃内存,前端一启动,node.js 就狂吃,网页再吃点,16g内存一会儿就崩了,如果再玩一下微信开发工具,估计都一点跑不起...【详细内容】
2022-10-23  小虎鲸宝妈记  今日头条  Tags:springcloud   点击:(12)  评论:(0)  加入收藏
站内最新
站内热门
站内头条