我的编程空间,编程开发者的网络收藏夹
学习永远不晚

springBoot+mybaties后端多层架构的实现示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

springBoot+mybaties后端多层架构的实现示例

前期准备

1.建立一个springBoot项目

2.导入相关的pom依赖

<?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.7.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>etf</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>etf</name>
    <description>etf</description>
 
        <properties>
            <java.version>1.8</java.version>
            <mybatis-plus.version>3.4.2</mybatis-plus.version>
        </properties>
 
 
    <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
 
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.4</version>
            <scope>provided</scope>
        </dependency>
 
        <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>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
</project>

建立相关目录

说明:

各层名称说明补充
controller与前端交互的接口部分 
service层业务逻辑主要写的地方 
mapper层mapper接口,对应mybatis的sql.xml 
mapper.xml层在resource中,mybaites自动将数据返回给mapper层 
dao与数据库1v1对应的类,驼峰-》对应数据库的下划线 

resource中的目录

idea下载安装插件

lombok

mybaits-tool(任意工具都可以plugin里很多,主要用于xml与mapper跳转)

配置mybais-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
 
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&amp;autoReconnect=true&amp;allowMultiQueries=true"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/EtfHotMapper.xml"/>
        <mapper resource="mapper/EtfTeachMapper.xml"/>
        <mapper resource="mapper/TestEditorMapper.xml" />
        <mapper resource="mapper/TestClientMapper.xml" />
    </mappers>
 
</configuration>

dao层案例:

package com.example.etf.story.dao;
 
import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
 
import java.util.Date;
 
@Data
public class TestStory {
 
    private int storyId;
    private String initInfo;
    private String storyName;
    private String storyType;
    private int status;
    private String creater;
    private String auditor;
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    private Date updateTime;
    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
    private Date createTime;
}

数据库建表案例

附送他的建表语句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
 
