SpringBoot2.x 自动化生成代码整合Mybatis

SpringBoot 2.0 整合 Mybatis 写在前言: 学习前后端分离也有一段时间了,基于Vue + Spring Boot + mybaits + webpack2 恰逢得知Spring Boot已经升级到2.0,闲来无事研究了下Spring Boot 2.0 整合了一个Spring Boot2.0 + Mybatis 的demo 并成功运行。 搭建期间也遇到很多坑,好在一一解决~ 本文主要分享 SpringBoot2.0 和... 阅读详情

前言

Mybatis 是一个持久层ORM框架,负责Java与数据库数据交互,也可以简易理解为中介,相对于它,还有个中介是hibernate,不过在mybatis中sql语句的灵活性,可优化性比较强,这也是现在大多数人选择的原因。

1. mapper.xml、dao接口、实体类自动生成

下载 pan.baidu.com/s/1JY7Xduk5… 工具包

1.1 修改配置文件generator.xml

解压之后,这里把文件拷贝到了C:\resources\generator文件夹下,以下称为"当前文件目录"
一次配置,终身受益

generator.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动包位置 也就是刚解压的文件的位置加上 mysql-connector-java-5.1.34.jar-->
    <classPathEntry location="C:\resources\generator\mysql-connector-java-5.1.34.jar" />
    <!--这里也适用Oracle数据库的自动生成-->
    <!-- <classPathEntry location="C:\resources\generator\ojdbc6.jar" /> -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <!-- 去除生成日期 -->
            <property name="suppressDate" value="true"/>
            <!-- 去除所有的注解 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!-- 数据库链接URL、用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/ceilan" userId="root" password="123456">
        <!-- <jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="scott" password="tiger">-->
        </jdbcConnection>
        <!--java类型处理器-->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- 生成模型的包名和位置 -->
        <javaModelGenerator targetPackage="com.example.entity" targetProject="C:\resources\generator\src">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成的映射文件包名和位置 -->
        <sqlMapGenerator targetPackage="mapping" targetProject="C:\resources\generator\src">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.example.dao" targetProject="C:\resources\generator\src">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 要生成哪个表,更改tableName(数据库里表名)和domainObjectName(实体名,一般首字母大写)就可以 -->
        <table tableName="area" domainObjectName="Area" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
    </context>
</generatorConfiguration>

1.2 用Java运行自动生成

在当前目录下打开cmd命令,运行如下
注 : windows系统可直接执行 [ 生成.bat ] 批处理文件

java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite

然后把当前目录src下的com文件夹拷贝到项目文件夹下
把mapping文件拷贝到resources文件夹下

目录结构如上

2.集成Mybatis框架

2.1 引入依赖

compile "mysql:mysql-connector-java:5.1.39"
compile 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.2.0'

2.2 启动类DemoApplication.java增加扫描配置

package com.example;

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

@SpringBootApplication
// mapper接口 扫描包配置
@MapperScan(value = "com.example.dao")
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

2.3 添加项目首页index.html

在resources的templates文件中新建index.html

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>Welcome SpringBoot</h1>
</body>
</html>

然后在 DemoApplication 启动类中添加

    //欢迎页面 首页
    @RequestMapping("/")
    public String index(){
        return "index";
    }

之前已经在application.yml中配置了资源映射设置,如下

spring: 
  mvc:
    view:
      suffix: .html
  resources:
    static-locations: classpath:/templates

所以现在的项目启动访问 http://localhost:8080/ 是可以直接访问到首页的

3.添加业务层和控制层实现CRUD(增删改查)

增加业务逻辑层包service以及在其下增加impl包用来实现其接口

3.1业务逻辑层接口 AreaService.java

package com.example.service;

import com.example.entity.Area;

/**
 * 这里给dao层的代码拷贝过来先使用
 * created by cfa  2018-11-08 下午 9:56
 **/
public interface AreaService {

    int deleteByPrimaryKey(Integer id);

    int insert(Area record);

