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后台信息,springboot 2.0整合mybatis+druid 详解
这个页面不是咱们写的,是druid帮咱们写的,账号和密码在application.yml中配置,登陆后:
springboot 2.0整合mybatis+druid 详解
可以查看连接池配置的信息,有些信息必须要对数据库操作一次后才能看到

(第一次写博客,不足之处还请见谅)

相关文章: