0
点赞
收藏
分享

微信扫一扫

IDEA搭建spring boot项目五:使用mybatis框架

Raow1 2022-02-08 阅读 72

阅读本文前,请先学习完成我的上一篇文章。上一篇文章地址

IDEA搭建spring boot项目四:AOP+log4j打日志。_cunRenJi的博客-CSDN博客

mybatis简介

一、pom.xml中添加mybatis相关依赖并重载项目

此时的pom.xml文件内容

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.6.3</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.jicr</groupId>
	<artifactId>springbootTest</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>springbootTest</name>
	<description>springbootTest</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<!--排除logging,使用log4j需要-->
			<exclusions>
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--处理json相关依赖-->
		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<classifier>jdk15</classifier>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<!--aop切面,用来存储日志-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
			<version>2.6.2</version>
		</dependency>
		<!--特别是字符串操作方法,基本数值方法,对象反射,并发,创建和序列化以及系统属性。此外,它还包含对java.util.Date的基本增强-->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.12.0</version>
		</dependency>
		<!--使用log4j2打日志-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
			<version>2.6.2</version>
		</dependency>
		<!--Java持久化接口,提供数据库实体类使用的注解-->
		<dependency>
			<groupId>javax.persistence</groupId>
			<artifactId>persistence-api</artifactId>
			<version>1.0.2</version>
		</dependency>
		<!--连接数据库相关依赖-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.2.1</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.27</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.2.8</version>
		</dependency>
	</dependencies>

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

</project>

二、创建mysql数据库表以备用

-- auto-generated definition
create table logs
(
    seq            varchar(50)   not null comment '流水号'
        primary key,
    server_code    varchar(20)   not null comment '服务编码',
    server_name    varchar(100)  null comment '服务名称',
    head_req_date  date          null comment '请求日期',
    head_req_time  varchar(20)   null comment '请求时间',
    head_req_organ varchar(50)   null comment '请求方名称',
    req_content    varchar(4000) null comment '请求报文',
    head_rsp_date  date          null comment '响应日期',
    head_rsp_time  varchar(20)   null comment '响应时间',
    rsp_content    varchar(4000) null comment '响应内容'
)
    comment '日志存储表';

使用idea连接数据库(用navicat也行)

三、在resources目录下创建3个yml文件,分别在开发,测试,生产时使用

事实上这三个文件需要在项目开始创建application.yml文件时就创建,application.yml文件用来配置公共信息,其他3个文件配置不同阶段所需不同的配置信息。

 在application.yml文件中配置寻找对应阶段的yml文件。

 application.yml文件内容

# 数据源
spring:
  profiles:
    active: dev #通过设置此项来寻找对应yml文件
  application:
    name: springbootTestApp #应用名称
  servlet:
    multipart:
      enabled: true
      max-file-size: 100MB
      max-request-size: 100MB
logging:
  config: classpath:log4j2.xml
  level:
    com:
      kj:
        sbkj:
          dao: debug

 在application-dev.yml文件中配置数据库信息

 application-dev.yml文件内容

server:
  port: 8088
  servlet:
    encoding:
      charset: UTF-8
      enabled: true
      force: true
    context-path:
  address: localhost

spring:
  datasource:
    #开发环境
    url: jdbc:mysql://localhost:3306/springbootdatabase?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    #    driverClassName: oracle.jdbc.driver.OracleDriver
    #    url: jdbc:oracle:thin:@(DESCRIPTION=(ENABLE=BROKEN)(LOAD_BALANCE=off)(FAILOVER=on)(ADDRESS_LIST = (ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.23)(PORT=11521))(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.34)(PORT=11521))(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.32)(PORT=11521))(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.0.33)(PORT=11521)))(CONNECT_DATA=(SERVICE_NAME=bdpdb0_yen00128_01.ccb.com)(FAILOVER_MODE=(TYPE=select)(METHOD=basic))(server=dedicated)))
    #    username: testimage
    #    password: DBCS_image2020
    #    type: com.alibaba.druid.pool.DruidDataSource
    # 初始化大小,最小,最大
    initialSize: 5
    minIdle: 5
    maxActive: 20
    # 配置获取连接等待超时的时间
    maxWait: 60000
    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    timeBetweenEvictionRunsMillis: 60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: false
    testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    poolPreparedStatements: true
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    spring.datasource.filters: stat,wall,log4j
    # 合并多个DruidDataSource的监控数据
    useGlobalDataSourceStat: true

四、model目录下创建table目录,进入创建数据库表对应的实体类Logs.java

Logs.java文件内容

package com.jicr.springboottest.model.table;

import lombok.Data;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;

