mybatis增删改查

2023-11-12

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

MySQL创建数据库和数据表


CREATE DATABASE `mybatis1`;
use `mybatis1;`
CREATE TABLE `user` (
  `id` int NOT NULL,
  `name` varchar(30) DEFAULT NULL,
  `pwd` varchar(30) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `user` (`id`,`name`,`pwd`) VALUES
(1,`张三`,`123456`),
(2,`大头儿子`,`963258`),
(3,`张三王麻子`,`456789`)

新建一个普通的maven项目

pom文件存放mybatis所存放需要的jar包

<?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>mybatisks</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>mybatis-01</module>
    </modules>
    <!--导入依赖-->
    <dependencies>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!--mybatis-->
        <!--https://mvnrepository.com/artigact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.7</version>
        </dependency>
        <!--junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <!--在build中配置resources,来防止我们资源导出失败的问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

在pojo中编写实体类:

package com.bjwl.pojo;

public class User {
    private Integer id;
    private String name;
    private String pwd;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
    public String getName(){
        return name;
    }

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

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pwd='" + pwd + '\'' +
                '}';
    }
}

在dao/mapper包中存放user接口类和对应的映射文件

package com.bjwl.dao;

import com.bjwl.pojo.User;

import java.util.List;

public interface UserMapper {
   //查询全部用户
   List<User> getUserList();
   //根据id查询用户
   User getUserById(int id);
   //insert插入一个用户
   int addUser(User user);
   //修改用户
   int updateUser(User user);
   //删除一个用户
   int deleteUser(int id);
}

对应的xml文件中包含所需要用到的增删改查的SQL语句。

<?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">
<!--namespace=绑定一个对应的Dao/Mapper接口-->
<mapper namespace="com.bjwl.dao.UserMapper">
    <!--select查询语句:全部查询-->
    <select id="getUserList" resultType="com.bjwl.pojo.User" parameterType="String">
        select * from mybatis1.user
    </select>
    <!--查询语句-->
    <select id="getUserById" parameterType="int" resultType="com.bjwl.pojo.User">
        select * from mybatis1.user where id = #{id}
    </select>
    <!--对象中属性可以直接取出来-->
    <insert id="addUser" parameterType="com.bjwl.pojo.User" >
        insert into mybatis1.user (id,name,pwd) value(#{id},#{name},#{pwd});
    </insert>
    <!--修改数据-->
    <update id="updateUser" parameterType="com.bjwl.pojo.User">
        update mybatis1.user set id=#{id},name=#{name},pwd=#{pwd}  where id = #{id};
    </update>
    <!--删除一条数据-->
    <delete id="deleteUser" parameterType="com.bjwl.pojo.User">
        delete from mybatis1.user where id = #{id}
    </delete>
</mapper>

mybatis核心配置文件:mybatis-config.xml。

该文件配置了 MyBatis 的一些全局信息,包含数据库连接信息和 MyBatis 运行时所需的各种特性,以及设置和影响 MyBatis 行为的一些属性。

<?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/mybatis1?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/bjwl/dao/UserMapper.xml"/>
    </mappers>
</configuration>

util包中的mybatisUtils类

package com.bjwl.utils;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.*;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;

//sqlSessionFactory-->SqlSession
public class MybatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            //使用mybatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //既然有了sqlSessionFactory,顾名思义,我们就可以从中获得SqlSession的实例
    //SqlSession完全包含了面向数据库执行SQL命令的所有方法
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession();
    }
}

编写一个测试类:

下面是固定部分:

package com.bjwl.dao;

import com.bjwl.pojo.User;
import com.bjwl.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import javax.swing.plaf.basic.BasicMenuUI;
import java.util.List;

public class UserDaoTest {
    @Test
    public void test(){
        //第一步:获得SqlSession对象
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        try {
            //方式一:getMapper
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            List<User> userList = userDao.getUserList();
            //方式二:
            // List<User> userList = sqlSession.selectList("com.bjwl.dao.UserDao.getUserList");
            //遍历一个数组
            for (User user : userList) {
                System.out.println(user);
            }
        }catch (Exception e){
           e.printStackTrace();
        }finally {
            //关闭sqlSession
            sqlSession.close();
        }
    }

 查询数据:

  @Test
    public void getUserById(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById(1);
        System.out.println(user);
        sqlSession.close();
    }

查询结果:

插入数据:

 @Test
    public void addUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = new User();
        user.setUsername("rose");
        user.setJobs( "student" );
        user.setPhone("13884520460");
        int rows = sqlSession.insert("com.bjwl.dao"
                    +".UserMapper.addUser", user);
        if(rows>0){
            System.out.println("您成功插入了"+rows+"条数据");
        }else{
            System.out.println("执行插入操作失败!!!");
        }
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.close();
    }

插入结果:

数据库结果显示:

修改更新:

@Test
    public void updateUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper( UserMapper.class );
        User user = new User();
        user.setId( 3 );
        user.setName( "小头爸爸" );
        user.setPwd( "963258" );
        int rows = sqlSession.update("com.bjwl.dao"
                +".UserMapper.updateUser", user);
        if(rows>0){
            System.out.println("您成功修改了"+rows+"条数据");
        }else{
            System.out.println("执行修改操作失败!!!");
        }
        sqlSession.commit();
        sqlSession.close();
    }

结果图:

数据库更新之后的数据表:

 

 

删除数据:

@Test
    public void deleteUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper( UserMapper.class );
        mapper.deleteUser( 4);
        sqlSession.commit();
        sqlSession.close();
    }

结果:

数据库:

 

测试类全部源码如下:

package com.bjwl.dao;

import com.bjwl.pojo.User;
import com.bjwl.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import javax.swing.plaf.basic.BasicMenuUI;
import java.util.List;

public class UserDaoTest {
    @Test
    public void test(){
        //第一步:获得SqlSession对象
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        try {
            //方式一:getMapper
            UserMapper userDao = sqlSession.getMapper(UserMapper.class);
            List<User> userList = userDao.getUserList();
            //方式二:
            // List<User> userList = sqlSession.selectList("com.bjwl.dao.UserDao.getUserList");
            //遍历一个数组
            for (User user : userList) {
                System.out.println("user");
            }
        }catch (Exception e){
           e.printStackTrace();
        }finally {
            //关闭sqlSession
            sqlSession.commit();
            sqlSession.close();
        }
    }
    @Test
    public void getUserById(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user = mapper.getUserById(1);
        System.out.println(user);
        sqlSession.close();
    }
    //增删改需要提交事务
    @Test
    public void addUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user=new User();
        user.setName( "胡图图" );
        user.setPwd( "258963" );
        //提交事务
        sqlSession.commit();
        //关闭sqlSession
        sqlSession.close();
    }

    @Test
    public void updateUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper( UserMapper.class );
        User user = new User();
        user.setId( 3 );
        user.setName( "小头爸爸" );
        user.setPwd( "963258" );
        int rows = sqlSession.update("com.bjwl.dao"
                +".UserMapper.updateUser", user);
        if(rows>0){
            System.out.println("您成功修改了"+rows+"条数据");
        }else{
            System.out.println("执行修改操作失败!!!");
        }
        sqlSession.commit();
        sqlSession.close();
    }
    @Test
    public void deleteUser(){
        SqlSession sqlSession=MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper( UserMapper.class );
        mapper.deleteUser( 4);
        sqlSession.commit();
        sqlSession.close();
    }
}

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

mybatis增删改查 的相关文章

