Spring Boot 集成Mybatis Mysql Druid

这次准备使用Spring Boot来集成Mybatis,数据库则使用MySql,数据库连接池采用阿里巴巴的Druid,其实可以用其他连接池的,但是看了好几篇博客都推荐用这个就试了一下。而Mybatis目前有两种配置方式,一种是传统的XML配置,一种是基于注解的配置,在下面我将会简单的介绍一下两种配置方式。

一、项目环境

java 1.8
IntelliJ IDEA 2017.2.4
Druid 1.0.2
Mysql 5.7.17
SQLyog-8.32(数据库操作工具这个随意就好)
Maven (IDEA自带)

二、创建项目

1.创建项目还是使用IDEA自带的Spring Initializr来导入SpringBoot 的起步依赖:

这里写图片描述

2.一些简单的设置,包名及项目名,这里需要选择使用Maven就好了:

这里写图片描述

3.选择起步依赖,这里需要选择Web、MySql以及Mybatis,因为SpringBoot的起步依赖中没有Druid,所以这个需要我们创建好项目后在pom.xml中添加Druid的依赖:

这里写图片描述

4.直接finish就好了:

这里写图片描述

5.创建好的项目结构和pom.xml如下图所示:

这里写图片描述

6.这里还少了我们的数据库连接池Druid,所以我们需要修改pom.xml,在里面加入Druid的依赖:

这里写图片描述

添加的依赖:

        <!-- druid阿里巴巴数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.20</version>
        </dependency>

三、创建数据库

1.这里我使用SQLyog工具来创建数据库,这个大家可以根据喜好来自行创建,创建一个test数据库,并设置编码:

这里写图片描述

2.创建一个users表,设置三个字段:id、name、age,如下图:

这里写图片描述

3.加入两条演示数据:

这里写图片描述

4.数据库创建的SQL,执行此SQL可以达到以上效果:

