在学习了springboot的皮毛之后,我决定用几个项目来帮助自己熟悉springboot,现在我准备使用springboot整合mybatis来做一个简单的用户登陆注册功能,由于本人写的前端太丑,所以这里就只放后端的部分代码供大家参考
整合步骤
步骤一
我们首先肯定需要创建一个springboot的web应用,具体创建方法可以参照我的这篇博客
步骤二
要整合mybatis肯定要导入对应的依赖
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
从这个依赖我们就可以看出,他并不是spring编写的依赖,因为spring编写的springboot依赖都是以spring-boot-starter-xxx开头,它其实是mybatis编写的依赖,那也就是说我们必须要给这个依赖添加版本号
步骤三
到了这一步就该编写相应的代码了,在这里我们首先创建一个数据库表,我们关注的重点是java代码的编写,这里数据库就设计的比较简单,也并没有按照三范式等一些规范的设计
CREATE TABLE user(
id int,
name varchar(10)
);
数据库的字段只有两个,一个是用户id,一个是用户姓名
编写好数据库之后就需要打开我们刚才创建好的springboot项目来编写一些springboot的配置,进入application.properties(也可以是yaml或者yml文件),配置数据库相关的信息
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/user?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123456
如果使用的是数据库5,0以下的版本就不需要给driver中加入cj这一级包
配置好数据库信息后需要编写对应的实体类,类名为User
package com.hty.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data//get set方法
@AllArgsConstructor//有参构造
@NoArgsConstructor//无参构造
public class User{
private Integer id;
private String name;
}
在这个代码中,我使用的注解是lombok中的注解,关于lombok的内容请自行百度,并不难,就是一个工具包
实体类写完之后,我们就可以开始编写我们的mapper层了
首先创建一个mapper包,并在包下创建一个UserMapper的接口和一个UserMapper.xml的文件
UserMapper接口中为了方便我就只写查询的方法,增删改和查询其实大框架是一样的
@Mapper//一定要加入Mapper注解,如果不加入这个注解在后面Controller层使用的时候就会报错
public interface UserMapper{
//查询所有的用户
public List<User> queryAllUser();
}
编写完接口之后我们需要去springboot的配置文件中为我们的实体类起别名,这样方便我们在xml文件中填写,我们在application.properties文件的尾部加上
#实体类起别名
mybatis.type-aliases-package=com.hty.pojo
这里我使用的是包的方式起别名,它会默认将实体类名首字母小写的方式作为别名使用
现在开始编写UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hty.mapper.UserMapper">
<!--开启缓存-->
<cache/>
<select id="queryAllUser" resultType="user">
select * from user;
</select>
</mapper>
在resultType中如果返回值是一个集合,那么直接写这个集合的泛型就可以了
在这里为了方便我就不编写service层了,我就直接使用controller层调用mapper层
Controller层代码
@Controller
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping(value = "/queryAllUser")
@ResponseBody
public List<User> queryAllUser(){
List<User> users = userMapper.queryAllUser();
return users;
}
}
之后启动项目,访问/queryAllUser就可以得到所有的用户信息了
可能会遇到的问题:
如果访问地址之后报错,那么可以尝试给实体类进行序列化,然后在重新启动项目