在笔者学习Mybatis plus的过程中,想通过Mybatis plus写一个连接数据库的小实验。
程序目录结构如下
原理
这个数据库连接测试的原理也十分简单。
- 在资源包下配置application.properties文件,这是数据库连接配置包,必须自己配置
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus //指定数据库的表,jdbc:mysql://相当于http://
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver //数据库引擎
- 通过pojo包下的实体类User来完成对数据库字段的控制
package com.hoizer.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data //gettersetter注解
@AllArgsConstructor //有参构造函数注解
@NoArgsConstructor //无参构造函数注解
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
- 在mapper包中设置一个Usermapper接口,继承于MP中的BaseMapper接口。并且将实体类User注入mapper来进行CRUD操作BaseMapper中定义了很多数据库基础的CRUD操作,解决了在Mybatis中需要在Mapper.xml中自己写CRUD操作的痛点,提高了开发效率
package com.hoizer.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hoizer.pojo.User;
import org.springframework.stereotype.Repository;
@Repository //持久层注解
public interface UserMapper extends BaseMapper<User>//注入实体类
{
}
- 因为是自己构建了一个子模块,所以需要在mapper包的相同目录下新建一个主启动类HoizerApplication。需要注解配置扫描的mapper的包目录
package com.hoizer;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.hoizer.mapper")
@SpringBootApplication
public class HoizerApplication {
public static void main(String[] args) {
SpringApplication.run(HoizerApplication.class,args);
}
}
- 在测试类中对程序进行测试,我选择了一个简单的select * from User的测试
import com.hoizer.mapper.UserMapper;
import com.hoizer.pojo.User;
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
public class MyTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect(){
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
}
运行后,程序发生了错误
问题原因
测试类中的的启动类应该和HoizerAplication在一个逻辑上相同的包路径下,即com.hoizer.MyTest