MyBatis入门之增删改查+数据库字段和实体字段不一致问题处理方法

这篇文章是一篇关于使用MyBatis进行基本的数据增删改查操作的入门指南,同时还将介绍当数据库字段名和实体类属性名不一致时的解决方法。整个过程将分为以下几个部分:

1.环境搭建
2.创建数据库和表格
3.编写实体类
4.编写Mapper接口
5.编写Mapper对应的SQL语句
6.测试代码
7.数据库字段与实体字段不一致处理方法

环境搭建

首先,在进行本教程之前,你需要确保已经正确安装了JDK和MyBatis的环境。并且将MyBatis的jar包以及连接数据库的驱动包加入到项目依赖中。

创建数据库和表格

接下来,我们需要新建一个数据库和一张表来存储我们的数据。在本篇文章中,我们将创建一个名为“test”的数据库,并在其中创建一张名为“users”的表格,表格中包含以下字段:

  • id:自增长的id,主键
  • name:用户姓名,varchar型,长度为20
  • age:用户年龄,int型
  • sex:用户性别,int型,0表示男性,1表示女性
  • address:用户住址,varchar型,长度为100

创建SQL语句如下:

CREATE DATABASE test;  -- 创建数据库

USE test;  -- 选择要使用的数据库

CREATE TABLE users (
  id INT(11) NOT NULL AUTO_INCREMENT COMMENT 'ID',  -- 自增长的ID
  name VARCHAR(20) NOT NULL COMMENT '姓名',  -- 用户姓名,长度为20
  age INT(3) NOT NULL COMMENT '年龄',  -- 用户年龄
  sex INT(1) NOT NULL COMMENT '性别(0:男,1:女)',  -- 用户性别,0表示男,1表示女
  address VARCHAR(100) NOT NULL COMMENT '住址',  -- 用户住址,长度为100
  PRIMARY KEY (id)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

编写实体类

我们需要创建一个对应于表格中每个字段的Java类。因为表格中有五个字段,因此我们需要同时创建一个名为“Users”的类,我们可以将其存储在src/main/java/目录下。

Users.java内容如下:

public class Users {
    private int id;
    private String name;
    private int age;
    private int sex;
    private String address;
    // 省略get和set方法
}

代码中的类属性名需要与表格中的字段名一一对应,并且需要有对应的get和set方法,因为在MyBatis中会自动调用这些方法来映射数据库和Java对象。

编写Mapper接口

Mapper接口是MyBatis框架中的一个重要的部分,它用于定义这个类将要进行的CRUD操作。

我们需要创建一个名为UserMapper.java的接口,并将其置于src/main/java/目录下。Mapper接口中包含了增删改查的操作,并且每个操作都需要定义对应的SQL语句。

UserMapper.java内容如下:

import java.util.List;

public interface UserMapper {
    void addUser(Users user);
    void deleteUserById(int userId);
    void updateUserById(Users user);
    Users getUserById(int userId);
    List<Users> getAllUsers();
}

可以看到在这个Mapper接口中,我们为增删改查操作分别定义了一个方法。这些方法的名称需要与XML文件中定义的SQL语句名称一一对应,因为在MyBatis中,系统会按照方法名自动寻找对应的SQL语句。

编写Mapper对应的SQL语句

接下来,我们将为每个Mapper方法编写对应的SQL语句。这些SQL语句将被存储在XML文件中,并且将文件存储在src/main/resources/mapper/目录下。

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.example.demo.dao.UserMapper">
    <insert id="addUser" parameterType="com.example.demo.entity.Users">
        INSERT INTO users VALUES(
            #{id},
            #{name},
            #{age},
            #{sex},
            #{address}
        )
    </insert>

    <delete id="deleteUserById" parameterType="int">
        DELETE FROM users WHERE id=#{userId}
    </delete>

    <update id="updateUserById" parameterType="com.example.demo.entity.Users">
        UPDATE users SET
            name=#{name},
            age=#{age},
            sex=#{sex},
            address=#{address}
        WHERE id=#{id}
    </update>

    <select id="getUserById" parameterType="int" resultType="com.example.demo.entity.Users">
        SELECT * FROM users WHERE id=#{userId}
    </select>

    <select id="getAllUsers" resultType="com.example.demo.entity.Users">
        SELECT * FROM users
    </select>
</mapper>

这里需要注意的是,Mapper中定义的方法与XML文件中的SQL语句名称也需要一一对应,并且XML文件中的parameterType和resultType需要与Mapper接口中的方法参数类型和返回值类型一致。

测试代码

我们已经完成了包括实体类、Mapper接口和XML文件中的代码编写了。现在,我们将编写测试代码,并用它来测试系统在使用MyBatis框架时是否能够正确地执行CRUD操作。代码应该类似于下面的内容:

import com.example.demo.dao.UserMapper;
import com.example.demo.entity.Users;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class UserService {
    @Resource
    private UserMapper userMapper;
    @Resource
    private SqlSessionFactory sqlSessionFactory;

    public void addUser(Users user) {
        userMapper.addUser(user);
        // sqlSessionFactory.openSession().commit(); // 提交事务
    }

     public void deleteUserById(int userId) {
         userMapper.deleteUserById(userId);
         // sqlSession.commit();
     }

     public void updateUserById(Users user) {
         userMapper.updateUserById(user);
         // sqlSession.commit();
     }

     public Users getUserById(int userId) {
         return userMapper.getUserById(userId);
     }

     public List<Users> getAllUsers() {
         return userMapper.getAllUsers();
     }
}

这个测试类中,我们注入了UserMapper接口,然后使用它的方法来进行增删改查操作。

数据库字段与实体字段不一致处理方法

有时候,数据库中的字段名与Java类中属性名并不完全一致。在这种情况下,我们需要修改Mapper.xml中的SQL语句,以使其正确地映射到Java类属性上。

例如,在上面的例子中,我们的实体类属性名都是小写字母,而数据库中所有字段名都是大写字母。因此我们需要手动修改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.example.demo.dao.UserMapper">
    <insert id="addUser" parameterType="com.example.demo.entity.Users">
        INSERT INTO users VALUES(
            #{id},
            #{name,jdbcType=VARCHAR},
            #{age,jdbcType=INTEGER},
            #{sex,jdbcType=INTEGER},
            #{address,jdbcType=VARCHAR}
        )
    </insert>

    <delete id="deleteUserById" parameterType="int">
        DELETE FROM users WHERE id=#{userId}
    </delete>

    <update id="updateUserById" parameterType="com.example.demo.entity.Users">
        UPDATE users SET
            name=#{name,jdbcType=VARCHAR},
            age=#{age,jdbcType=INTEGER},
            sex=#{sex,jdbcType=INTEGER},
            address=#{address,jdbcType=VARCHAR}
        WHERE id=#{id}
    </update>

    <select id="getUserById" parameterType="int" resultType="com.example.demo.entity.Users">
        SELECT * FROM users WHERE id=#{userId}
    </select>

    <select id="getAllUsers" resultType="com.example.demo.entity.Users">
        SELECT * FROM users
    </select>
</mapper>

通过在Mapper.xml中使用“jdbcType”属性来设置类型,即可解决字段名不一致的问题。

这就是一个关于使用MyBatis框架进行基本CRUD操作的指南,同时解决了当数据库字段名和Java类属性名不一致时的问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MyBatis入门之增删改查+数据库字段和实体字段不一致问题处理方法 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java try()语句实现try-with-resources异常管理机制操作

    Java try-with-resources 异常管理机制 Java try-with-resources 是在 Java 7 版本中引入的语言特性,它通过自动关闭资源对象来释放资源(如文件、网络连接等),省去了我们手动关闭这些资源的繁琐过程,同时也增强了异常处理的机制。 这个语法结构就是在 try 块内初始化资源,Java 会自动将其关闭,它是基于 Au…

    Java 2023年5月27日
    00
  • springboot 启动项目打印接口列表的实现

    Spring Boot 启动项目打印接口列表的实现 在本文中,我们将详细讲解如何使用Spring Boot实现在应用程序启动时打印接口列表。我们将介绍两种不同的方法来实现这个目标,并提供示例来说明如何使用这些方法。 方法一:使用Endpoint Spring Boot提供了Endpoint接口,它可以用于公开应用程序的一些信息。我们可以使用这个接口来实现在应…

    Java 2023年5月18日
    00
  • Eclipse添加xml文件提示及Hibernate配置学习

    让我为您详细讲解“Eclipse添加xml文件提示及Hibernate配置学习”的完整攻略。 Eclipse添加xml文件提示 问题描述 在Eclipse中,当我们需要添加一个XML文件时,常常会发现Eclipse没有提供对应的文件类型提示,让我们很难找到正确的文件类型进行添加。所以本文将为大家介绍如何在Eclipse中添加XML文件类型提示功能。 解决方法…

    Java 2023年5月20日
    00
  • List集合多线程并发条件下不安全如何解决

    List集合在多线程并发条件下存在线程安全问题,主要是由于多个线程在同时对List进行增删改操作,会产生竞争条件。在此情况下,如果不进行处理,会导致List集合数据不一致或者抛出ConcurrentModificationException异常等问题。下面是解决List集合多线程并发不安全的完整攻略: 方案1:使用线程安全的List集合 Java提供了多个线…

    Java 2023年5月26日
    00
  • 详解servlet配置load-on-startup的作用

    下面是详解servlet配置load-on-startup的作用的完整攻略: 什么是load-on-startup 在Java Web中,一个servlet通常在客户端请求它时才会被加载并初始化,但某些时候我们希望它在服务器启动时就被加载和初始化,而不是在客户端请求它时再进行初始化。load-on-startup就是一种配置方式,用来在服务器启动时就加载和初…

    Java 2023年6月15日
    00
  • JavaWeb实现文件的上传与下载

    JavaWeb实现文件的上传与下载 文件上传的实现步骤 文件上传指的是将本地的文件信息上传到服务器中的指定目录。JavaWeb 中实现文件上传需要以下步骤: 创建表单,设置 enctype=”multipart/form-data” 属性,表示表单中包含文件上传的数据; 在服务器端获取上传的文件信息,通常使用 request.getPart() 方法获取上传…

    Java 2023年5月31日
    00
  • Java异常处理try catch的基本使用

    Java异常处理try catch的基本使用 在Java编程中,程序执行过程中可能出现各种错误,例如文件找不到,数组越界等,这些错误被称为异常。异常处理是Java编程中最基本的编程技巧之一。Java异常处理try catch提供了一种结构化的异常处理方法,可以使程序更加健壮,便于维护。 什么是Java异常处理try catch Java异常处理try cat…

    Java 2023年5月27日
    00
  • Java web实现头像上传以及读取显示

    Java Web 实现头像上传以及读取显示的攻略可以分为以下几个步骤: 在前端页面设计上传头像的区域,使用表单提交图片数据到后端。 在后端接收到图片数据后,进行图片的存储和保存。 在后端读取已经保存的图片,将其以二进制形式返回给前端并进行显示。 下面我们对每个步骤进行详细的讲解。 设计头像上传区域 在 HTML 页面中添加一个表单,来选择并提交要上传的头像图…

    Java 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部