【JavaWeb】MyBatis使用教程

第一步:在SpringBoot中集成

第二步:基本使用

根据自身项目中某一模块相关表设计,了解具体表结构,即表和表之间的关系,和表的属性。

可以后台用户表ums_admin为例,编写一个根据ID查询用户的方法,先创建实体类UmsAdmin
ums_admin表
SQL语句答疑:
AUTO_INCREMENT字段?
AUTO_INCREMENT 就是自增列,具体功能是当需要产生唯一标识符或顺序值时,可设置自增长,一般使用于一张表中的主键。
(1)一个表最多只能有一个自增长列
(2)自增长列约束的列必须是键列(主键列,唯一键列)
(3)自增约束的列的数据类型必须是整数类型
(4)如果自增列指定了 0 和 null,会在当前最大值的基础上自增
参考博客原文链接:https://blog.csdn.net/weixin_59131972/article/details/128510419
下面代码为对应实体类:

public class UmsAdmin implements Serializable {
    private Long id;

    private String username;

    private String password;

    @ApiModelProperty(value = "头像")
    private String icon;

    @ApiModelProperty(value = "邮箱")
    private String email;

    @ApiModelProperty(value = "昵称")
    private String nickName;

    @ApiModelProperty(value = "备注信息")
    private String note;

    @ApiModelProperty(value = "创建时间")
    private Date createTime;

    @ApiModelProperty(value = "最后登录时间")
    private Date loginTime;

    @ApiModelProperty(value = "帐号启用状态:0->禁用;1->启用")
    private Integer status;
}

SpringBoot常用注解答疑:
在Java中,@ApiModel和@ApiModelProperty是Swagger框架(用于API文档的工具)提供的注解,用于增强API文档的生成和展示。这两者搭配使用更佳。
@ApiModel注解用于对Java类进行标注,表示这个类是一个Swagger模型(Model)。通常用于描述一个数据对象或DTO(Data Transfer Object)。
@ApiModelProperty注解用于对Java类的属性进行标注,表示这个属性是一个Swagger模型的属性。它可以用于描述属性的名称、说明、数据类型等信息。
疑问:为什么private String username对象没有API注释呢?

然后创建数据操作的接口UmsAdminDao,再添加对应的方法。

package com.macro.mall.malltinyb.dao;

import com.macro.mall.malltinyb.model.UmsAdmin;
import org.springframework.stereotype.Repository;

@Repository
public interface UmsAdminDao {

    /**
     * 根据ID查询用户
     */
    UmsAdmin selectByIdSimple(Long id);
}

SpringBoot常用注解答疑:
@Repository用于修饰dao层的组件,dao层组件专注于系统数据的处理,例如数据库中的数据,同样会被组件扫描并生成实例化对象。

再创建xml文件UmsAdminDao.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">
<mapper namespace="com.macro.mall.malltinyb.dao.UmsAdminDao">

    <select id="selectByIdSimple" resultType="com.macro.mall.malltinyb.model.UmsAdmin">
        select * from ums_admin where id = #{id}
    </select>
</mapper>

说明: select标签标识select查询,id对应接口的方法名,resultType对应方法返回对象的类型,#{id} 井号是占位符,就可以引用到方法中对应的参数。

然后编写测试类,注入Dao,调用Dao方法来进行测试。

package com.macro.mall.malltinyb;

import com.macro.mall.malltinyb.dao.UmsAdminDao;
import com.macro.mall.malltinyb.model.UmsAdmin;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;



@SpringBootTest
public class MyBatisBaseTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(MyBatisBaseTest.class);

    @Autowired
    private UmsAdminDao umsAdminDao;

    @Test
    void testSelectByIdSimple(){
        UmsAdmin umsAdmin = umsAdminDao.selectByIdSimple(1L);
        LOGGER.info("testSelectByIdSimple result={}",umsAdmin);
    }

}

解决疑问:测试类答应出来的umsAdmin对象为一个代号,如下图所示。即无法答应出具体信息。
在这里插入图片描述
而我想要的结果为:
在这里插入图片描述
解决方法:
在定义一个类时,如果没有使用Lombok类似功能的插件,最好按照JDK文档的建议,实现Object类中的toString()函数,这样在打印日志对象的时候,不会出现打印出“Person@17d0685f” 这样不清不楚的信息,而且非常不利于排查问题,当你排查问题正需要看到某个对象的信息,却发现这样的日志输出,恐怕会长叹一声吧,所以最好还是按照规范来,避免这种情况。

参考博文:原文链接https://blog.csdn.net/qq_22076345/article/details/81433945

于是在model下对应的UmsAdmin类中添加tostring方法:


    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", id=").append(id);
        sb.append(", username=").append(username);
        sb.append(", password=").append(password);
        sb.append(", icon=").append(icon);
        sb.append(", email=").append(email);
        sb.append(", nickName=").append(nickName);
        sb.append(", note=").append(note);
        sb.append(", createTime=").append(createTime);
        sb.append(", loginTime=").append(loginTime);
        sb.append(", status=").append(status);
        sb.append(", serialVersionUID=").append(serialVersionUID);
        sb.append("]");
        return sb.toString();
    }

问题解决。

  • 24
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值