Mybatis基础---------增删查改

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

目录结构

Mybatis基础---------增删查改,mybatis

增删改

1、新建工具类用来获取会话对象
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.io.Resources;

import java.io.IOException;
import java.io.InputStream;

/**
 * 静态变量:使用 static 关键字声明的变量是类级别的,所有实例共享相同的静态变量。这意味着无论创建多少个对象,它们都将共享相同的静态变量值。
 * public class MyClass {
 *     static int staticVar; // 静态变量,所有实例共享
 * }
 * 静态方法:使用 static 关键字声明的方法是类级别的,可以通过类名直接调用,无需实例化对象。这些方法通常用于执行与类本身相关的操作,而不是特定实例的操作。
 * public class MyClass {
 *     static void staticMethod() {
 *         // 静态方法
 *     }
 * }
 * 静态代码块:使用 static 关键字标识的代码块在类加载时执行,通常用于进行类级别的初始化操作。
 */
public class SqlSessionUtil {
    static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//加载输入流创建会话工厂
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public  static SqlSession openSession(){
        return sqlSessionFactory.openSession();
    }

}
2、加入junit依赖
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>
3、通过映射传递属性

之前的sql语句全部写在了映射文件中,然而在实际应用时是通过映射传递属性的,也就是java对象对应sql语句中的占位符属性,属性名一般和java对象中的属性名相同,我们只需要用#{}作为占位符,占位符名称与java对象属性名一致即可。

如下实体类:

import java.util.Date;
public class User {
    private Integer id;
    private String username;
    private String password;
    private String salt;
    private String email;
    private int type;
    private int status;
    private String activationCode;
    private String headerUrl;
    private Date createTime;


    public int getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSalt() {
        return salt;
    }