-- ----------------------------
-- Table structure for test_story
-- ----------------------------
DROP TABLE IF EXISTS `test_story`;
CREATE TABLE `test_story`  (
  `story_id` int(0) NOT NULL AUTO_INCREMENT COMMENT '第一层id',
  `init_info` json NOT NULL COMMENT '初始信息',
  `story_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '名称',
  `story_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '属于种类,学习,游戏',
  `status` int(0) NULL DEFAULT NULL COMMENT '状态,0未发布,1未审核,2不通过,3审核通过,4失效',
  `creator` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '作者',
  `auditor` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '审核人',
  `update_time` timestamp(0) NULL DEFAULT NULL COMMENT '更新时间',
  `create_time` timestamp(0) NULL DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`story_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
 
SET FOREIGN_KEY_CHECKS = 1;

Paramr案例

(前端字段交互部分)

例:入口(查询条件)

package com.example.etf.story.paramer;
 
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
 
import java.util.ArrayList;
import java.util.List;
 
@Data
public class StorySelectParam {
        private int pageNum=1;
        private int pageSize=8;
        @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
        private List<String> updateTime;
        @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
        private List<String> createTime;
        private String creator;
        private String storyName;
        private String storyType;
 
        private int sqlStart;//limit的开始
        private int sqlEnd;//limit的结束
 
 
}

返回前端内容(页码以及本次总条数,用于分页)

package com.example.etf.story.paramer;
 
import com.example.etf.story.dao.TestStory;
import lombok.Data;
 
import java.util.List;
 
@Data
public class StoriesParam {
    private List<TestStory> testStories;
    private int total;
    private int pageNum;
    private int  pageSize;
}

Controller层案例

package com.example.etf.story.controller;
 
 
import com.example.etf.story.dao.TestStory;
import com.example.etf.story.paramer.StoriesParam;
import com.example.etf.story.paramer.StorySelectParam;
import com.example.etf.story.service.TestClientService;
import com.example.etf.story.service.TestEditorService;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
 
import javax.annotation.Resource;
import java.util.List;
 
@Controller
@RestController
public class TestClientController {
 
    @Resource
    private TestClientService clientService;
 
    //获取所有已发布story
    @PostMapping("/selectStorysByPublic")
    @ResponseBody
    public StoriesParam selectStorysByPublic(@RequestBody StorySelectParam storySelectParam){
        return clientService.selectStorysByPublic(storySelectParam);
    }
 
}

Service层案例

package com.example.etf.story.service;
 
import com.example.etf.controller.SqlSessionF;
import com.example.etf.story.dao.TestStory;
import com.example.etf.story.mapper.TestClientMapper;
 
import com.example.etf.story.paramer.StoriesParam;
import com.example.etf.story.paramer.StorySelectParam;
import org.springframework.stereotype.Service;
 
import java.util.List;
 
@Service
public class TestClientService {
    public StoriesParam selectStorysByPublic(StorySelectParam storySelectParam){
        TestClientMapper mapper = new SqlSessionF().getSqlSession().getMapper(TestClientMapper.class);
        int pageNum = storySelectParam.getPageNum();
        int pageSize = storySelectParam.getPageSize();
        if(pageNum==0 || pageSize==0){
            storySelectParam.setSqlStart(0);
            storySelectParam.setSqlEnd(8);
        }else {
            storySelectParam.setSqlStart((pageNum - 1) * pageSize);
            storySelectParam.setSqlEnd(pageNum * pageSize);
        }
        System.out.println(storySelectParam);
 
        List<TestStory> testStories = mapper.selectStorysByPublic(storySelectParam);
        StoriesParam storiesParam = new StoriesParam();
        storiesParam.setTestStories(testStories);
        storiesParam.setPageNum(pageNum);
        storiesParam.setPageSize(pageSize);
 
        storiesParam.setTotal(mapper.getTotal(storySelectParam));
 
        return storiesParam;
 
    }
}

Mapper层案例

package com.example.etf.story.mapper;
 
import com.example.etf.story.dao.TestStory;
import com.example.etf.story.dao.TestStoryStage;
import com.example.etf.story.paramer.StoriesParam;
import com.example.etf.story.paramer.StorySelectParam;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
 
import java.util.List;
 
@Mapper
@Component
public interface TestClientMapper {
    //分页查询所有故事
 
    List<TestStory> selectStorysByPublic(StorySelectParam storySelectParam);
    int getTotal(StorySelectParam storySelectParam);//总数用于分页
}

SQL.xml案例

(resource下的mapper)

TestClientMapper.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.example.etf.story.mapper.TestClientMapper">
 
<select id="selectStorysByPublic" resultType="com.example.etf.story.dao.TestStory">
    select * from
 
    test_story
 
    where
    <if test=" storyName==null or storyName=='' ">
        story_name !=""
    </if>
 
 
    <if test="storyName !='' and storyName !=null ">
        story_name like concat('%',#{storyName},'%')
    </if>
 
    <if test="creator !='' and creator !=null ">
        and creator like concat('%',#{creator},'%')
    </if>
 
    <if test="storyType !='' and storyType !=null ">
        and story_type like concat('%',#{storyType},'%')
    </if>
 
    <if test="updateTime.size()>0 and updateTime !=null">
        <![CDATA[ and DATE_FORMAT(update_time, '%Y-%m-%d') >= #{updateTime[0]} ]]>
        <![CDATA[ and DATE_FORMAT(update_time, '%Y-%m-%d') <= #{updateTime[1]} ]]>
    </if>
    <if test="createTime.size()>0 and createTime !=null">
        <![CDATA[ and DATE_FORMAT(create_time, '%Y-%m-%d') >= #{createTime[0]} ]]>
        <![CDATA[ and DATE_FORMAT(create_time, '%Y-%m-%d') <= #{createTime[1]} ]]>
    </if>
    limit ${sqlStart},${sqlEnd}
</select>
 
<select id="getTotal" resultType="int">
    select count(1) from
 
    test_story
 
    where
    <if test=" storyName==null or storyName=='' ">
        story_name !=""
    </if>
 
 
    <if test="storyName !='' and storyName !=null ">
        story_name like concat('%',#{storyName},'%')
    </if>
 
    <if test="creator !='' and creator !=null ">
        and creator like concat('%',#{creator},'%')
    </if>
 
    <if test="storyType !='' and storyType !=null ">
        and story_type like concat('%',#{storyType},'%')
    </if>
 
    <if test="updateTime.size()>0 and updateTime !=null">
        <![CDATA[ and DATE_FORMAT(update_time, '%Y-%m-%d') >= #{updateTime[0]} ]]>
        <![CDATA[ and DATE_FORMAT(update_time, '%Y-%m-%d') <= #{updateTime[1]} ]]>
    </if>
    <if test="createTime.size()>0 and createTime !=null">
        <![CDATA[ and DATE_FORMAT(create_time, '%Y-%m-%d') >= #{createTime[0]} ]]>
        <![CDATA[ and DATE_FORMAT(create_time, '%Y-%m-%d') <= #{createTime[1]} ]]>
    </if>
 
</select>
</mapper>

同志们辛苦了,新手都会觉得为什么要用这个?这么复杂。一个类不好吗?

对于老手都能理解(当你做项目后,就知道,一个项目的简单模块,就有几十个接口。轻松维护,多人协同,第一次搭建稍微麻烦点,后续开发异常舒服)

 到此这篇关于springBoot+mybaties后端多层架构的实现示例的文章就介绍到这了,更多相关springBoot mybaties多层架构内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

springBoot+mybaties后端多层架构的实现示例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MVC的多层架构怎么实现

本文小编为大家详细介绍“MVC的多层架构怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“MVC的多层架构怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。多层架构是什么?多层架构是开发人员在开发过程当
2023-06-17

SpringBoot+Vue前后端分离实现审核功能的示例

SpringBoot+Vue前后端示例展示如何实现审核功能,包括后端实体、服务、SpringSecurity配置和前端组件。后端使用Java和SpringBoot,定义了审核实体、仓库和服务。前端使用Vue.js,创建了组件、模板和数据模型,并连接到后端服务。集成包括定义RESTAPI、设置Vue路由和注册审核组件。该示例提供了可扩展、安全和用户友好的解决方案,使开发人员能够轻松地将审核功能添加到他们的应用程序中。
SpringBoot+Vue前后端分离实现审核功能的示例
2024-04-02

SpringBoot实现前后端分离国际化的示例详解

Springboot国际化可以帮助使用者在不同语言环境中构建应用程序,这样应用程序可以有效地适应不同语言文化背景下的用户需求。本文主要介绍了SpringBoot实现前后端分离国际化的方法,需要的可以参考一下
2023-02-22

SpringSecurity实现前后端分离的示例详解

SpringSecurity默认提供账号密码认证方式,具体实现是在UsernamePasswordAuthenticationFilter中,这篇文章主要介绍了SpringSecurity实现前后端分离的示例详解,需要的朋友可以参考下
2023-03-14

SpringBoot实现多个子域共享cookie的示例

本文主要介绍了SpringBoot实现多个子域共享cookie的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-15

SpringBoot整合WebSocket实现后端向前端发送消息的实例代码

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,下面这篇文章主要给大家介绍了关于SpringBoot整合WebSocket实现后端向前端发送消息的相关资料,需要的朋友可以参考下
2023-03-06

flask-socketio实现前后端实时通信的功能的示例

本文主要介绍了flask-socketio实现前后端实时通信的功能的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
2023-05-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录