一. 创建spring boot项目并进行配置
1. 创建spring boot参照博客
https://blog.csdn.net/weixin_43330884/article/details/104942624
2. 在之上的基础上引入所需依赖
- Mybatis
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
- MySQL
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
- alibaba 的 druid 数据源
<!-- alibaba-druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
3. 配置spring boot的核心文件
application.properties
################ Mybatis 配置 ################
#别名
mybatis.type-aliases-package=cn.hp.springboot_demo.domain
#驱动配置可省略,springboot可以自动识别
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_demo?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
#MySQL账户名和密码
spring.datasource.username =root
spring.datasource.password =123456
#如果不配置阿里的druid,会自动使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource
#控制台显示SQL
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
4. 配置扫描Mybatis的Mapper接口
在spring boot的启动类上面添加注解:
@MapperScan(basePackages = {"cn.hp.springboot_demo.mapper"})
二. 整合案例代码编写
1. 数据库表的基本操作
1.1准备SQL语句,一张表作为测试
CREATE TABLE `user` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) DEFAULT NULL COMMENT '名称',
`phone` varchar(16) DEFAULT NULL COMMENT '用户手机号',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`age` int(4) DEFAULT NULL COMMENT '年龄',
PRIMARY KEY (`id`)
)
1.2 生成数据库表对应的实体类
生成:setter&getter方法和构造函数
package cn.hp.springboot_demo.domain;
import java.util.Date;
public class User {
private Integer id;
private String name;
private String phone;
private Integer age;
private Date createTime;
public User(String name, String phone, Integer age, Date createTime) {
this.name = name;
this.phone = phone;
this.age = age;
this.createTime = createTime;
}
public User() {
super();
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
2. 编写mapper层和对应的业务层
2.1 接口:UserMapper.java
package cn.hp.springboot_demo.mapper;
import cn.hp.springboot_demo.domain.User;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserMapper {
/**
* 查询所有
* @return
*/
@Select("select * from user")
@Results(@Result(property = "createTime",column = "create_time"))
List<User> findAll();
/**
* 根据id查询
* @param id
* @return
*/
@Select("select * from user where id = #{id}")
@Results(@Result(property = "createTime",column = "create_time"))
User findById(Integer id);
/**
* 更新
* @param user
*/
@Update("update user set name=#{name} where id=#{id}")
void update(User user);
/**
* 删除
* @param id
*/
@Delete("delete from user where id=#{id}")
void delete(Integer id);
/**
* 增加
* @param user
*/
@Insert("insert into user(name,age,phone,create_time) values(#{name},#{age},#{phone},#{createTime})")
@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")
int add(User user);
}
2.2 接口:UserService.java
与上面的一样
package cn.hp.springboot_demo.service;
import cn.hp.springboot_demo.domain.User;
import java.util.List;
public interface UserService {
/**
* 查询所有
* @return
*/
List<User> findAll();
/**
* 根据id查询
* @param id
* @return
*/
User findById(Integer id);
/**
* 更新
* @param user
*/
void update(User user);
/**
* 删除
* @param id
*/
void delete(Integer id);
/**
* 增加
* @param user
*/
int add(User user);
}
2.3 UserServiceImp.java
接口UserService的实现类:重写UserService里面的方法
package cn.hp.springboot_demo.service.imp;
import cn.hp.springboot_demo.domain.User;
import cn.hp.springboot_demo.mapper.UserMapper;
import cn.hp.springboot_demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
@Service
@Transactional
public class UserServiceImp implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> findAll() {
return userMapper.findAll();
}
@Override
public User findById(Integer id) {
return userMapper.findById(id);
}
@Override
public void update(User user) {
userMapper.update(user);
}
@Override
public void delete(Integer id) {
userMapper.delete(id);
}
@Override
public int add(User user) {
return userMapper.add(user);
}
}
2.4 controller层:UserController.java
package cn.hp.springboot_demo.controller;
import cn.hp.springboot_demo.domain.User;
import cn.hp.springboot_demo.mapper.UserMapper;
import cn.hp.springboot_demo.service.UserService;
import cn.hp.springboot_demo.utils.JsonData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private UserMapper userMapper;//查询操作不涉及事务所以也可以用 Mapper 层调用
/**
* 查询所有
* @return
*/
@RequestMapping("/findAll")
public Object findAll(){
List<User> all = userService.findAll();
return JsonData.buildSuccess(all);
}
/**
* 添加
* @return
*/
@RequestMapping("/add")
public Object add(User user){
int id = userService.add(user);
return JsonData.buildSuccess(id);
}
/**
* 根据id查询
* @return
*/
@RequestMapping("/findById")
public Object findById(Integer id){
User user = userService.findById(id);
return JsonData.buildSuccess(user);
}
/**
* 更新
* @return
*/
@RequestMapping("/update")
public Object update(User user){
userService.update(user);
return JsonData.buildSuccess();
}
/**
* 删除
* @return
*/
@RequestMapping("/delete")
public Object delete(Integer id){
userService.delete(id);
return JsonData.buildSuccess();
}
}
2.4 小工具:JsonData.java
这个小工具叫做响应结果类:更为美观的、直接的描述运行结果
package cn.hp.springboot_demo.utils;
import java.io.Serializable;
/**
* 响应结果类
*/
public class JsonData implements Serializable {
private Integer code; // 状态码 0 表示成功,1表示处理中,-1表示失败
private Object data; // 数据
private String msg;// 描述
public JsonData() {
}
public JsonData(Integer code, Object data, String msg) {
this.code = code;
this.data = data;
this.msg = msg;
}
// 成功,传入数据
public static JsonData buildSuccess() {
return new JsonData(0, null, "操作成功...");
}
// 成功,传入数据
public static JsonData buildSuccess(Object data) {
return new JsonData(0, data, "加载成功...");
}
// 失败,传入描述信息
public static JsonData buildError(String msg) {
return new JsonData(-1, null, msg);
}
// 失败,传入描述信息,状态码
public static JsonData buildError(String msg, Integer code) {
return new JsonData(code, null, msg);
}
// 成功,传入数据,及描述信息
public static JsonData buildSuccess(Object data, String msg) {
return new JsonData(0, data, msg);
}
// 成功,传入数据,及状态码
public static JsonData buildSuccess(Object data, int code) {
return new JsonData(code, data, null);
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
@Override
public String toString() {
return "JsonData [code=" + code + ", data=" + data + ", msg=" + msg
+ "]";
}
}
到此spring boot与mybatis的整合案例结束!