MyBatis实现简单的增删查改操作(XML配置)

2023-11-09

最近在跟着B站传智的课程学习SSM,先学的是MyBatis,写一篇博客记录一下如何利用MyBatis实现简单的增删查改。

主要是记录一下实现过程、实现思路、注意事项、避坑。

本教程使用XML配置进行实现

一、软件环境

Java 、 IDEA 、mysql57

SQL准备:

使用mysql创建一个用户信息表,包含用户名称、生日、性别、地址、id。并插入一定的数据

SQL语句如下

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(32) NOT NULL COMMENT '用户名称',
  `birthday` datetime default NULL COMMENT '生日',
  `sex` char(1) default NULL COMMENT '性别',
  `address` varchar(256) default NULL COMMENT '地址',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert  into `user`(`id`,`username`,`birthday`,`sex`,`address`) values (41,'老王','2018-02-27 17:47:08','男','北京'),(42,'小二王','2018-03-02 15:09:37','女','北京金燕龙'),(43,'小二王','2018-03-04 11:34:34','女','北京金燕龙'),(45,'传智播客','2018-03-04 12:04:06','男','北京金燕龙'),(46,'老王','2018-03-07 17:37:26','男','北京'),(48,'小马宝莉','2018-03-08 11:44:00','女','北京修正');

二、环境配置

1.首先打开IDEA并创建工程,这里不选择任何maven工程,直接创建

点击finish即可创建好

这里会报错,提示一些插件没有装好

根据红色的箭头所指的点一下就好了

2. 在项目中的pom.xml输入以下内容,对项目用到的依赖进行配置

<packaging>jar</packaging>表示打包方式为jar

依赖包括mybatis、mysql、log4j、junit这些。mybatis为数据库框架、mysql为数据库、log4j是日志系统、junit是测试模块。

<packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.10</version>
        </dependency>

    </dependencies>

在Java下创建package,命名为com.scu.domain

在该目录下创建我们的实体类User.class 让这个实体类实现序列化接口 implements serializable

实体类中的每个属性的类型和名称与数据库表中的一一对应

再选中各个属性,右键自动生成getter and setter方法 以及包含所有属性的to String方法

