CREATE DATABASE `springboot_mybatis` ;
USE `springboot_mybatis` ;
CREATE TABLE `monster` (
`id` INT NOT NULL AUTO_INCREMENT,
`age` INT NOT NULL,
`birthday` DATE DEFAULT NULL,
`email` VARCHAR ( 255 ) DEFAULT NULL,
`gender` CHAR ( 1 ) DEFAULT NULL,
`name` VARCHAR ( 255 ) DEFAULT NULL,
`salary` DOUBLE NOT NULL,
PRIMARY KEY ( `id` )
) CHARSET = utf8;
insert into monster values(null, 20, '2000-11-11', 'nmw@sohu.com', '男', '牛魔王', 5000.88);
insert into monster values(null, 10, '2011-11-11', 'bgj@sohu.com', '女', '白骨精', 8000.88);
SELECT * FROM `monster` ;
2.创建工程名为springboot_mybatis, maven项目- pom.xml 需要引入相关依赖.
<parent>
<artifactId>spring-boot-starter-parentartifactId>
<groupId>org.springframework.bootgroupId>
<version>2.5.3version>
parent>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
<version>2.2.2version>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-configuration-processorartifactId>
dependency>
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.17version>
dependency>
dependencies>
server:
port: 9090
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot_mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: root

<dependency>
<groupId>com.alibabagroupId>
<artifactId>druidartifactId>
<version>1.1.17version>
dependency>
@SpringBootTest
public class ApplicationTest {
@Autowired
private JdbcTemplate jdbcTemplate;
@Test
public void t1(){
Class<? extends DataSource> aClass = jdbcTemplate.getDataSource().getClass();
System.out.println(aClass);
}
}
5.创建src\main\java\com\llp\springboot\mybatis\bean\Monster.java
@Data
public class Monster {
private Integer id;
private Integer age;
private Date birthday;
private String email;
private String name;
private String gender;
private Double salary;
}
6.创建src\main\java\com\llp\springboot\mybatis\dao\MonsterMapper.java
public interface MonsterMapper {
Monster getMonsterById(@Param("id") Integer id);
}
7.创建src\main\resources\mapper\MonsterMapper.xml
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.llp.springboot.mybatis.dao.MonsterMapper">
<select id="getMonsterById" resultType="Monster">
select * from monster where id = #{id}
select>
mapper>
8.配置mybatis
yaml方式配置
#mybatis配置
mybatis:
#指定要扫描的mapper.xml位置; classpath:mapper/*.xml 扫描在类路径下的mapper目录下的。xml文件
mapper-locations: classpath:mapper/*.xml
#配置类型别名,通常指定实体类所在包,这样我们在xml中resultType="com.llp.springboot.mybatis.bean.Monster"就可以简写成Monster
type-aliases-package: com.llp.springboot.mybatis.bean
#配置mybatis sql打印日志
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
#启用自动驼峰配置
map-underscore-to-camel-case: true
#通过config-location可以指定mybatis-config.xml,这样就可以用传统的方式来配置mybatis
#config-location: classpath:mybatis-config.xml
mybatis-config.xml配置文件方式
在springboot中配置mybatis非常快捷,但如果需要配置项目较多的话可以引入传统的mybatis配置文件来进行配置
DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
settings>
<typeAliases>
<package name="com.llp.springboot.mybatis.bean"/>
typeAliases>
configuration>
9.配置mapper接口包扫描的两种方式
方式一,在启动类中配置包扫描
@SpringBootApplication
@MapperScan(basePackages = {"com.llp.springboot.mybatis.dao"})
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
方式二,在mapper接口中添加@mapper注解
//使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。
@Mapper
public interface MonsterMapper {
//方法,根据id返回Monster对象
public Monster getMonsterById(Integer id);
}
@mapper注解和@repository的区别
@mapper注解是mybatis的注解,使用@mapper后,不需要在spring配置中设置扫描地址,通过mapper.xml里面的namespace属性对应相关的mapper类,spring将动态的生成Bean后注入到ServiceImpl中。而动态的生成bean去注入,在ide中可能会冒红,但这并不语法上的错误。
@repository则需要在Spring中配置扫描包地址,然后生成dao层的bean,之后被注入到ServiceImpl中
@Repository注解修饰哪个类,则表明这个类具有对对象进行CRUD(增删改查)的功能,而且@Repository是@Component注解的一个派生品,所以被@Repository注解的类可以自动的被@ComponentScan 通过路径扫描给找到。
10.测试一把
@Autowired
private MonsterMapper monsterMapper;
@Test
public void getMonsterById(){
//Monster(id=1, age=20, birthday=Sat Nov 11 00:00:00 CST 2000, email=nmw@sohu.com, name=牛魔王, gender=男, salary=5000.88)
Monster monster = monsterMapper.getMonsterById(1);
System.out.println(monster);
}
MonsterController
@RestController
public class MonsterController {
@Autowired
private MonsterService monsterService;
@RequestMapping("/getMonster/{id}")
public Monster getMonsterById(@PathVariable("id") Integer id){
return monsterService.getMonsterById(id);
}
}
MonsterServiceImpl
@Service
public class MonsterServiceImpl implements MonsterService {
@Autowired
private MonsterMapper monsterMapper;
@Override
public Monster getMonsterById(Integer id) {
return monsterMapper.getMonsterById(id);
}
}
返回给浏览器的时间是格林威治时间,真实的时间是2000-11-11 00:00:00,这是因为我们属于东八区,相差了八个小时导致的

解决办法:在需要转换时间的类中添加注解 @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”, timezone = “GMT+8”)
@Data
public class Monster {
private Integer id;
private Integer age;
//这里通过注解来解决时区问题
//GMT 就是格林尼治标准时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date birthday;
private String email;
private String name;
private String gender;
private Double salary;
}