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基本数据类型与对应的包装类(动力节点java学院整理)

    接下来我将为您详细讲解Java基本数据类型与对应的包装类的相关知识,以下是具体的内容和示例: 一、Java基本数据类型 Java基本数据类型共有8种,它们分别是: 名称 关键字 占用内存 取值范围 整型 byte 1字节 [-128, 127] short 2字节 [-32768, 32767] int 4字节 [-2147483648, 214748364…

    Java 2023年5月27日
    00
  • SpringBoot整合SpringSecurity实现权限控制之实现多标签页

    下面是“SpringBoot整合SpringSecurity实现权限控制之实现多标签页”的完整攻略: 环境搭建 首先,您需要在本地环境中安装下列软件和工具: JDK 1.8或更高版本 Maven 3.2或更高版本 IntelliJ IDEA或 Eclipse 其次,在pom.xml中添加Spring Security和Thymeleaf依赖: <dep…

    Java 2023年5月20日
    00
  • spring事务传播的Propagation.REQUIRES_NEW以及NEVER MANDATORY验证,及其失效的诡异问题

    NEVER 不使用事务,如果当前事务存在,则抛出异常 验证: @Service public class PrService { @Autowired PrDao dao; @Transactional public void savea() { dao.a();//保存第一条数据 saveb(); } @Transactional(propagation …

    Java 2023年5月8日
    00
  • Java 二分法检索算法代码实现详解

    Java 二分法检索算法代码实现详解 什么是二分法检索算法 二分法(Binary Search)又称折半查找法,它要求待查找的序列是有序的,每次查找都取中间位置的值进行比较,然后将查找的区域缩小为左边或右边的一半,直到找到目标值为止。 代码实现 下方是 Java 语言实现的二分法算法代码: public static int binarySearch(int…

    Java 2023年5月19日
    00
  • jquery popupDialog 使用 加载jsp页面的方法

    下面是使用jquery popupDialog加载jsp页面的完整攻略步骤: 步骤一:引入jQuery popupDialog插件库 首先需要在html页面中引入jquery popupDialog插件库,这里可以使用CDN方式或下载本地文件。 <!– 引入jquery库 –> <script src="https://cdn…

    Java 2023年6月15日
    00
  • 如何HttpServletRequest文件对象并储存

    首先需要明确的是,HttpServletRequest对象是Java Servlet API提供的一个接口对象,它代表了一个HTTP请求。若想将HttpServletRequest对象储存到磁盘文件中,就需要进行如下步骤: Step 1:获取HttpServletRequest对象 在Servlet中,HttpServletRequest对象可以通过doGe…

    Java 2023年6月15日
    00
  • Spring MVC如何实现接口Controller定义控制器

    在 Spring MVC 中,我们可以通过定义控制器来处理请求。控制器是一个 Java 类,用于处理请求并返回响应。在 Spring MVC 中,我们可以使用接口 Controller 来定义控制器。本文将详细讲解 Spring MVC 如何实现接口 Controller 定义控制器的完整攻略,包括如何创建控制器、如何处理请求、如何返回响应等。 创建控制器 …

    Java 2023年5月18日
    00
  • Java日常练习题,每天进步一点点(48)

    该题目是一道Java语言的练习题,侧重于帮助学习者通过自我练习提高Java编程能力,增强对Java知识的掌握和理解。 本题主要包含以下几个部分: 题目描述:阐述了本题需要实现的功能要求以及细节要求,一般以文字的形式呈现。 代码说明:该部分通常提供的是代码的框架,可能包含已经定义好的变量、方法和类等基本的代码结构,需要学习者根据题目要求进行补充和完善。 解题思…

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