1. 新建项目,初始依赖为Web、MySQL、MyBatis
2. 项目结构
SpringBoot会引入当前版本支持的最大的版本号的组件,譬如mysql引入的就是8.0.15的版本,如果不习惯的话。可以自己去修改依赖引入的代码
3. 网application.properties文件中,添加属性
在application.properties文件中添加属性,在启动时,SpringBoot容器会,将这些属性自动装填到各自的Bean中去
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:///user?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
mybatis.type-aliases-package=com.example.springbootdemo4.pojo
mybatis.mapper-locations=classpath:/static/mapper/*Mapper.xml
前面四句,是标准的数据四件套,驱动,url,数据库用户名,数据库 密码
后面的第六行,是指定pojo的别名包,这样你在写mapper文件时,就不需要写pojo对象的全路径了
后面第七行,是指定mapper.xml文件夹目录
注意,等号前后不要有空格,不然会出错
往启动类上加一个注解,扫描dao的包
package com.example.springbootdemo4;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.springbootdemo4.dao")
public class Springbootdemo4Application {
public static void main(String[] args) {
SpringApplication.run(Springbootdemo4Application.class, args);
}
}
4. 构建项目结构
就按照正常,SSM框架搭建的格式,添加pojo层,dao层,mapper.xml文件夹,service层,controller层
5. 各个层的文件添加
pojo
User,java
package com.example.springbootdemo4.pojo;
import java.io.Serializable;
public class User implements Serializable {
private int id;
private String name;
private String gender;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
'}';
}
}
dao
UserMapper.java
package com.example.springbootdemo4.dao;
import com.example.springbootdemo4.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
public interface UserMapper {
public List<User> findAll();
}
Mapper.xml文件
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.springbootdemo4.dao.UserMapper">
<select id="findAll" resultType="user">
select * from user;
</select>
</mapper>
service
UserService.java
package com.example.springbootdemo4.service;
import com.example.springbootdemo4.pojo.User;
import java.util.List;
public interface UserService {
public List<User> findAll();
}
UserServiceImpl.java
package com.example.springbootdemo4.service;
import com.example.springbootdemo4.dao.UserMapper;
import com.example.springbootdemo4.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List<User> findAll() {
return userMapper.findAll();
}
}
controller
UserController.java
package com.example.springbootdemo4.controller;
import com.example.springbootdemo4.pojo.User;
import com.example.springbootdemo4.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/findAll")
@ResponseBody
public List<User> findAll(){
return userService.findAll();
}
}
6.启动项目
这里出现了一个警告,是因为在当前版本的时候,驱动的路径变为了com.mysql.cj.jdbc,Driver
那么我们将Driver的class路径改为最新的,重新启动
7. 修改过后启动项目,访问localhost:8080/findAll
发现又报了一个错误 java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.****
这个错误是因为,最新版本的mysql需要你指定时区等信息
spring.datasource.url=jdbc:mysql:///user?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
还以一种是版本冲突问题,就是报了个 CLIENT_PLUGIN_AUTH is required
在这种情况下,你可以将版本号降低到5.1.38左右
8. 修改配置文件
9. 再次启动访问
SpringBoot系列号称是0配置,0XML,所以我们使用mapper.xml,就显得不太合适了
那么我们除了mapper.xml之外,还能使用那些手段呢?
- 使用MyBatis的注解方式
- 使用MyBatis-plus
- 使用tk-Mybatis
- 放弃MyBatis,使用JPA
那么我接下来演示的是使用MyBatis注解的方式,以后会演示其他方式
10. 使用注解的方式
dao
增加了一个insert的功能,我在数据库中使用的id自增的方式。
@Insert("insert into user values(null, #{name}, #{gender}, #{age})")
public void insert(User user);
service层
UserService.java
public void insert(User user);
UserServiceImpl.java
@Override
public void insert(User user) {
userMapper.insert(user);
}
controller层
@RequestMapping("/insert")
@ResponseBody
public String insert(){
User user = new User();
user.setName("大天师");
user.setAge(22);
user.setGender("男");
userService.insert(user);
return "ok";
}