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日

相关文章

  • Sprint Boot @SessionAttributes使用方法详解

    在Spring Boot中,@SessionAttributes注解用于将模型属性存储在会话中,以便在多个请求之间共享。在本文中,我们将详细介绍@SessionAttributes注解的作用和使用方法,并提供两个示例。 @SessionAttributes注解的作用 @SessionAttributes注解用于将模型属性存储在会话中,以便在多个请求之间共享。…

    Java 2023年5月5日
    00
  • JAVA 中Spring的@Async用法总结

    让我为您详细讲解“JAVA 中Spring的@Async用法总结”的攻略吧。 简介 Spring 框架中提供了 @Async 注解,可以实现异步方法调用。当使用 @Async 注解时,Spring 会自动把该方法放在一个线程池中执行,不会阻塞主线程。下面我将为您详细讲解 @Async 注解的用法。 使用步骤 1. 引入依赖 要使用 @Async 注解,需要在…

    Java 2023年5月26日
    00
  • Java实现后台发送及接收json数据的方法示例

    首先我们来详细讲解“Java实现后台发送及接收json数据的方法示例”的攻略。在实现后台发送及接收json数据的过程中,可以使用Java中的两种方式:使用HttpURLConnection实现 JsonRequest 和使用HttpClient实现 Json 请求。下面分别来介绍这两种方式的具体实现。 使用HttpURLConnection实现JsonReq…

    Java 2023年5月26日
    00
  • 浅谈javaSE 面向对象(Object类toString)

    浅谈JavaSE面向对象(Object类toString) 什么是面向对象? 面向对象(OOP)是一种计算机编程方法,它基于对象、类和封装等概念。在面向对象编程中,使用对象来表示现实世界的实体,并使用类来描述对象的属性和行为。封装则是指:将数据和方法组合成类并隐藏其实现细节的过程。 Object类和toString方法 在Java中,所有的对象都继承自Obj…

    Java 2023年5月26日
    00
  • PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】

    PHP获取163、gmail、126等邮箱联系人地址【已测试2009.10.10】 前置条件 要获取邮箱联系人地址,需要掌握以下知识: 熟悉PHP语言; 熟悉邮箱联系人地址的获取方式; 了解邮箱的认证机制; 了解网络请求的相关知识。 获取163邮箱联系人地址 步骤一:登录163邮箱 使用curl库,向163发起登录请求,获取登录后的cookie。代码如下: …

    Java 2023年6月16日
    00
  • 在idea中将创建的java web项目部署到Tomcat中的过程图文详解

    下面我将为您详细讲解在Idea中将创建的Java Web项目部署到Tomcat中的完整攻略。 准备工作 在开始部署之前,我们需要先进行如下准备工作: 安装JDK环境 安装Tomcat服务器 安装Idea开发工具 创建Java Web项目 在Idea中创建Java Web项目的步骤如下: 打开Idea开发工具 点击”File” -> “New” -&gt…

    Java 2023年6月2日
    00
  • Java Object定义三个点实现代码

    关于“Java Object定义三个点实现代码”的攻略,我来给您详细解释一下。 什么是 Java Object 定义三个点? Java Object 定义三个点是指 Java 对象中定义的三个点:hashCode()、equals() 和 toString()。这三个点是 Java 的基本组成部分,很多情况下需要通过它们来实现对象的比较、打印和哈希等操作。 …

    Java 2023年5月26日
    00
  • struts2简介_动力节点Java学院整理

    Struts2简介 简介 Apache Struts 2 是一款基于 Java EE 的Web应用程序开发框架,它是Struts的后继者。Apache Struts 2 是一款基于MVC设计模式的框架。 特点 以下是Struts2的特点: Struts 2 是一个MVC框架,通过分离应用程序的模型、视图和控制器,为应用程序提供了松散耦合。 Struts 2跨…

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