随机推荐

  • J2Cache的学习

    J2Cache的学习 此教程基于黑马程序员Java品达通用权限项目 哔哩哔哩链接 https www bilibili com video BV1tw411f79E p 97 一 j2cache介绍 j2cache是OSChina 开源中国
  • java高并发

    转载地址 https www cnblogs com lr393993507 p 5909804 html 对于开发的网站 如果网站的访问量非常大 那么我们应该考虑相关的 并发访问问题 并发是绝大部分程序员头疼的问题 为了更好的理解并发和同
  • Java 抽象类能不能实例化

    短回答就是 不能 这里有 2 个概念 什么是抽象类和什么是实例化 实例化 实例化简单来说就是为 Java 中使用的对象分配存储空间 抽象类 从代码上来说 抽象类就是一个用 abstract 关键字来修饰的类 这个类除了不能被实例化以外 其他
  • 若依使用模块窗口时把子页面内容传递给父页面

    在若依开发中 经常需要将子页面的表格中勾选内容传回父页面 本文将具体说明实现方式 1 父页面中存在一个按钮 点击即打开子页面 一个模态窗口 会阻塞父页面的行为 2 在父页面中 需要完成打开子页面和回调给父页面的方法 而且此方法可在若依样例中
  • 【程序人生】从土木专员到网易测试工程师,薪资翻3倍,他经历了什么?

    转行对于很多人来说 是一件艰难而又纠结的事情 或许缺乏勇气 或许缺乏魄力 或许内心深处不愿打破平衡 可对于我来说 转行是一件不可不为的事情 因为那意味着新的方向 新的希望 我是学工程管理的 一个工程类的专业 毕业之后的职业轨迹 土木工程专员
  • 【VSCode】1、VSCode 如何连接服务器

    文章目录 一 安装 remote ssh 插件 二 直接连接 三 配置 SSH 公匙 免密登录 一 安装 remote ssh 插件 点击插件搜索框 搜 remote ssh 点击安装 安装完成后就会出现下面的图标 二 直接连接 点击加号
  • r语言中出现unused argument怎么办

    如果在使用 R 语言时出现 unused argument 的错误提示 通常是因为在调用函数时传入了多余的参数 为了解决这个问题 你需要检查你的代码 确保你只传入了函数所需的参数 例如 如果你调用的函数只有两个参数 但你却传入了三个参数 那
  • 蓝桥杯打卡Day7

    文章目录 阶乘的末尾0 整除问题 一 阶乘的末尾0IO链接 本题思路 由于本题需要求阶乘的末尾0 由于我们知道2 5 10可以得到一个0 那么我们就可以找出2的数和5的数 但是由于是阶乘 所以5的数量肯定是小于2的数量 因此我们只需要知道5
  • Python中configparser读取配置

    Python中的configparser模块可以帮助开发者轻松地读取和写入配置文件 配置文件通常用于存储应用程序的设置 例如数据库连接信息 API密钥等等 在本篇博客中 我们将介绍如何使用configparser模块来读取和写入配置文件 读
  • leetcode No1833 雪糕的最大数量

    题目 题解 贪心 排序 贪心 顾名思义就是贪到最多的 本题要求一定数额的钱 要获得最多数量的雪糕 那以我们平常人的思维去买 就是 先买最便宜的 然后再买次便宜的 因此我们可以先将数组排序 排序后从头开始遍历 一直算到前i个雪糕价钱之和大于c
  • 高效素数判断

    素数是指在大于1的自然数中 除了1和它本身以外不再有其他因数的自然数 那么 对于任意数N 判断其是否是素数 就需要从 2 N 一一枚举整除判断 若都不能整除 则N为素数 public static boolean isprime int n
  • 魔改并封装 YoloV5 Version7 的 detect.py 成 API接口以供 python 程序使用

    文章目录 Introduction Section 1 起因 Section 2 魔改的思路 Section 3 代码 Part 1 参数部分 Part 2 识别 API Part 3 完整的 DetectAPI py Part 4 修改
  • 免费商品信息查询接口(条形码)

    最近公司有一个需求 扫描商品条形码显示商品信息 原以为国内应该会免费提供接口 理想总是美好的 现实都是残酷的 在阿里云 京东等API开放平台找了一番 基本都是按次调用收费 公司的需求每位用户一天可能多次调用接口 这样一算 成本太高 既然没有
  • thrift介绍及应用(二)—简单应用

    原文 http blog csdn net guxch article details 12162131 六 一个最简单的实例 Thrift文件 demo thirft 来自官网 如下 plain view plain copy struc
  • 力扣160链表相交(c++版)

    力扣160链表相交 c 力扣题目链接 思路 如果两个链表相交 又都不存在环 那么不难想象这两个链表共同构成了一个Y型 相交部分全部都相同 两链表交点处指针相等 声明指针A指向链表A的头结点 指针B指向链表B的头结点 我们求出两个链表的长度
  • 【基础】创建react脚手架

    React day01 Hello world 一 升级node 1 进入官网 https nodejs org en 2 重新下载最新版本 3 重新安装 一直选择next 既会被覆盖 4 输入 node v 查看最新版本 注 window
  • vue项目中用 cdn 优化

    在我们写项目中 优化问题是不容忽视的 尤其是首屏优化更是重中之重 这里介绍两种方法优化方法 cdn和异步加载 异步请看 http blog csdn net gang456789 article details 78224751 1 cdn
  • Fiddler 八个实用技巧

    目录 前言 1 双击Session时 使响应页始终显示到 json tab页 使请求页始终显示到 webform tab页 2 显示每个Session 的请求IP地址 3 修改响应Header中的Content Type 4 右键sessi
  • 2023AE软件、Adobe After Effects安装下载教程

    2023AE软件是一款由Adobe公司开发的视频编辑软件 也被称为Adobe After Effects 它在广告 电影 电视和网络视频等领域广泛应用 用于制作动态图形 特效 合成和其他视觉效果 该软件支持多种视频和音频文件格式 具有丰富的
  • mybatis增删改查

    MyBatis 是一款优秀的持久层框架 它支持定制化 SQL 存储过程以及高级映射 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息 将接口和