第一步:在SpringBoot中集成
略
第二步:基本使用
根据自身项目中某一模块相关表设计,了解具体表结构,即表和表之间的关系,和表的属性。
可以后台用户表ums_admin为例,编写一个根据ID查询用户的方法,先创建实体类UmsAdmin。
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();
}
问题解决。