    int insertSelective(Area record);

    Area selectByPrimaryKey(Integer id);

    int updateByPrimaryKeySelective(Area record);

    int updateByPrimaryKey(Area record);
}

3.2业务层实现类 AreaServiceImpl.java

package com.example.service.impl;

import com.example.dao.AreaMapper;
import com.example.entity.Area;
import com.example.service.AreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.Serializable;

/**
 * 这里的@Service注解相当于自动注册到Spring的Bean
 * 相当于原来的Application.xml里的 <bean id="areaServiceImpl" class="com.example.service.impl.AreaServiceImpl"/>
 * created by cfa  2018-11-08 下午 9:58
 **/
@Service
public class AreaServiceImpl implements AreaService, Serializable {

    private final AreaMapper areaMapper;

    @Autowired
    public AreaServiceImpl(AreaMapper areaMapper) {
        this.areaMapper = areaMapper;
    }

    @Override
    public int deleteByPrimaryKey(Integer id) {
        return areaMapper.deleteByPrimaryKey(id);
    }

    @Override
    public int insert(Area record) {
        return areaMapper.insert(record);
    }

    @Override
    public int insertSelective(Area record) {
        return areaMapper.insertSelective(record);
    }

    @Override
    public Area selectByPrimaryKey(Integer id) {
        return areaMapper.selectByPrimaryKey(id);
    }

    @Override
    public int updateByPrimaryKeySelective(Area record) {
        return areaMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(Area record) {
        return areaMapper.updateByPrimaryKey(record);
    }
}

3.3控制层的AreaController.java

package com.example.controller;

import com.example.entity.Area;
import com.example.service.AreaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("area")
public class AreaController {

    private final AreaService areaService;

    @Autowired
    public AreaController(AreaService areaService) {
        this.areaService = areaService;
    }

