MyBatis操作数据库实现增删改查

news2024/11/28 4:40:41

创建数据库

语句要分别执行

CREATE DATABASE mybatis;


USE mybatis;

CREATE TABLE `user`(
    id INT(10) NOT NULL PRIMARY KEY,
    `name` VARCHAR(20) DEFAULT NULL,
   


INSERT INTO `user`(id,`name`,pwd)  VALUES
(1,'张三','123456'),
(2,'李四','121212'),
(3,'王五','1314520')

搭配环境

1、在pojo包创建实体类User

2、创建一个工具类utils,用来获取SqlSession实例

3、在resources资源下面创建一个mybatis-config.xml文件,并绑定UserMapper.xml或UserMapper接口

4、在dao包下创建UserMapper接口和创建UserMapper.xml文件

实体类User,使用注解需要导入lombok的依赖包

package com.qing.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private int id;
    private String name;
    private String pwd;

}

工具类MyUtils

package com.qing.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;

public class MyUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            String resources="mybatis-config.xml";
            InputStream inputStream= Resources.getResourceAsStream(resources);
             sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

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="test">
        <environment id="test">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&amp;useUnicode=true&amp;characterEcoding=uft-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper class="com.qing.dao.UserMapper"></mapper>
    </mappers>
</configuration>

会遇到资源过滤问题,需要将build导入在pom.xml中

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <filtering>true</filtering>
      </resource>
    </resources>
  </build>

增加数据

UserMapper接口

package com.qing.dao;

import com.qing.pojo.User;

