从头开始搭建一个SpringBoot项目-整合MyBatis

创建一个初始项目

可以参考我的另一篇文章:第一个SpringBoot程序
创建完成以后的目录结构这样的:
在这里插入图片描述
其中的操作,在上面链接文章中有演示。

第一个请求访问是这样的:
在这里插入图片描述

pom文件主要内容

就一个web的启动器和测试,SpringBoot的版本是2.7.4

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.7.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.demo01</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>初始的SpringBoot项目</description>
<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

MyBatis的引入

数据库

先创建一个用户表

用户表的建表语句

CREATE TABLE `user` (
  `id` int(20) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `pw` varchar(20) DEFAULT NULL,
  `role` varchar(20) DEFAULT NULL COMMENT '用户角色',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我这里的角色就比较简单了

其中的数据

向表中插入几条数据
在这里插入图片描述

MyBatis的引入以及配置

引入MyBaitis的依赖

在这里插入图片描述

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.2</version>
</dependency>

配置信息

使用注解@MapperScan扫描Mapper

在这里插入图片描述

连接数据库的基本配置信息
引入druid

在这里可以再引入一个druid的依赖,用于后续做数据库的分析

<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.13</version>
</dependency>

当然,还有我们连接MySQL的驱动不要忘记引入

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>
application.yml的配置
spring:
  #配置数据源
  datasource:
    name: mydatasource
    #自定义数据源
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      #监控统计拦截的filters
      filters: stat
      driver-class-name: com.mysql.cj.jdbc.Driver
      #连接基本属性
      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&serverTimezone=UTC
      username: root
      password: root
      #配置初始化大小/最小/最大
      initial-size: 1
      min-idle: 1
      max-active: 20
      #获取连接等待超时时间
      max-wait: 60000
      #间隔多久进行一次检测,检测需要关闭的空闲连接
      time-between-eviction-runs-millis: 60000
      #一个连接在池中最小生存的时间
      min-evictable-idle-time-millis: 300000
      #用来验证连接是否有效的sql
      validation-query: SELECT 'x'
      #申请连接时检测空闲时间
      test-while-idle: true
      #从连接池获取连接时是否检查连接有效性,true检查,false不检查
      test-on-borrow: false
      #归还连接时是否检查连接有效性,true检查,false不检查
      test-on-return: false
      #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
      pool-prepared-statements: false
      #连接池中最大的预处理连接数量
      max-pool-prepared-statement-per-connection-size: 20
      stat-view-servlet:
        enabled: false

mybayis:
  #配置mapper的指定路径
  mapper-locations: classpath*:com/demo/**/dao/*.xml
  #防止空值异常报错
  configuration:
    jdbc-type-for-null: 'null'
pom.xml文件中配置资源的导出

将以下代码加到pom文件末尾的build标签下
在这里插入图片描述

	<resources>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>*</include>
					<include>*/*</include>
				</includes>
				<filtering>true</filtering>
			</resource>

			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
				</includes>
				<filtering>true</filtering>
			</resource>
		</resources>

否则就可能导致target目录下的application.yml不存在,进而导致报错
在这里插入图片描述

访问数据库

接下来就该访问数据库了

包的目录结构

这里的dao层,要和你前面配置的扫描路径以及配置文件中的信息一致,否则就会访问不到,导致报错
在这里插入图片描述
构建实体类,容我偷个懒,引入一个自动生成setter、getter的依赖lombok

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.18.24</version>
			<scope>provided</scope>
		</dependency>
各类的具体代码

user包下的具体代码

UserBean.class

用户的实体类

@Setter
@Getter
@ToString
public class UserBean {
    int id;
    String name;
    String pw;
    String role;
}
UserController.class

用户访问的接口

@RestController
@RequestMapping("/user/")
public class UserController {
    @Autowired
    UserBeanServices userBeanServices;

    @RequestMapping("/getUserBeanByName")
    @ResponseBody
    public String getUserBeanByName(
            @RequestParam("name") String name
    ) {
        return userBeanServices.getUserByUserName(name).toString();
    }

}
UserBeanDao.class

dao的接口

public interface UserBeanDao {
    //根据用户名称获取用户对象
    UserBean getUserByUserName(String name);
}
UserBeanDao.xml

dao的映射文件

<?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.demo.user.dao.UserBeanDao">

    <select id="getUserByUserName" resultType="com.demo.user.bean.UserBean" parameterType="String">
        select id , name , pw , role from user where name = #{name}
    </select>

</mapper>
UserBeanServices.class

业务逻辑的接口类

public interface UserBeanServices {
    UserBean getUserByUserName(String name);
}

UserBeanServicesImpl.class
@Service
public class UserBeanServicesImpl implements UserBeanServices {
    @Autowired
    UserBeanDao dao;

    @Override
    public UserBean getUserByUserName(String name) {
        return dao.getUserByUserName(name);
    }
}

验证是否成功

在这里插入图片描述
在这里插入图片描述
请求出来的数据 与数据库对应 则表明成功。这里Mybatis的操作,比如增删改就不再演示了。可以参考我的其他文章:
Mybatis中对数据库的增删改查
Mybatis中的CRUD可变参数

配置druid 并进入后台管理

建立以下包结构
在这里插入图片描述

DruidConfig.class

package com.demo.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Configuration
public class DruidConfig {
	//注意这里,前缀记得要跟application.yml里面的对应
    @ConfigurationProperties(prefix = "spring.datasource.druid")
    @Bean
    public DataSource druid(){
        return new DruidDataSource();
    }
    //配置Druid监控
    /**
     * 1、配置管理后台的Servlet
     * 2、配置一个Web监控的filter
     */
    //配置一个管理后台的Servlet
    @Bean
    public ServletRegistrationBean<StatViewServlet> statViewServlet(){
        ServletRegistrationBean<StatViewServlet> servletServletRegistrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*");

        servletServletRegistrationBean.addInitParameter("loginUsername","admin");
        servletServletRegistrationBean.addInitParameter("loginPassword","123456");
        servletServletRegistrationBean.addInitParameter("allow","");
        servletServletRegistrationBean.addInitParameter("deny","172.16.208.208");
        return servletServletRegistrationBean;
    }
    //配置一个Web监控的filter
    @Bean
    public FilterRegistrationBean<WebStatFilter> webStatFilter(){
        FilterRegistrationBean<WebStatFilter> bean = new FilterRegistrationBean<>();
        bean.setFilter(new WebStatFilter());
        Map<String,String> initParams = new HashMap<>();
        initParams.put("exclusions","*.css,*.png,*.jpg,*.js,/druid/*");
        bean.setInitParameters(initParams);
        bean.setUrlPatterns(Arrays.asList("/*"));
        bean.setInitParameters(initParams);
        return  bean;
    }
}

启动项目,浏览器输入:
http://localhost:8080/druid/login.html
在这里插入图片描述
登录进去,账号密码是:admin 123456

然后调用之前的可以访问数据库的接口SQL监控下有显示即可。
在这里插入图片描述

小结

本文从零开始,搭建了一个SpringBoot的项目,整合了Mybatis实现了对MySQL数据库的访问,以及使用Druid对Sql进行监控

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值