Mybatis在整个体系中的作用是负责连接并访问数据库层。搞过开发的同学都知道,没有数据库的项目一无是处,所以Mybatis的学习是很有必要的。
准备工作:
整合Mybatis可以基于注解,也可以基于xml文件, 二者的区别:
新建一个数据库boot_demo,然后执行以下sql语句:
-- 创建表
USE `boot_demo`;
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
`user_id` int(11) NOT NULL ,
`user_name` varchar(20) DEFAULT NULL,
`user_age` int(11) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE = InnoDB;
-- 插入数据
REPLACE INTO `tb_user` (`user_id`, `user_name`, `user_age`) VALUES ('100', 'test01', '100');
项目信息填写如下:
选择初始依赖:
完善目录结构:
在main/java/com/tracy/mybatisdemo下依次新建 entity 、dao 和 controller 文件夹。一般来说,应该再创建一个service包,前端调用controller接口,controller调用service,service再调用dao,但这章为了简化操作省去了service部分,到后面项目实战的时候我会创建更完善的目录结构。
在entity包下创建User类,代码如下:
package com.tracy.mybatisdemo.entity;
import lombok.Data;
//此注解来源于Lombok插件,运行时会自动为类添加 Getter、Setter 、有参构造、toString 、equals 和 hashCode 方法
@Data
public class User {
private Integer userId;
private String userName;
private Integer userAge;
}
在dao包下创建UserDao接口:
package com.tracy.mybatisdemo.dao;
import com.tracy.mybatisdemo.entity.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserDao {
@Select("select user_id,user_name,user_age from tb_user")
List findAll();
@Select("select user_id,user_name,user_age from tb_user where user_id = #{userId}")
User findById(Integer userId);
@Insert("insert into tb_user (user_id,user_name,user_age) values (#{userId},#{userName},#{userAge})")
Integer insert(User user);
@Update("update tb_user set user_name=#{userName},user_age=#{userAge} where user_id = #{userId}")
Integer update(User user);
@Delete("delete from tb_user where user_id=#{userId}")
Integer delete(Integer userId);
}
为了使每个dao接口都被扫描到,可以在每个dao接口上加上@Mapper注解,但当dao接口比较多的时候,推荐直接在启动类上通过注解 @MapperScan("com.tracy.mybatisdemo.dao")
的形式扫描整个dao包:
@SpringBootApplication
@MapperScan("com.tracy.mybatisdemo.dao")
public class MybatisDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisDemoApplication.class, args);
}
}
在controller包下创建UserController类:
package com.tracy.mybatisdemo.controller;
import com.tracy.mybatisdemo.dao.UserDao;
import com.tracy.mybatisdemo.entity.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserDao userDao;
@GetMapping("/findAll")
public List findAll(){
return userDao.findAll();
}
@GetMapping("/findById")
public User findById(Integer userId){
return userDao.findById(userId);
}
@PostMapping("/insert")
public String insert(User user){
userDao.insert(user);
return "插入成功后的数据为" + userDao.findById(user.getUserId());
}
@PutMapping("/update")
public String update(User user){
userDao.update(user);
return "更新成功后的数据为" + userDao.findById(user.getUserId());
}
@DeleteMapping("/delete")
public String delete(Integer userId){
userDao.delete(userId);
return "删除成功的id" + userId;
}
}
在application.yml中添加以下配置:
# 数据源
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/boot_demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
username: root
password: 你的密码
# Mybatis配置
# 开启驼峰式命名规则自动转换
mybatis:
configuration:
map-underscore-to-camel-case: true
测试工具我使用的是postman,怎么安装和使用可以网上百度一下。
成功!
基于注解的Mybatis使用只能应付一些比较简单的数据库查询语句,虽然省事,但在一定程度上也丧失了灵活性,因此,有必要学习一下基于xml整合Mybatis。
package com.tracy.mybatisdemo.dao;
import com.tracy.mybatisdemo.entity.User;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserDao {
List findAll();
User findById(Integer userId);
Integer insert(User user);
Integer update(User user);
Integer delete(Integer userId);
}
在resources目录下创建目录mapper,仔仔mapper目录下创建UserMapper.xml文件:
注意 mapper namespace=“com.tracy.mybatisdemo.dao.UserDao” 一定要与dao包下的接口对应起来。
insert into tb_user (user_id,user_name,user_age) values (#{
userId},#{
userName},#{
userAge})
update tb_user set user_name = #{
userName}, user_age = #{
userAge}
where user_id = #{
userId}
delete from tb_user where user_id = #{
userId}
<