SpringBoot集成mybatis笔记
- 1、总体过程描述
- 2、搭建流程
- 2.1 建库表
- 2.2 新建boot项目
- 2.3 配置文件内容
- 2.4 编码
- 3、总结
1、总体过程描述
boot集成mybatis,实现简单crud
1、设计库 表 字段
2、新建boot项目,导入依赖(mysql驱动、mybatis、lombok等)
3、配置文件
数据库链接
mapper文件路径、实体类路径
4、新建entity、mapper、service(Impl)、controller 等包
mapper里面需要加上注解 @Mapper @Repository
serviceImpl里面加上 @Service
controller 里面加上Controller(RestController) RequestMapping等注解
启动类里配置 @MapperScan("") //需要扫描的mapper
ps:注意点
1、虽然过程很简单,不要直接去controller测试,如果出现bug 在浏览器会返回404,问题较难排查。
建议先经过boot自带的test测试,通过测试再去controller进行,由下及上比较稳,问题也容易排查。
自己做测试的时候直接以为很简单,一路顺畅 但是结果很打脸,找bug也比较难找,排查问题的能力还是不够。最后结果发现是配置文件mapper路径错了....
2、搭建流程
2.1 建库表
2.2 新建boot项目
- 新建项目,导入依赖(spring web、mysql驱动、mybatis、lombok等依赖)
- pom文件
<dependencies>
<!--starter test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--mybatis mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
2.3 配置文件内容
在springboot中,可以使用不同的配置文件,比如开发、生产环境等,然后在
application.properties中指定使用哪个文件
spring.profiles.active=dev
这里就是一个小demo,不做过多的指定,采用默认的配置文件
- application.properties
# 数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root
#mapper.xml文件路径
mybatis.mapper-locations=classpath:mapper/*.xml
# pojo实体路径
mybatis.type-aliases-package=com.example.lc.entity
#“logging.level.”为前缀,“com.example.lc.mapper”为Mapper接口所在的包路径。对应的value值为日志的级别。
logging.level.com.example.lc.mapper=debug
2.4 编码
在启动类的同级目录下 新建entity、mapper、service(Impl)、controller等包名
启动类上标记扫描的mapper路径
@MapperScan("com.example.lc.mapper") //扫描的mapper
@SpringBootApplication
public class Lc3Application {
public static void main(String[] args) {
SpringApplication.run(Lc3Application.class, args);
}
}
一、新建实体 User
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private Integer id;
private String name;
private String password;
private String perms;
}
二、新建mapper接口 UserMapper
@Mapper
@Repository
public interface UserMapper {
int insert(User user);
int delete(Integer id);
int update(User user);
User queryForOne(@Param("id") Integer id);
List<User> queryForList();
}
在Rescources目录下新建 mapper/UserMapper.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.example.lc.mapper.UserMapper">
<resultMap id="BaseResultMap" type="com.test.lc4.entity.User">
<result column="id" jdbcType="INTEGER" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="perms" jdbcType="VARCHAR" property="perms" />
</resultMap>
<insert id="insert" parameterType="com.example.lc3.entity.User">
insert into `user`(id, name, password) VALUE (#{id},#{name},#{password})
</insert>
<update id="update" parameterType="com.example.lc3.entity.User">
update `user` set name = #{name} ,password = #{password} where id = #{id}
</update>
<delete id="delete" parameterType="int">
delete from `user` where id = #{id}
</delete>
<select id="queryForOne" resultType="com.example.lc3.entity.User">
select id,`name`,password from `user` where id = #{id}
</select>
<select id="queryForList" resultType="com.example.lc3.entity.User">
select id,`name`,password from `user`
</select>
</mapper>
实体和mapper配置好之后,可以先对本案例做一个测试,看能否对数据进行增改
@SpringBootTest
class LcApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testQueryList() {
List<User> users = userMapper.queryForList();
for(User user : users){
System.out.println(user);
}
}
@Test
void contextLoads() {
int i = userMapper.insert(new User(2, "root", "root"));
System.out.println("=======" + i);
}
}
测试显示能对数据库进行操作,继续后续操作
三、新建service层
- 接口
public interface UserService {
int insert(User user);
int delete(Integer id);
int update(User user);
User queryForOne(Integer id);
List<User> queryForList();
}
- 实现类 (加service注解)
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public int insert(User user) {
return userMapper.insert(user);
}
@Override
public int delete(Integer id) {
return userMapper.delete(id);
}
@Override
public int update(User user) {
return userMapper.update(user);
}
@Override
public User queryForOne(Integer id) {
return userMapper.queryForOne(id);
}
@Override
public List<User> queryForList() {
return userMapper.queryForList();
}
}
四、新建controller层
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/index")
public String hello(){
return "hello world";
}
@RequestMapping("/add")
public int save(User user){
return userService.insert(user);
}
// 给出部分方法
@RequestMapping("/query/{id}")
public User queryForOne(@PathVariable int id){
User user = userService.queryForOne(id);
return user;
}
@RequestMapping("/queryList")
public List<User> query(){
List<User> users = userService.queryForList();
for (User user : users){
System.out.println(user);
}
return users;
}
}
测试结果add
测试结果查询所有
3、总结
大功告成了,对于SpringBoot集成Mybatis其实是比较容易的,自己之前感觉也是比较ok的,但是在这次实操的时候遇到了各种各样的bug,一路过来也发现了自己很多的不足。既有对知识点的不了解,也有对技能的不熟练,还有自己的小马虎…
.
在学习的时候很多时候都是直接跟着老师的视频一片带过了,可能会遇到的问题老师都给解决了,而自己就是跟着无脑操作,没有自己的吸收。这次真正的实操也才发现自己有很多的不足。
.
对于技术的学习,一方面需要学习新的知识点,另外一方面也需要时间和动手来沉淀。一味的进行新的内容学习却不动手操作无异于空中阁楼。将理论和实践合二为一才是王道。通过学习新的知识点,然后进行实操 将一个个的知识点内容进行融合,逐渐构建自己的知识体系。由点及线再到面 乃至体。