@Entity
@Data
@Table(name = "logs") //表名
public class Logs {
    //流水号
    @Id
    @Column(name = "seq", length = 50, nullable = false)//nullable表示是否为空,不设置默认true可以为空,若希望不为空,则此字段赋值false
    private String seq;
    //服务编码
    @Column(name = "server_code", length = 20)
    private String serverCode;
    //服务名称
    @Column(name = "server_name", length = 100)
    private String serverName;
    //请求日期
    @Column(name = "head_req_date")
    private Date headReqDate;
    //请求时间
    @Column(name = "head_req_time", length = 20)
    private String headReqTime;
    //请求方名称
    @Column(name = "head_req_organ", length = 50)
    private String headReqOrgan;
    //请求报文
    @Column(name = "req_content", length = 4000)
    private String reqContent;
    //响应日期
    @Column(name = "head_rsp_date")
    private Date headRspDate;
    //响应时间
    @Column(name = "head_rsp_time", length = 20)
    private String headRspTime;
    //响应内容
    @Column(name = "rsp_content", length = 4000)
    private String rspContent;
}

五、resources目录下创建LogsMapper.xml文件

 LogsMapper.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">
<mapper namespace="com.jicr.springboottest.dao.LogsMapper">
    <resultMap id="BaseResultMap" type="com.jicr.springboottest.model.table.Logs">
        <id column="seq" jdbcType="VARCHAR" property="seq"/>
        <result column="server_code" jdbcType="VARCHAR" property="serverCode"/>
        <result column="server_name" jdbcType="VARCHAR" property="serverName"/>
        <result column="head_req_date" jdbcType="DATE" property="headReqDate"/>
        <result column="head_req_time" jdbcType="VARCHAR" property="headReqTime"/>
        <result column="head_req_organ" jdbcType="VARCHAR" property="headReqOrgan"/>
        <result column="req_content" jdbcType="VARCHAR" property="reqContent"/>
        <result column="head_rsp_date" jdbcType="DATE" property="headRspDate"/>
        <result column="head_rsp_time" jdbcType="VARCHAR" property="headRspTime"/>
        <result column="rsp_content" jdbcType="VARCHAR" property="rspContent"/>
    </resultMap>
    <select id="selectByServerCode" parameterType="java.lang.String" resultMap="BaseResultMap">
        select *
        from logs
        where seq = #{seq,jdbcType=VARCHAR}
    </select>
    <insert id="insertOne" keyProperty="seq" useGeneratedKeys="true" parameterType="com.jicr.springboottest.model.table.Logs">
        insert into logs(seq, server_code, server_name, head_req_date, head_req_time, head_req_organ, req_content,
                         head_rsp_date, head_rsp_time, rsp_content)
        values (#{seq,jdbcType=VARCHAR}, #{serverCode,jdbcType=VARCHAR}, #{serverName,jdbcType=VARCHAR},
                #{headReqDate,jdbcType=DATE}, #{headReqTime,jdbcType=VARCHAR}, #{headReqOrgan,jdbcType=VARCHAR},
                #{reqContent,jdbcType=VARCHAR}, #{headRspDate,jdbcType=DATE}, #{headRspTime,jdbcType=VARCHAR},
                #{rspContent,jdbcType=VARCHAR})
    </insert>
    <update id="updateOne" parameterType="com.jicr.springboottest.model.table.Logs">
        update logs
        <set>
            <if test="seq != null">seq = #{seq,jdbcType=VARCHAR},</if>
            <if test="serverCode != null">server_code = #{serverCode,jdbcType=VARCHAR},</if>
            <if test="serverName != null">server_name = #{serverName,jdbcType=VARCHAR},</if>
            <if test="headReqDate != null">head_req_date = #{headReqDate,jdbcType=DATE},</if>
            <if test="headReqTime != null">head_req_time = #{headReqTime,jdbcType=VARCHAR},</if>
            <if test="headReqOrgan != null">head_req_organ = #{headReqOrgan,jdbcType=VARCHAR},</if>
            <if test="reqContent != null">req_content = #{reqContent,jdbcType=VARCHAR},</if>
            <if test="headRspDate != null">head_rsp_date = #{headRspDate,jdbcType=DATE},</if>
            <if test="headRspTime != null">head_rsp_time = #{headRspTime,jdbcType=VARCHAR},</if>
            <if test="rspContent != null">rsp_content = #{rspContent,jdbcType=VARCHAR},</if>
        </set>
        where seq = #{seq,jdbcType=VARCHAR}
    </update>
</mapper>

六、dao目录下创建LogsMapper.java接口

LogsMapper.java接口内容

package com.jicr.springboottest.dao;

import com.jicr.springboottest.model.table.Logs;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

@Mapper
public interface LogsMapper {
    Logs selectByServerCode(@Param("seq") String seq);

    Boolean updateOne(Logs Logs);

    Boolean insertOne(Logs Logs);

}

 注意LogsMapper.java接口与LogsMapper.xml文件对应关系

 

举报

相关推荐

0 条评论