/*
SQLyog Ultimate v8.32 
MySQL - 5.7.17-log : Database - test
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
/*Table structure for table `users` */

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (
  `id` bigint(7) NOT NULL,
  `name` varchar(10) NOT NULL,
  `age` int(7) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/*Data for the table `users` */

insert  into `users`(`id`,`name`,`age`) values (1,'张三',17),(2,'李四',25);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

四、项目构建

1、添加目录结构

为了让项目的结构更加清晰,我将Controller、Service、Dao、Model都分开存放,如下图:

这里写图片描述

Ps:
1.Mybatis传统的基于XML的配置需要写mapper.xml,而SpringBoot将xml文件视为资源,只能放在classpath下,也就是resources文件夹下,所以我新建了一个mapper文件夹,用来存放mapper.xml;
2.因为SpringBoot默认的自动Bean扫描是先扫描application.java所在的包,然后扫描其所在包的子包,所以Controller、Service、Dao、Model等包,只能与application.java平级或者为application.java所在包的子包,不然不会被扫描到,到时候会报错。

2、配置application.properties

application.properties是SpringBoot的一个主要配置文件,我们需要在里面配置MySql、Mybatis以及Druid连接池的配置,内容如下:

# 使用druid连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
# 数据库的URL、帐号、密码、驱动
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver

#连接池的配置信息
spring.datasource.initialSize=5
spring.datasource.minIdle=5
spring.datasource.maxActive=20
spring.datasource.maxWait=60000
spring.datasource.timeBetweenEvictionRunsMillis=60000
spring.datasource.minEvictableIdleTimeMillis=300000
spring.datasource.validationQuery=SELECT 1 FROM DUAL
spring.datasource.testWhileIdle=true
spring.datasource.testOnBorrow=false
spring.datasource.testOnReturn=false
spring.datasource.poolPreparedStatements=true
spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
spring.datasource.filters=stat,wall,log4j
spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

# MyBatis 配置
# mybatis的mapper.xml文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml
# mybatis的model所在的包
mybatis.type-aliases-package=com.example.springbootmybatis.model

3、User.java

package com.example.springbootmybatis.model;

public class User {
    private long id;
    private String name;
    private Integer age;

    public long getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }

    public void setId(long id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

4、UserDao.java与UserMapper.xml

(1)UserDao.java:

package com.example.springbootmybatis.dao;

import com.example.springbootmybatis.model.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;
/*@Repository*/
/*@Mapper*/
/*@Repository也可以不用添加,但是不添加之后使用@Autowired注入接口是IDEA会提示红线,但是不影响编译运行*/
/*@Mapper如果配置了自动扫描,这个注解可以不添加,也推荐使用自动扫描*/

public interface UserDao {

    /*xml方式*/
    User findByName(String name);
    /*注解方式*/
    @Select("select * from users")
    List<User> findAll();
}

(2)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">
    <!--命名空间,指定对应的Dao-->
    <mapper namespace="com.example.springbootmybatis.dao.UserDao">

    <!--使用resultType指定输出类型-->
    <select id="findByName" resultType="User">
        SELECT * FROM users WHERE name = #{name}
    </select>

</mapper>

Ps:
①这里采用两种配置方式,findByName()方法采用的是XML的配置:UserMapper.xml
指定对应的Dao,标签中的id与UserDao.java的方法名对应;findAll()方法采用的是注解的配置方式: 使用注解@Select,并写入Sql语句”select * from users”,采取注解的方式则可以不用编写Mapper.xml,简化了很多内容(其他的使用方式可以自行查找资料)。
②Repository也可以不用添加,但是不添加之后使用@Autowired注入接口是IDEA会提示红线,但是不影响编译运行;
③@Mapper如果配置了自动扫描,这个注解可以不添加,这里也推荐使用自动扫描,免得每个Mapper都去添加注释。

5、UserController.java与UserService.java

(1)UserService.java

package com.example.springbootmybatis.service;

import com.example.springbootmybatis.dao.UserDao;
import com.example.springbootmybatis.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserDao userDao;

    public User findByName(String name){
        User user =userDao.findByName(name);
        return user;
    }

    public List<User> findAll(){
        List<User> users =userDao.findAll();
        return users;
    }
}

ps:注入UserDao的时候可能会划红线,不影响。

(2)UserController.java

package com.example.springbootmybatis.controller;

import com.example.springbootmybatis.model.User;
import com.example.springbootmybatis.service.UserService;
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
    UserService userService;

    @RequestMapping("/find")
    public User findByName(){
        /*因为没写前端页面,这里写了些伪业务代码*/
        User user =userService.findByName("李四");
        return user;
    }

    @RequestMapping("/findall")
    public List<User> findAll(){
        List<User> users =userService.findAll();
        return users;
    }
}

ps:因为没写前端页面,写了一些伪业务代码,直接return了对象,SpringBoot会自动将对象序列化成json,然后生成一个页面显示出来,如果你使用了前端模板引擎,就由模板引擎接收(主要是@RestController这个注解起的作用,@RestController是@ResponseBody和@Controller的组合注解,而@ResponseBody表示将的controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据,这个在前后端分离的项目中很好用)。

6、Application.java

Application.java是SpringBoot的主要配置类和启动类,使用自动构建工具Spring Initializr生成的项目会自动命名为“项目名”+“Application”,我们这个项目就是“SpringbootmybatisApplication.java”这个类,我们需要在这里配置对Dao接口的自动扫描:

package com.example.springbootmybatis;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/*自动扫描dao接口*/
@MapperScan("com.example.springbootmybatis.dao")
@SpringBootApplication
public class SpringbootmybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootmybatisApplication.class, args);
    }
}

7、目录结构

配置后的一个结构如下图:

这里写图片描述

五、测试

1.在SpringbootmybatisApplication.java中启动项目:
这里写图片描述

启动成功:

这里写图片描述

2.访问http://localhost:8080/user/find

这里写图片描述

基于Xml配置的方法没有问题。

3.访问http://localhost:8080/user/findall

这里写图片描述

基于注解的方法也没有问题。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值