springboot据说与1.x版本区别很大,我也是刚刚开始学习springboot,并没有接触过1.x的版本,直接开始学习springboot 2.1.1的版本,小版本之间的差别应该不是很大。这几天开始整合mybatis,在网上找的教程发现多多少少都有些问题,中间也遇到了很多坑,写下这篇文章帮助其他朋友。
1.修改pom文件
在pom文件中导入以下几个坐标:
//mybatis的启动器,我这里用的是1.3.2的版本,目前是最新的版本
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
//mysql的驱动包,没有写版本号,默认是8.0.13版本,
//之前一直用的5.x版本,这里变化很大,有一个坑
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
//log4j的启动器 druid会用到log4j
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
<version>1.3.8.RELEASE</version>
</dependency>
//druid的启动器
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.0</version>
</dependency>
springboot是不会编译Java下的xml文件,要让它加载(mapper.xml)
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
2.编写application.yml文件
springboot默认的配置文件是application.properties,但是它结构不是很好,所以改成application.yml。其实也不难,
百度一下他们的区别就很好改。
spring:
datasource:
username: root
password: root
//MySQL 8.x版本会有时区验证,默认的是美国的时间,在中国启动的时候会报错,所以加上serverTimezone=GMT%2B8
url: jdbc:mysql://localhost:3306/ssm?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
driver-class-name: com.mysql.cj.jdbc.Driver
name: mysqlDatasource
type: com.alibaba.druid.pool.DruidDataSource
max-active: 20
filters: stat,wall,log4j
initial-size: 5
min-idle: 5
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1 FROM DUAL
test-while-idle: true
test-on-borrow: false
test-on-return: false
//这里的账号密码不是数据库的账号密码,而是后台登陆druid页面的账号密码
druid:
username: 123
password: 123
logSlowSql: true
//告诉springboot加载mapper文件
mybatis:
mapper-locations: classpath:com/nyist/mapper/*.xml
3.编写druid配置类
@Data
//lombok插件功能,会自动生成get,set方法
@Configuration
@ConfigurationProperties(prefix = "spring.datasource.druid")
//这个注解是从application.yml文件中读取数据配置给成员变量,spring.datasource.druid是前缀
public class DruidConfiguration {
private String username;
private String password;
private String logSlowSql;
@Bean
public ServletRegistrationBean druidServlet() {
ServletRegistrationBean reg = new ServletRegistrationBean();
reg.setServlet(new StatViewServlet());
reg.addUrlMappings("/druid/*");
reg.addInitParameter("loginUsername", username);
reg.addInitParameter("loginPassword", password);
reg.addInitParameter("logSlowSql", logSlowSql);
return reg;
}
@ConfigurationProperties(prefix = "spring.datasource")
//从application.yml文件中读取数据配置给datasource对象
@Bean
public DataSource druid() {
DruidDataSource datasource = new DruidDataSource();
return datasource;
}
}
4.编写实体类,接口,mapper文件和service方法
实体类:
package com.nyist.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
@AllArgsConstructor
@Data
public class People {
Integer id;
String name;
Integer age;
public People() {
}
}
接口:
package com.nyist.mapper;
import com.nyist.pojo.People;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
//这个注解写不写无所谓,不写的话在idea的service中自动注入编译器会报错,但是不影响运行
public interface PeopleMapper {
List<People> selAll();
int ins(People people);
}
mapper.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">
//注意这个namespace位置
<mapper namespace="com.nyist.mapper.PeopleMapper">
//注意这个resultType类型
<select id="selAll" resultType="com.nyist.pojo.People">
select * from people
</select>
<insert id="ins">
insert people (name,age) value (#{name},#{age})
</insert>
</mapper>
service:
import com.nyist.pojo.People;
import java.util.List;
public interface PeopleService {
List<People> selAll();
int ins(People people);
}
serviceimpl:
import com.nyist.mapper.PeopleMapper;
import com.nyist.pojo.People;
import com.nyist.service.PeopleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class PeopleServiceImpl implements PeopleService {
@Autowired
private PeopleMapper peopleMapper;
@Override
public List<People> selAll() {
return peopleMapper.selAll();
}
@Override
public int ins(People people) {
return peopleMapper.ins(people);
}
}
5.编写启动类和controller:
启动类:
//一定要注意启动类的位置
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.nyist.mapper")
//扫描mapper下的接口
public class AppApplication {
public static void main(String[] args) {
SpringApplication.run(AppApplication.class, args);
}
}
controller:
@RequestMapping("test01")
public void test01(){
List<Address> peoples=addressService.selAll();
System.out.println(peoples);
}
6.测试
运行main方法,浏览器访问http://localhost:8080/test01,即可查询数据库信息。
这个地址可以http://localhost:8080/druid/login.html访问druid后台信息,
这个页面不是咱们写的,是druid帮咱们写的,账号和密码在application.yml中配置,登陆后:
可以查看连接池配置的信息,有些信息必须要对数据库操作一次后才能看到
(第一次写博客,不足之处还请见谅)