    public void setSalt(String salt) {
        this.salt = salt;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getActivationCode() {
        return activationCode;
    }

    public void setActivationCode(String activationCode) {
        this.activationCode = activationCode;
    }

    public String getHeaderUrl() {
        return headerUrl;
    }

    public void setHeaderUrl(String headerUrl) {
        this.headerUrl = headerUrl;
    }

    public User(Integer id, String username, String password, String salt, String email, int type, int status, String activationCode, String headerUrl, Date createTime) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.salt = salt;
        this.email = email;
        this.type = type;
        this.status = status;
        this.activationCode = activationCode;
        this.headerUrl = headerUrl;
        this.createTime = createTime;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

映射文件

<insert id="insertUser">
           INSERT INTO users (user_id, username, password, salt, email, type, status, activation_Code, header_url, create_time)
VALUES (null, #{username}, #{password}, #{salt}, #{email}, #{type}, #{status}, #{activationCode}, #{headerUrl}, #{createTime});
</insert>

测试:

@Test
public  void insertTest(){
    SqlSession sqlSession = SqlSessionUtil.openSession();
    User user = new User(null, "JohnDoe", "password", "salt123", "johndoe@example.com", 1, 1, "abcxyz", "https://example.com/image.jpg", new Date());
    //这里传入user实体,mybatis会自动将user属性值填充到sql语句中的占位符
    sqlSession.insert("insertUser",user);

    sqlSession.commit();
    sqlSession.close();//关闭会话
}

Mybatis基础---------增删查改,mybatis

测试下修改和删除

<delete id="deleteUser">
    delete  from users where user_id=#{id};
</delete>
<update id="updateUser">
    UPDATE users
    SET username = #{username},
        password = #{password},
        salt = #{salt},
        email = #{email},
        type = #{type},
        status = #{status},
        activation_Code = #{activationCode},
        header_Url = #{headerUrl},
        create_Time = #{createTime}
   WHERE user_id = #{id};
</update>
@Test//修改
public  void updateTest(){
    SqlSession sqlSession = SqlSessionUtil.openSession();
    User user = new User(2, "DDDD", "password", "salt123", "johndoe@example.com", 1, 1, "abcxyz", "https://example.com/image.jpg", new Date());

    sqlSession.insert("updateUser",user);
    sqlSession.commit();
    sqlSession.close();//关闭会话
}
@Test//删除
public  void deleteTest(){
    SqlSession sqlSession = SqlSessionUtil.openSession();
    sqlSession.insert("deleteUser",2);//当sql只有一个占位符时,传递的参数会直接赋值到该占位符中,与占位符名称无关
    sqlSession.commit();
    sqlSession.close();//关闭会话
}

Mybatis基础---------增删查改,mybatis

查询

获取结果集,通过select标签中的resultType参数来指定查询结果封装到对应的实体类中,如果实体类中的属性与数据库表中属性不一致,可以使用as将对应数据库表中列名重命名并与实体类一致。

<select id="selectOneUser" resultType="User">
    select user_id as id, username, password, salt, email, type, status, activation_Code as activationCode, header_url as headerUrl, create_time as createTime from users where user_id=#{id};
</select>

Mybatis基础---------增删查改,mybatis

或者采用另一种方式:通过在<resultMap> 中使用 <result> 标签来进行手动映射。

column--property==>数据库列名--实体类属性名

<resultMap id="userResultMap" type="User">
    <id property="id" column="user_id"/>
    <result property="username" column="username"/>
    <result property="password" column="password"/>
    <result property="salt" column="salt"/>
    <result property="email" column="email"/>
    <result property="type" column="type"/>
    <result property="status" column="status"/>
    <result property="activationCode" column="activation_Code"/>
    <result property="headerUrl" column="header_url"/>
    <result property="create_time" column="createTime"/>
</resultMap>
<select id="selectUser" resultMap="userResultMap">
    select  * from users;
</select>
@Test
public void selectTest(){
    SqlSession sqlSession = SqlSessionUtil.openSession();
    List<User> selectUser = sqlSession.selectList("selectUser");
    for (User user : selectUser) {
        System.out.println(user.toString());
    }
    sqlSession.commit();
    sqlSession.close();//关闭会话
}

Mybatis基础---------增删查改,mybatis

这里说明:不管是查询单个记录还多个记录,设置返回封装映射时,resultType应该设置为实体类或者List<实体类>型中的实体类。设置手动映射resultMapper同样如此。文章来源地址https://www.toymoban.com/news/detail-798051.html

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

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

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

相关文章

  • java springboot整合MyBatis演示增删查改操作

    前面我的文章 java springboot整合MyBatis做数据库查询操作讲述了整合springboot整合MyBatis 做了根据id查询的语句 那么 我们现在按它搭建的项目继续 我们在staffDao中添加一个insert函数 参考代码如下 Insert需要手动导包 import org.apache.ibatis.annotations.Insert; 这就是一个添加语句函数 返回一

    2024年02月11日
    浏览(50)
  • MySQL基础——增删查改(基础)

    目录 1.前言 2.铺垫 3.正片   经过前面一段时间数据结构基础的学习,现在我们终于来到了MySQL的学习。我们先简单介绍一下什么是数据库。 为了解决 海量文件的存储与管理 问题,专家们设计出更加利于管理数据的软件——数据库,它能更有效的管理数据。数据 库可以提供远

    2024年02月06日
    浏览(46)
  • 【MySQL】增删查改基础

    需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。    目录 一、Create(创建) 1、insert(插入) 1.1单行数据插入 1.2多行数据插入 1.3插入或者替换更新 2、replace(替换) 二、Retrieve(读取

    2024年02月09日
    浏览(50)
  • [ MySQL ] — 基础增删查改的使用

    目录 表的增删查改 Create 单行数据 全列插入 多行数据 全列插入 多行数据 指定列插入 不存在插入存在则更新 替换  Retrieve SELECT 列   全列查询 指定列查询 查询字段为表达式  为查询结果指定别名 结果去重 WHERE 条件  结果排序 筛选结果分页 Update  Delete  删除数据 截断表

    2024年02月12日
    浏览(55)
  • Elasticsearch基础学习(Java API 实现增删查改)

    ElasticSearch,简称为ES, ES是一个开源的高扩展的分布式全文搜索引擎。它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。 物理设计: ElasticSearch 在后台把每个索引划分成多个分片,每份分片可以在集群中的不同服务器间迁移

    2024年02月01日
    浏览(82)
  • 【单链表】的增删查改

    🖊作者 : Djx_hmbb 📘专栏 : 数据结构 😆今日分享 : “Onc in a blu moon” : “罕见的,千载难逢的” (出现在19世纪,指的是\\\"在一个月内出现的第二次圆月”,这种现象每隔32个月发生一次。) 感谢家人的阅读,若有不准确的地方 欢迎在评论区指正!

    2023年04月27日
    浏览(56)
  • 详解MySQL增删查改

    众所周知,MySQL是非常重要的数据库语言,下面我们来回顾一下mysql的增删查改吧 MySQL创建数据库: MySQL删除数据库: MySQL删除数据库 MySQL创建数据库 MySQL增加字段 MySQL修改字段类型 MySQL修改字段名称 MySQL删除字段类型 MySQL增加字段且非空依赖 MySQL修改字段依赖 MySQL添加主键依

    2024年02月20日
    浏览(50)
  • MySQL——表的增删查改

    目录 一.Create(创建) 1.单行数据 + 全列插入 2.多行数据 + 指定列插入 3.插入否则更新 4. 替换 二.Retrieve(读取) 1. select 列 查询 2.where 条件 3.结果排序 4.筛选分页结果 三.Update (修改) 四.Delete(删除) 1.删除数据 2.删除整张表数据 3.截断表 4.去重表数据 五.聚合函数 六.g

    2024年02月04日
    浏览(67)
  • 【MySql】表的增删查改

    说明: field 表示列名 datatype 表示列的类型 character set 字符集,如果没有指定字符集,则以所在数据库的字符集为准 collate 校验规则,如果没有指定校验规则,则以所在数据库的校验规则为准 现在创建一张表user1: 创建表user2: 存储引擎不同,此时我们查看user1和user2:建表的时候

    2024年02月08日
    浏览(53)
  • Spring boot增删查改

    前言 一、项目结构 二、创建项目、运行环境 三、配置数据库 四、Model 五、Repository 六、Service 1、接口类 2、实现类 七、Controller 八、Web页面 1、index 2、new_food 3、update_food 九、Web页面展示  十、总结 Spring 是一个开源框架,可以轻松创建独立的、生产级的基于 Spring 的应用程序

    2024年02月07日
    浏览(31)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包