    @RequestMapping("query")
    public Area areaList(){
        return areaService.selectByPrimaryKey(1);
    }

}

看到这里,想必看到很多次@Autowired,@Service等注解了,这就是Spring的两大核心之一的IOC(Inversion of Control),也就是DI依赖注入;
Spring的两大核心AOP和IOC大家面试的时候也基本都有问到,到这里你IOC就不用头疼了;

在Spring之前我们写代码,用到某个类,我们都需要去new一下,现在有个叫Spring,我把控制权交给它,OK,然后在给业务层盖上章(加注解),然后让这个叫Spring的家伙开始工作的时候,交给他去做,控制层需要逻辑A,OK,之前我们已经在控制层用DI注入了A,Spring就会把A的调用给控制层,下面说松紧耦合度,Spring之前,到处写的都是new新建对象,修改一个类很难,现在随意修改,只需要盖个章(DI),让Spring去管就可以了,你现在要问我原理,那些文邹邹的,后续在研究研究,原理相当于文言文,只有研究透了,才能用大家都理解的话写出来。

业务层提供的接口加实现类就是为了实现松耦合,不然一个类就解决了,就像一个手机,坏了,里面的电池,屏幕,主板什么的拆下来还能用,这就是松耦合。

4.热部署插件

问题:你为什么不选择springboot自带的热部署插件
答: 和之前的朋友问我的一样,问我为啥不把生成代码的插件放在项目中,一个项目还好,你要是写了多个项目,一个一个去部署,麻烦不,所以一次配置,一劳永逸。

5.关于AOP——Spring的又一大核心

面向切面编程(AOP是Aspect Oriented Program的首字母缩写)我们知道,面向对象的特点是继承、多态和封装.而封装就要求将功能分散到不同的对象中去,这在软件设计中往往称为职责分配.实际上也就是说,让不同的类设计不同的方法。这样代码就分散到一个个的类中去了。这样做的好处是降低了代码的复杂程度,使类可重用.但是人们也发现,在分散代码的同时,也增加了代码的重复性.什么意思呢?比如说,我们在两个类中,可能都需要在每个方法中做日志。按面向对象的设计方法,我们就必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类与类之间无法联系,而不能将这些重复的代码统一起来。 也许有人会说,那好办啊,我们可以将这段代码写在一个独立的类独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类跟我们上面提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有什么办法,能让我们在需要的时候,随意地加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、 指定位置上的编程思想就是面向切面的编程。 一般而言,我们管切入到指定类指定方法的代码片段称为切面,而切入到哪些类、哪些方法则叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要时再切入对象中去,从而改变其原有的行为。 这样看来,AOP其实只是OOP的补充而已。OOP从横向上区分出一个个的类来,而AOP则从纵向上向对象中加入特定的代码。有了AOP,OOP变得立体了。如果加上时间维度,AOP使OOP由原来的二维变为三维了,由平面变成立体了。从技术上来说,AOP基本上是通过代理机制实现的。 AOP在编程历史上可以说是里程碑式的,对OOP编程是一种十分有益的补充 引自:xiaobashagua.iteye.com/blog/196368…你问我为啥排这么紧,哈哈,好东西是留给有耐心的人看的,如果你把这篇文章的IOC和AOP仔细看了,你会对这俩的理解又深了一个层次

【Qt】Qt6系列教程汇总_qt6教程 简介:QT相关电子书、建议和相关参考网址。 阅读详情

相关推荐

强化学习之课程学习法

课程学习是一种有计划的学习方法,模拟人类学习的过程。它通过设置逐步增加难度的任务序列,让学习系统从简单的任务开始,逐渐过渡到复杂任务。这一方法可以显著提高训练效率,避免智能体一开始就面临过于复杂的任务,从而导致学习过程困难。逐步难度增加:从简单的任务开始,逐步增加任务的难度,直到智能体能够解决最复杂的任务。动态调整:根据智能体的学习进展,动态调整任务的难度,保证学习的过程始终处于一个适当的挑战性范围。

m0_64087341的博客 2695

mybatis generator生成example_[Springboot系列] SpringBoot与Mybatis结合

本文作者:cuifuanMybatis 是一个持久层ORM框架,负责Java与数据库数据交互,也可以简易理解为中介,相对于它,还有个中介是hibernate,不过在mybatis中sql语句的灵活性,可优化性比较强,这也是现在大多数人选择的原因。1. mapper.xml、dao接口、实体类自动生成下载 :https://pan.baidu.com/s/1JY7Xduk5E3KPm58Ajnueu...

weixin_39752941的博客 349

Synares病毒实战:如何从U盘感染中恢复你的Excel和EXE文件(附专杀工具推荐)

本文详细介绍了Synares感染型病毒的典型特征与传播机制,特别是其通过U盘感染Excel和EXE文件的行为。文章提供了一套从应急隔离、诊断到使用专杀工具进行深度清除与文件恢复的完整实战流程,并推荐了有效的安全软件和修复方法,旨在帮助用户最大程度救回重要数据并构建长效安全防护习惯。

weixin_29230649的博客 1833

mybatis generator生成example_mybatis中关于example类详解

这几天刚接触example,很多内容都是破碎的,写一篇文章加深理解。一、什么是example类 mybatis-generator会为每个字段产生Criterion,为底层的mapper.xml创建动态sql。如果表的字段比较多,产生的example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可...

weixin_39932181的博客 2130

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

SpringBoot集成SpringSecurity5和OAuth2 — 2、OAuth2客户端【SSO单点登录时作为客户端】

Mr_XiMu的博客 3744

dxf-viewer 查看器

dxf-viewer SDK 的示例,它是一个基于 Three.js 和 Vue3 构建的基于 WebGL 的 BIM 模型查看器。它用于查看 DWG/DXF/PDF 文件。面积测量 - 角度测量 -标记。

qq_25547755的博客 866

使用maven插件自动生成数据层代码

使用的插件 maven-generator mavne插件 <!--自动生成数据层代码--> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.7</version> <config

qq_1243443888的博客 285

基于航天宏图PIE-SAR软件的高分三号(GF-3)SAR影像的预处理

软件官网 航天宏图—国内领先的卫星运营与应用服务提供商(官网) 一、数据导入 数据导入-GF-3-根据模式选择 参数文件导入解压后GF-3数据的XML文件 通道自动填充 设置输出目录 确定 等待,加载图像、自动构建金字塔 二、复数数据转换 强度/幅度特征是SAR影像最主要的特征之一,基于SAR强度/幅度影像可以提取地物目标信息,因此需要将SAR复数数据转换为SAR强度/幅度数据。导入输入影像,设置参数类型,输出目录、命名、类型; 漫长的等待 三、多视 为提...

weixin_52127098的博客 9004

MyBatis Generator产生的Example类

Example类用于构造复杂的筛选条件。 基本概念 Criterion Criterion是最基本,最底层的Where条件,用于字段级的筛选,feild用于指代字段名字,列举如下: 只有一个条件,不需要其他参考值 feild IS NOLL feild IS NOT NULL 与一个参考值进行算数运算 feild > value feild >= value feild

我的程序人生(亦山札记) 2万+

Unity AR涂涂乐实战:用户上传图片秒变3D模型新皮肤(附完整代码)

本文详细介绍了如何在Unity AR应用中实现用户上传图片动态生成3D模型皮肤的功能,重点讲解了动态创建材质球的技术方案和性能优化策略。通过完整的代码示例,开发者可以学习到多源图片处理、移动端内存管理以及AR场景适配等核心技巧,快速打造高性能的儿童教育类AR应用。

weixin_31509753的博客 370

【0000】PostgreSQL V17.4 内核源码剖析专栏(2017 ~ 2025.11.28 更新)

本专栏将会持续更新,直到将PostgreSQL V13.2源码涉及的所有原理、技术剖析完成为止。每一篇文章都是经过多次的源码阅读 + 调试,得以验证之后才梳理成文章形式。最终该专栏的文章数量应该在一万篇或以下,这也是文章序号从【0000】开始的缘故。通过本专栏的学习,能够让你掌握PostgreSQL数据库中的每个技术背后,底层的实现原理。

Postgres 数据库内核开发工程师 1万+

SpringBoot 集成 mybatis 以及自动化测试代码实现

Mybatis 和 logback 的应用配置1、在 module 的 pom.xml 文件中,加载 springboot 和 swagger、lombok、fastjson、mysql、...

qq_18244417的博客 711

部分旧版统信国产系统下载资源

注:全部自来网络查找,建议到官网下载最新版。

aggs1990的专栏 5265

SpringBoot2.x【四】自动化生成代码整合Mybatis

SpringBoot2.x【四】自动化生成代码整合Mybatis Mybatis 是一个持久层ORM框架,负责Java与数据库数据交互,也可以简易理解为中介,相对于它,还有个中介是hibernate,不过在mybatis中sql语句的灵活性,可优化性比较强,这也是现在大多数人选择的原因。 1. mapper.xml、dao接口、实体类自动生成 下载 https://pan.baidu.com...

Java Pro 19万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

SpringBoot2.x 整合 MyBatisGenerator

https://www.jianshu.com/p/9cdb9c913c69

日拱一卒 479

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

SpringBoot整合MyBatis-Plus实战与避坑指南

MyBatis-Plus作为MyBatis的增强工具,通过简化CRUD操作和提供代码生成器等功能,显著提升Java后端开发效率。其核心原理是基于MyBatis的拦截器机制进行功能扩展,与SpringBoot的自动化配置相结合,可以实现零配置快速集成。在技术价值方面,这种组合特别适合需要快速迭代的企业级应用开发,能减少约70%的重复DAO层代码。实际应用场景包括电商系统订单管理、CMS内容管理系统等数据驱动型项目。本文以最新稳定版本为例,详细演示SpringBoot与MyBatis-Plus的整合流程,重点解

cuankuangzhong6373的博客 481

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot 2.X整合Mybatis

实际上Mybatis的整合过程像极了我们程序员的一生。 在SpringBoot 整合Mybatis之前,我们回忆回忆以前 MyBatis 单独使用时,myBatis 核心配置文件要配置数据源、事务、连接数据库账号、密码....是的全是这货一个人干,都要亲力亲为。这就是我们的低谷期 myBatis 与 spring 整合的时候,配置数据源、事务、连接数据库的账号什么的都交由 spring 管理就行,就不用什么都自己管理自己去干。这就是我们春风得意的时候,事业有着落... 再后来,Spring

宜春 6449

Spring Boot 3.x 整合 MyBatis 代码生成器插件

是一个 Maven 插件,用于生成 MyBatis 的代码(如 Mapper 接口、Mapper XML 文件等),官方文档地址: https://mybatis.org/generator/。它可以根据数据库表自动生成相应的 Java 实体类、Mapper 接口和 XML 映射文件,大大减少了手动编写这些重复且机械化的代码的工作量。

七禾页话的博客 1642

springboot2.1.x整合mybatis plus3.1.x

springboot2整合mybatis plus3,实现代码逆向生成,生成DAO(mapper),service,controller层和相应的xml基本配置 大致说明:不需要传统的什么逆向生成插件,但是要配置lombok,其他默认已经具备一定的spirng boot基础,下面直接说重点. 大致流程:配置启动类-->配置基本yml-->处理一些细节-->访问接口 官方教程...

长草颜团子 12万+

【SpringBoot】SpringBoot整合Mybatis、druid

SpringBoot是一项十分重要的技术,希望我们大家可以把它学好,这一章讲解的是SpringBoot如何整合Mybatis、druid。由于Mybatis-plus也是一项重要的技术,下一次会讲Mybatis及与SpringBoot的整合,喜欢的小伙伴可以订阅专栏。

未来可以改变 1982

Spring Boot3整合MyBatis Plus

⛰️个人主页: 蒾酒🔥系列专栏:《spring boot实战》目录1.前置条件2.导坐标3.配置数据源4.mybatis-plus基础配置5.配置mapper扫描路径6.配置分页拦截器7.MyBatis Plus代码生成器整合1.导坐标2.编写代码生成逻辑8.整合Druid连接池已经初始化好一个spring boot项目且版本为3X,项目可正常启动初始化教程:新版idea创建spring boot项目-优快云博客https://blog.csdn.net/qq_62262918/article/

蒾酒的博客 8943

SpringBoot2.x整合MyBatis-Plus

【官网】 https://mp.baomidou.com/ 【maven 依赖】 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.2.0</version&...

日拱一卒 1252

SpringBoot整合Mybatis-plus及用法

一、mybatis-plus简介: Mybatis-Plus(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。这是官方给的定义,关于mybatis-plus的更多介绍及特性,可以参考mybatis-plus官网。那么它是怎么增强的呢?其实就是它已经封装好了一些crud方法,我们不需要再写xml了,直接调用这些方法就行,就类似于JPA。并且3.X系列支持lambda语法,让我在写条件构造的时候少了很多的"魔法值",从代码结构上更简洁了.

qq_42281649的博客 7万+

SpringBoot2.X +Mybatis-Plus 3.X 代码生成器

SpringBoot2.X +Mybatis-Plus 3.X 代码生成器Pom 文件复制到项目即可使用 适合MP3.0版本 使用 Pom 文件 <!--Mybatis Plus--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis...

太难了我不会 2459

SpringBoot2.x整合MyBatis通用Mapper4

通用 Mapper4 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example 相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。 【官方文档】 https://github.com/abel533/Mapper/wiki 【maven依赖】 http://...

日拱一卒 1613
上一篇: 【转】关于Spring的两三事:万物之始—BeanDefinition
下一篇: bug现场谜之报错也识趣-客户一上班报错就消失了!
Java技术那些事儿
博客等级 码龄5年 2306粉丝 2584原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值