public interface UserMapper {
  int addUser(User user);

}

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.qing.dao.UserMapper">
        <insert id="addUser">
            insert into user(id,name,pwd) values (#{id},#{name},#{pwd})
        </insert>
</mapper>

测试,测试使用注解需要导入Junit依赖

package com.qing;

import com.qing.dao.UserMapper;
import com.qing.pojo.User;
import com.qing.utils.MyUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MyBatisTest {
    @Test

    public void test(){
        SqlSession sqlSession = MyUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.addUser(new User(4, "安安", "238421"));
        if(i>0){
            System.out.println("插入成功");
        }

       sqlSession.commit();
        sqlSession.close();
    }

}

删除数据

UserMapper接口

package com.qing.dao;

public interface UserMapper {
  int deleteUser(int user);

}

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.qing.dao.UserMapper">
       <delete id="deleteUser">
           delete from user where id=#{id}
       </delete>
</mapper>

测试

package com.qing;

import com.qing.dao.UserMapper;
import com.qing.utils.MyUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MyBatisTest {
    @Test

    public void test(){
        SqlSession sqlSession = MyUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.deleteUser(4);
        if(i>0){
            System.out.println("删除成功");
        }

       sqlSession.commit();
        sqlSession.close();
    }

}

修改数据

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.qing.dao.UserMapper">
       <update id="updateUser">
           update user set name=#{name},pwd=#{pwd} where id=#{id}
       </update>
</mapper>

UserMapper接口

package com.qing.dao;

import com.qing.pojo.User;

public interface UserMapper {
  int updateUser(User user);

}

测试

package com.qing;

import com.qing.dao.UserMapper;
import com.qing.pojo.User;
import com.qing.utils.MyUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class MyBatisTest {
    @Test

    public void test(){
        SqlSession sqlSession = MyUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        int i = mapper.updateUser(new User(4,"hh","82390"));
        if(i>0){
            System.out.println("修改成功");
        }

       sqlSession.commit();
        sqlSession.close();
    }

}

查询数据

UserMapper接口,查询所有数据

package com.qing.dao;

import com.qing.pojo.User;

import java.util.List;

public interface UserMapper {
    List<User> queryAllUser();

}

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.qing.dao.UserMapper">
    <select id="queryAllUser" resultType="com.qing.pojo.User">
        select * from user
    </select>
</mapper>

测试

package com.qing;

import com.qing.dao.UserMapper;
import com.qing.pojo.User;
import com.qing.utils.MyUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;

public class MyBatisTest {
    @Test

    public void test(){
        SqlSession sqlSession = MyUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.queryAllUser();
        for (User user : userList) {
            System.out.println(user);
        }
    }

}

如果需要查询一条语句,给点一个条件即可,参数传入主键id,并在UserMapper.xml中的select语句中加上where  id=#{id}

总结:

1、查询所以数据,插入数据,修改数据,参数是一个对象;

2、根据id查询,删除数据,参数是一个基本类型

3、查询不需要提交事务,增删改查需要提交数据,否则,数据不会成功更新到数据库

4、查询的数据类型是一个User,增删改数据类型是int,因为查询查的是数据,一条数据就是一个对象,增删改执行成功就会返回"受影响行数为1"

原理:获取sqlSession实例,通过getMapper反射到UserMapper接口,就可以获取接口中的方法,接口中的方法又和UserMapper.xml绑定,就可以查询数据库语句;数据库的连接交给了mybatis-config.xml配置文件,获取sqlSession实例交给了MyBatis工具类

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

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

相关文章

25.基于混合整数规划方法的微网电池储能容量优化配置

关键词&#xff1a;储能容量优化 储能配置 微网 编程语言&#xff1a;matlab 主题&#xff1a;基于混合整数规划方法的微网电池储能容量优化配置 主要内容&#xff1a; 本代码目的为实现微电网内电池容量的优化配置&#xff0c;目标函数为配置过程中整体的运行成本最小或…

【Spring】Spring AOP面向切面编程

文章目录 什么是Spring AOP&#xff1f;为什么要使用AOP&#xff1f;AOP相关组成的概念切面切点通知连接点 Spring AOP实现创建切面创建切点创建通知创建连接点示例演示 Spring AOP的实现原理 什么是Spring AOP&#xff1f; 想要知道Spring AOP&#xff0c;就得先了解AOP AOP是…

【周期信号】工程测试-数据处理-信号分析课程试题:周期信号与周期信号相加,所得信号一定是周期信号吗?

一、问题分析 某课程的作业题中&#xff0c;有下面的一种题目&#xff0c;判断两个周期信号相加&#xff0c;是否是周期信号&#xff0c;以及计算周期长短是多少。 非常显然&#xff0c;1、3、4题都很容易判断。 第2题&#xff0c;我们重点分析。 二、网上的错误论述 在百…

Vivado运用 Language Template 来创建set_input_delay/set_output...

时序约束中的 set_input_delay/set_output_delay 约束一直是一个难点&#xff0c;无论是概念、约束值的计算&#xff0c;还是最终的路径分析&#xff0c;每一次都要费一番脑子。Vivado为方便用户创建输入输出接口的约束&#xff0c;整理出了一套非常实用的InputDelay/Output De…

【C++】类与对象(3)

【C】类与对象&#xff08;3&#xff09; 作者&#xff1a;爱写代码的刚子 时间&#xff1a;2023.5.9 本篇博客干货比较多&#xff0c;主要是对类和对象知识的进一步加深&#xff0c;可能有点晦涩。主要介绍的内容为&#xff1a;深入构造函数&#xff0c;初始化列表&#xff0c…

《操作系统》——进程与线程

在上一期博客中&#xff0c;我们学习了关于操作系统中计算机系统概述的基本知识。今天&#xff0c;我将带领学习的是关于操作系统中一个非常重要的概念——进程与线程&#xff01;&#xff01;&#xff01; 目录 前言 &#xff08;一&#xff09;进程的基本概念和特征 1、进…

[golang gin框架] 33.Gin 商城项目- 集成支付宝微信支付、生成支付二维码、监听处理异步通知跳转到订单页面

一.界面展示 当用户点击去支付时,请求支付界面,并 展示对应订单相关数据,以及 支付方式相关操作,点击对应的支付方式,进行支付操作 该界面对应的功能: 1.进入该界面,后台逻辑判断: 是否存在该订单,如果不存在,则跳转到购物车页面;如果存在,则获取对应订单相关数据,并 渲染到页面…

0511课后作业(C高级)

1.编写一个名为myfirstshell.sh的脚本&#xff0c;它包括以下内容。 1、包含一段注释&#xff0c;列出您的姓名、脚本的名称和编写这个脚本的目的 2、和当前用户说“hello 用户名” 3、显示您的机器名 hostname 4、显示上一级目录中的所有文件的列表 5、显示变量PATH和HOM…

iOS播放与编辑HDR视频

在iPhone12发布后&#xff0c;支持使用Dolby Vision来录制HDR视频。至此&#xff0c;升级到iOS14.1系统后&#xff0c;已经支持录制、播放、编辑和导出HDR视频。接下来&#xff0c;让我们一起探索HDR视频的各种操作。 一、HDR视频边编辑边预览 1、Profile与Level HDR视频中&…

Java奠基】实现面向对象编程方法

目录 标准的JavaBean类 设计对象并使用 对象封装 this关键字 构造方法 要知道对象是一个又一个能帮助我们解决问题的东西&#xff0c;但是这些东西并不是凭空出现的&#xff0c;需要我们根据设计图来进行制造&#xff0c;而这些一个一个的设计图就是一个一个的类。 标准的…

ChatGPT分销版多开v3.9.1-新增 语音识别和绘画多个引擎-已测试

众所周知ChatGPT在国内是无法正常使用的 而我们模块要做的就是这一点让普通人使用上ChatGPT 或娱乐或作为生产力工具 当前ChatGPT是非常火的 但是国内环境复杂&#xff0c;所以机会来了。。。 ChatGPT分销版多开v3.9.1&#xff1a;公众号H5版本 目前没反编译前端容易封号…

计算机网络-SNMP协议与pysnmp

1.概念 2.典型架构 3.snmp的信息交互 4.MIB 4.1常见MIB节点 5.SNMP管理模型 MIB位于被管理进程 6.SNMP的三个版本 6.1 SNMPv1 6.2 SNMPv2C 6.3 SNMPv3 6.3.1 SNMP3的基本操作 6.3.2 SNMP交互GET 6.3.3 SNMP交互-GETBULK 6.3.4 SNMP交互-SET 6.3.5 SNMP交互-trap 6.3.6 SNMP交…

【开源之夏 2023】欢迎报名 Dragonfly、Kata Containers、Nydus 社区项目!

开源之夏是由“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动&#xff0c;旨在鼓励在校学生积极参与开源软件的开发维护&#xff0c;促进优秀开源软件社区的蓬勃发展&#xff0c;培养和发掘更多优秀的开发者。 活动联合国内外各大开源社区&#xff0c;针对重要开…

Dubbo消费端源码深入分析(8)

目录 简介 过滤器 &#xff08;Filter&#xff09; 负载均衡接口 &#xff08;LoadBalance&#xff09; 容错接口 &#xff08;Cluster&#xff09; 源码分析 1. 获取Invoker过程 2. 获取动态代理对象proxy 3. 最后调用此动态代理对象的invoke方法 过滤器、容错组件、负…

基础IO(二)

磁盘 1.基础概念2.磁盘线性理解3.文件系统4.inode与文件名5.理解增删查改6.补充细节 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#x1f680;系列专栏&#xff1a;【Linux的学习】 &#x1f4dd;&#x1f4…

Chapter7:非线性控制系统分析(下)

第七章:非线性控制系统分析 Exercise7.11 设非线性系统结构图如下图所示,分析系统运动并计算自振参数。 解: 将 3 3 3个串联非线性环节进行等效合并,由于反馈通道饱和特性与前向通道饱和特性同时进入饱和状态,所以反馈通道的非线性环节相当于不起作用,将前向通道的另两…

【计算机视觉 | 自然语言处理】Hugging Face 超详细介绍和使用教程

文章目录 一、前言二、可以获得什么&#xff1f;三、入门实践3.1 帮助文档3.2 安装3.3 模型的组成3.4 BERT模型的使用3.4.1 导入模型3.4.2 使用模型3.4.2.1 tokenizer 3.5 model3.6 后处理 一、前言 Hugging Face 起初是一家总部位于纽约的聊天机器人初创服务商&#xff0c;他…

URP渲染管线里面的摄像机用法

大家好&#xff0c;我是阿赵&#xff0c;这里继续讲一下URP渲染管线。 这次要讲的是URP渲染管线里面的摄像机用法 之前介绍过&#xff0c;URP摄像机和普通摄像机的属性显示上有比较大的变化&#xff1a; 接下来从用法上来说明一下&#xff1a; 1、多个摄像机的处理变化 多个…

unity UGUI系统梳理 -交互组件

概述 unity 中的交互组件可用于处理交互&#xff0c;例如鼠标或触摸事件以及使用键盘或控制器进行的交互 1、按钮 (Button) Button详解 2、开关 (Toggle) Background&#xff1a;背景图片&#xff0c;控制toggle组件的背景颜色改变&#xff0c;从而展示此物体是否被选中的…

5.View的事件分发机制/事件处理机制原理分析

事件MotionEvent包含了哪几个? ACTION_DOWN 手指触碰到屏幕时触发,只会执行一次ACTION_MOVE 手指在屏幕上滑动出发,会执行多次ACTION_UP 手指抬起离开屏幕出发,只会执行一次ACTION_CANCEL 事件被上层拦截时会触发 父容器ViewGroup需要从子View手中抢夺分发的事件进行处理时,会…