新建项目
编写程序
创建数据库
本次Demo项目使用Mysql初始内置数据库sakila中的actor表进行演示,表的设计如下:
创建实体类
新建一个domain.actor,构建数据库实体类
创建成功后的文件结构
actor.java
package com.demo.springbootmybatisdemo.domain;
import lombok.Data;
import java.sql.Timestamp;
@Data
public class actor {
private Integer actor_id;
private String first_name;
private String last_name;
private Timestamp last_update;
}
注意last_update的数据类型为sql内置的数据类型Timestamp,需要导入java.sql.Timestamp包。
这里我们使用Lomlok插件的@Data注释,自动创建getter,setter等实体类基本方法。
拓展一点,为什么我们在编写实体类的时候会选择数据对象而不是基本数据类型,主要是基于以下考虑:
-
空值处理: 数据对象可以表示空值(null),而基本数据类型不能。这在需要表示未知或不存在值的情况下非常有用。例如,如果一个字段可能为空,使用基本数据类型就不能清楚地表示这种情况,而使用对应的数据对象可以明确地表示该字段的值是空的。
-
类型安全性: 数据对象是类,因此它们受到Java类型系统的支持。这意味着编译器可以在编译时检查类型,并防止一些常见的错误,例如试图将
Integer
对象赋给Double
变量。而基本数据类型不受类型系统的支持,这可能导致类型转换错误。 -
便于扩展: 使用数据对象使得将来更容易进行代码的扩展和修改。如果您需要在实体类中添加额外的行为或属性,数据对象提供了更多的灵活性和可扩展性。
-
与集合框架的兼容性: Java的集合框架(如
ArrayList
,HashMap
等)只能存储对象,而不能存储基本数据类型。如果您需要将实体类的对象存储在集合中,使用数据对象将更为方便。 -
方便的操作: 数据对象提供了许多方便的方法来执行与基本数据类型相似的操作,例如比较大小,执行算术运算等。
创建mapper接口文件
actorMapper.java
创建sellctAll()方法,无参数,返回类型为以actor对象为元素的列表
package com.demo.springbootmybatisdemo.mapper;
import com.demo.springbootmybatisdemo.domain.actor;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface actorMapper {
public List<actor> sellctAll();
}
创建mapper.xml
这里有两个需要注意的点:
首先,文件和包同时命名的格式和以前不一样了。上面都是packagename.classname,中间用.分割,但是现在使用/分隔,这应该是跟目录创建有关。如果在这里使用.分隔,那么对于多重目录,就只会出现一个目录。
其次,这里文件必须要首字母大写。
这可能是IDEA的问题,起码我暂时并没有在任何XML教程里面看到关于首字母需要大写才能被IDEA识别的说法, 但事实上就是这样发生了。
如果没有首字母大写,会变成普通文件,可能没有办法被识。
下图显示了首字母大写和不大写的文件的区别:
即使我的namespace设置错误,也没有任何的报错。
当以大写字母开头命名时,被识别成功,而且xml插件也应用成功。
注意,为了避免找不到对应的ActorMapper文件,我在这里把创建的接口文件的actorMapper.java重命名为ActorMapper.java。
ActorMapper.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.demo.springbootmybatisdemo.mapper.ActorMapper">
<select id="sellctAll" resultType="com.demo.springbootmybatisdemo.domain.actor">
select * from actor
</select>
</mapper>
编写测试
找到test下面的SpringbootMybatisDemoApplicationTests.java,编写一个测试程序
SpringbootMybatisDemoApplicationTests.java
package com.demo.springbootmybatisdemo;
import com.demo.springbootmybatisdemo.domain.actor;
import com.demo.springbootmybatisdemo.mapper.ActorMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class SpringbootMybatisDemoApplicationTests {
@Autowired
ActorMapper actorMapper;
@Test
void contextLoads() {
}
@Test
void SellctAllActor() {
List<actor> Actorlist = actorMapper.sellctAll();
System.out.println(Actorlist);
}
}
启动测试
在启动测试之前,我们需要修改一下我们的配置文件,配置文件位于main/java/resources下
初始的配置文件后缀为.properties,但是我不是很喜欢.properties的语法,我们这里重构为.yml。他们的区别不大,只是语法结构不同而已。
具体的配置文件内容如下:
启动测试,在控制台看到打印结果