package com.scu.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {

    private Integer id;
    private String username;
    private Date Birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public Date getBirthday() {
        return Birthday;
    }

    public void setBirthday(Date birthday) {
        Birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

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

}

 再在刚刚生成的scu包下面创建package 叫做dao

再在com.scu.dao下创建interface,名为IUserDao(自定义命名即可)

package com.scu.dao;

import java.util.List;
import com.itheima.domain.User;
/*
* 用户的持久层接口
*
* */
public interface IUserDao {

    /*
    * 查询所有操作
    *
    * */
    List<User> findAll();

    public void saveUser(User user);
    public void updateUser(User user);
    public void deleteUser(int userid);
}

在IUserDao.class接口中写入各个函数的方法体。

    List<User> findAll(); //定义的查询所有的函数,返回类型为User型的List

    public void saveUser(User user); //定义的新增记录的函数,传入参数类型为User对象
    public void updateUser(User user);//定义的修改记录的函数,传入参数类型为User对象
    public void deleteUser(int userid);//定义的删除记录的函数,传入参数为数值(id号)

在resource下面创建目录和配置文件

先创建Mybatis的配置文件 SqlMapConfig.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">
<!--mybatis主配置-->
<configuration>
    <!--配置环境-->
  <environments default="mysql">
      <!--配置mysql的环境-->
      <environment id="mysql">
          <!--配置事务类型-->
          <transactionManager type="JDBC"></transactionManager>
          <!--配置数据源、连接池-->
          <dataSource type="POOLED">
              <!--配置数据库的四个基本信息-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
              <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
              <property name="username" value="root"/>
              <property name="password" value="123456"/>
          </dataSource>

      </environment>
  </environments>
    <!--指定映射配置文件的位置-->

    <mappers>
        <mapper resource="com/scu/dao/IUserDao.xml"/>

    </mappers>
</configuration>

由于resource下没有package,只有directory,因此必须一级一级创建即可创建成三级,否则只能创建一级

也在resource下创建com.scu.dao目录,在下面创建IUserDao.xml对sql语句进行配置(也可不要这部分,用注解)

在语句中配置出其操作语句的id,需要传入参数的指定parametertype,例如insert和update语句需要指定查询条件的参数

对于需要对于查询结果将进行返回的标签语句,指定其返回类型resulttype,例如select语句

<?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.scu.dao.IUserDao">
<!--配置查询所有-->

    <select id="findAll" resultType="com.scu.domain.User">

        select * from user
    </select>
    
    <insert id="saveUser" parameterType="com.scu.domain.User">

     insert into user(username,address,sex,birthday) values(#{username},#{address},#{sex},#{birthday})
    </insert>
    
    <update id="updateUser" parameterType="com.scu.domain.User">

    update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id}

    </update>

    <delete id="deleteUser" parameterType="Integer">

        delete from user where id=#{id}
    </delete>
</mapper>

配置好以后关键的部分就配置好了,很多部分mybatis替我们完成

接下来就是在test下面编写测试类去测试了

我们在test下的java文件夹中创建com.scu.test三级目录,再在包下面创建MyBatisTest.java

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.After;
import org.junit.Before;
import org.junit.Test;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

public class MybatisTest {
/*
* 入门案例
*
* */
    InputStream in=null;
    IUserDao userDao=null;
    SqlSession session=null;
    @Before
    public void init() throws Exception
    {
        //1.读取配置文件
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        SqlSessionFactory factory=builder.build(in);
        //3.使用工厂生产sqlsession对象
        session=factory.openSession();
        //4.使用sql session创建Dao接口的代理对象
        userDao=session.getMapper(IUserDao.class);
    }

     @After
    public void finish() throws Exception
    {
        session.commit();
        //6.释放资源
        session.close();
        in.close();

    }
    @Test
    public void TestsaveUser() throws Exception
    {
        User user=new User();
        user.setUsername("MyBatis_saveUser");
        user.setAddress("Shanghai");
        user.setSex("女");
        user.setBirthday(new Date());

        userDao.saveUser(user);

    }
     @Test
    public void testFindAll() throws Exception {


        //5.使用代理对象执行方法
        List<User> users=userDao.findAll();
        for(User user:users)
        {
            System.out.println(user);
        }

    }

    @Test
    public void testUpdateUser() throws Exception{
        User user=new User();
        user.setId(49);
        user.setUsername("MyBatis_testUpdateUser");
        user.setAddress("Shanghai");
        user.setSex("女");
        user.setBirthday(new Date());

        userDao.updateUser(user);

    }
    @Test
    public void testDelete() throws Exception{
        userDao.deleteUser(48);

    }

}

然后需要执行什么操作,就调用对应的方法即可执行语句,我们调用testfindall函数

即可出现以下,查询成功!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis实现简单的增删查改操作(XML配置) 的相关文章

随机推荐

  • cocos2dx中的内存加载PLIST

    今天 加载图片时有问题 myButtonPList loadTextures jineng 02103 png jineng 02103 light png jineng 03101 png UI TEX TYPE PLIST myButt
  • 时间趋势可视化-柱形图

    第1关 大胃王 比赛数据柱形图绘制 绘制柱形图的基本步骤 本关任务 根据实训提供的 大胃王 比赛数据绘制柱形图 熟悉柱形图绘制的基本步骤 coding utf 8 import pandas as pd from matplotlib im
  • 利用CIBERSORT免疫细胞类群分析详细教程

    利用CIBERSORT免疫细胞类群分析详细教程 现在最火的组学技术是什么 无疑便是单细胞测序了 通过单细胞测序 科研人员可以获得比原来更为精细的细胞图谱 但是单细胞测序诸多限制条件 也是不能让大家很好地利用这项技术解决自己的科学问题 除了较
  • 【Qt】通过QtCreator源码学习Qt(十二):Q_D和Q_Q指针(简称“d指针”)详解

    1 Q D和Q Q指针 简称 d指针 简介 参考博客 https www devbean net 2016 11 qt creator source study 07 https blog csdn net rabinsong articl
  • SpringBoot项目中统计所有Controller中的方法

    对接口方法进行抽象 Data public class ControllerMethodItem public String controllerName public String methodName public String req
  • vscode中preLaunchTask“g++”已终止,退出代码为1的解决方案

    问题背景 楼主原来做的项目 电脑中装了MinGW64 还有MinGW的32位版在用vscode时发现出现了 preLaunchTask g 已终止 退出代码为1的问题 找了好久 解决了问题 launch json 注释的位置 这里修改GDB
  • Vue中实现放大镜效果

    先来看一下我们需要实现的效果是怎样的 这里我们没有使用原生的 js 方法去实现 而是使用的 Vue3 官方推荐的一个工具库 vueuse cor 中的 useMouseInElement 方法来实现放大镜的效果 首先来看一下 useMous
  • 如何安装和配置树莓派

    如何安装和配置树莓派 如果你有一块树莓派的板子 还有一个没安装系统的SD卡 怎么能把系统装上 配置好跑起来 这篇文章主要就讲这个事 这是一块Raspberry Pi Zero W板 以及一个空SD卡 当然 我们需要一个SD卡读卡器 还需要一
  • Flink Native Kubernetes (一)

    目录 文章目录 目录 概述 Linux 集群描述 版本 部署K8S环境 配置Yum 安装docker 安装Rancher 安装K8s 工作集群 添加KubeCtl命令上下文 运行FlinkDemo FlinkSession关于K8s的基础环
  • 三:Sensor SLPI层代码分析---

    三 Sensor SLPI层代码分析 在学习SLPI侧代码前我们先了解下SEE的registry config registry 放在 persist sensors registry registry中 它是通过config生成的 是给S
  • 循环遍历本地的图片使用BASE64编码,并在ajax也遍历图片

    前端调用ajax到后端去图片的方法 并返回 public void search HttpServletRequest request HttpServletResponse response throws Exception String
  • 【毕业设计】基于stm32的智能扫地机器人设计与实现 - 单片机 物联网

    文章目录 0 简介 1 课题背景 2 硬件系统总体框架 2 1 电机驱动 2 2 红外线传感器 2 3 超声波传感器 2 4 MPU6050 2 5 ATK ESP8266 WI FI 模块 2 6 电源管理模块 3 软件系统设计 3 1
  • 前端知识点

    写在前面 CSDN话题挑战赛第1期 活动详情地址 CSDN 参赛话题 前端面试宝典 话题描述 欢迎各位加入话题创作得小伙伴 如果我没有猜错得话 我觉得你是应该同我一样是一位前端人 如今前端在IT事业中的占比越来越重 已经成为不可缺少的部分
  • 2019年DNS服务器速度排行榜

    第一名 DNSPod 不得不说腾讯自从收购了DNSPod后 无论是服务还是速度都有显著的提升 无论是访问速度还是解析速度都在国内是处于龙头大哥的地位 昔日的老大114的地位已经不保 作为腾讯旗下的公司 在游戏解析这一块来说 技术自然是领先于
  • 排序算法详解(堆,归并,快速排序最简及理解写法)

    十大排序算法和复杂度 常见排序的详解 只讲解真实场景中常用的 简单的就不分析了大家稍微看一下就行 快速排序 快排的思想主要就是每次把一个位置放好后 可以把数组分成两半 递归处理子问题即可 空间复杂度OlogN 分析 每次都分成两半处理子问题
  • IDEA报错程序包xxx不存在,但Depandencies依赖里明明有

    IDEA报错程序包xxx不存在 但依赖里明明有 看一下这个项目的pom xml 我这边引用的是公共依赖 应该是运行的时候依赖没有引用过来 搞了半天 网上搜了很多没搜到 后来我把 settings gt Runner 设置调了一下 就没有问题
  • CUDA之Warp Shuffle详解

    之前我们有介绍shared Memory对于提高性能的好处 在CC3 0以上 支持了shuffle指令 允许thread直接读其他thread的寄存器值 只要两个thread在 同一个warp中 这种比通过shared Memory进行th
  • Zabbix 学习(六) 自动发现功能与主动监控的实现

    一 自动发现 当被监控的设备非常多的时候 手工添加将会变得非常不方便 可以使用自动发现功能 实现添加主机 添加到主机组 链接模板 自动发现流程 创建自动发现规则 创建动作 当主机被发现之后 执行什么操作 通过动作 添加主机 将模板应用到发现
  • qt 实现翻金币游戏

    游戏玩法介绍 游戏设置关卡二十关 通过选关界面可以选择进入到对应的关卡中 进入对应关卡之后 点击任意金币 可以使该硬币以及周边 上 下 左 右 金边翻转 如果硬币都翻转为金币 则游戏胜利 游戏界面设置 开始界面 开始场景中需要自定义一个按钮
  • MyBatis实现简单的增删查改操作(XML配置)

    最近在跟着B站传智的课程学习SSM 先学的是MyBatis 写一篇博客记录一下如何利用MyBatis实现简单的增删查改 主要是记录一下实现过程 实现思路 注意事项 避坑 本教程使用XML配置进行实现 一 软件环境 Java IDEA mys