`
jy03100000
  • 浏览: 34218 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Springboot整合(2)——MyBatis整合

 
阅读更多

Springboot整合(2)——MyBatis整合

1. 配置

1. 1 pom文件中添加依赖

        <!-- mysql 驱动-->

        <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

        </dependency>

       

        <!-- Mybatis -->

        <dependency>

            <groupId>org.mybatis.spring.boot</groupId>

            <artifactId>mybatis-spring-boot-starter</artifactId>

            <version>1.3.1</version>

        </dependency>

 

        <!-- Mybatis代码自动生成-->

        <dependency>

            <groupId>org.mybatis.generator</groupId>

            <artifactId>mybatis-generator-core</artifactId>

            <version>1.3.2</version>

        </dependency>

 

1.2 application.yml文件中增加数据库和mybatis的配置

spring:

  datasource:

    url: jdbc:mysql://localhost:3306/knowledgeisland?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&allowMultiQueries=true

    username: root

    password: root

    driver-class-name: com.mysql.jdbc.Driver

 

mybatis:

  ##配置mapper.xml扫描路径

  mapper-locations: classpath:mapper/*Mapper.xml,classpath:mapper/auto/*Mapper.xml

  ##配置实体类所在的包

  type-aliases-package: tect.luoyu.ki.entity

 

1.3 在启动类Application里配置mapper接口的扫描路径

@MapperScan("tech.luoyu.ki.mapper")



 

2. 使用mybatis-generator生成代码

mybatis官方提供的代码生成工具可以为我们自动生成entitymapper接口类以及mapper.xml 本节将使用基类产生相应的代码。

 

2.1  创建表并插入一条数据

CREATE TABLE `sys_user` (

  `id` varchar(36) NOT NULL COMMENT '主键uuid',

  `userName` varchar(30) NOT NULL COMMENT '用户名',

  `mobilephone` varchar(11) DEFAULT NULL COMMENT '联系电话',

  `loginName` varchar(30) NOT NULL COMMENT '登录账号',

  `loginPassword` varchar(50) NOT NULL COMMENT '登录密码',

  `creater` varchar(36) NOT NULL COMMENT '创建人',

  `createTime` datetime NOT NULL,

  `updater` varchar(36) NOT NULL COMMENT '更新人',

  `updateTime` datetime NOT NULL,

  `dataStatus` tinyint(4) NOT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

INSERT INTO `sys_user` VALUES ('1', '风木羽', '18666666666', 'admin', 'admin', '1', '2018-01-01 10:52:00', '1', '2018-01-01 10:52:00', '1');

 

 

 

2.2 创建基类,基类包含以下6个基本属性(具体情况按需)。

    private String id;

    private String creater;

    private Date createTime;

    private String updater;

    private Date updateTime;

    private Byte dataStatus;

    ...getter,setter,toString,equals,hashCode...

注:创建基类的目的在于可以为所有的entity对象添加一些通用方法,如preInsert(插入前做预插入工作:生成ID,设置creater,设置createTime),preUpdate(更新前做预更新工作:生成ID,设置updater,设置updateTime

    publicvoid preInsert() {

        setId(UUID.randomUUID().toString());

        this.updater = "1";

        this.creater = "1";

        this.updateTime = new Date();

        this.createTime = this.updateTime;

        bytedataStatus = 1;

        setDataStatus(dataStatus);

    }

 

    publicvoid preUpdate() {

        this.updater = "1";

        this.updateTime = new Date();

    }

 

2.3 创建generatorConfig.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>

 

  <!-- 指定生成一组对象的环境 -->

  <context id="mysql" targetRuntime="MyBatis3">

    <!-- 自动识别数据库关键字,默认false,如果设置为true,根据SqlReservedWords中定义的关键字列表;

        一般保留默认值,遇到数据库关键字(Java关键字),使用columnOverride覆盖

     -->

    <property name="autoDelimitKeywords" value="false"/>

    <!-- 生成的Java文件的编码 -->

    <property name="javaFileEncoding" value="UTF-8"/>

    <!-- 格式化java代码 -->

    <property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>

    <!-- 格式化XML代码 -->

    <property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>

 

    <!-- beginningDelimiterendingDelimiter:指明数据库的用于标记数据库对象名的符号,比如ORACLE就是双引号,MYSQL默认是`反引号; -->

    <property name="beginningDelimiter" value="`"/>

    <property name="endingDelimiter" value="`"/>

    <!-- 这个plugin是手写的一个用于生成hibernate校验注释的插件,会在下文说明其效果 -->

    <plugin type="tech.luoyu.ki.generator.JSR303Plugin"></plugin>

    <!-- generate entity时,生成serialVersionUID -->

    <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

    <plugin type="org.mybatis.generator.plugins.EqualsHashCodePlugin"></plugin>

    <plugin type="org.mybatis.generator.plugins.ToStringPlugin"></plugin>

    <plugin type="org.mybatis.generator.plugins.CaseInsensitiveLikePlugin"></plugin>

   

    <commentGenerator>

        <!-- 是否去除自动生成的注释 true:是 false: -->

        <property name="suppressAllComments" value="true" />

    </commentGenerator>

       

    <jdbcConnection driverClass="com.mysql.jdbc.Driver"

        connectionURL="jdbc:mysql://localhost:3306/knowledgeisland"

        userId="root"

        password="root">

    </jdbcConnection>

 

    <!-- 定义Java类型解析器的属性 -->

    <javaTypeResolver >

      <!-- 指定MyBatis发生器是否应该强迫java.math的使用。BigDecimal十进制数值字段,而不是代替积分类型 -->

      <property name="forceBigDecimals" value="false" />

    </javaTypeResolver>

   

    <!-- 定义属性的Java模型生成器;包生成的类将被放置的地方;指定一个目标项目生成的对象 -->

    <javaModelGenerator targetPackage="tech.luoyu.ki.entity.auto" targetProject="src/main/java">

      <property name="enableSubPackages" value="true" />

      <property name="immutable" value="false"/>

      <property name="trimStrings" value="true" />

    <!-- 设置entity的基类 -->

      <property name="rootClass" value="tech.luoyu.ki.entity.BaseEntity"/>

    </javaModelGenerator>

   

    <!-- 定义SQL映射生成器的属性 -->

    <sqlMapGenerator targetPackage="mapper.auto"  targetProject="src/main/resources"><!-- 放置生成的SQL映射文件;指定生成SQL映射的目标项目 -->

      <!-- 选择MGB是否根据基于目录和内省表来生成不同的Java -->

      <property name="enableSubPackages" value="true" />

    </sqlMapGenerator>

 

    <!-- 定义 Java 客户端代码生成器的属性;放置生成的接口和实现类;指定生成接口和类的目标项目 -->

    <javaClientGenerator type="XMLMAPPER" targetPackage="tech.luoyu.ki.mapper.auto"  targetProject="src/main/java">

      <property name="enableSubPackages" value="true" />

    </javaClientGenerator>

 

    <!-- 选择一个table来生成相关文件。必须要有table元素;tableName(必要):要生成对象的表名-->

    <table schema="" tableName="sys_%">

    <property name="useActualColumnNames" value="true"/>

    </table>

 

  </context>

</generatorConfiguration>

注:红色字体为重点和需要按实际分包修改的内容,注意包名需要与1.21.3配置的内容一致,本章末尾会给出当前已分包的结构目录截图

附:JSR303Plugin类的代码

package tech.luoyu.ki.generator;

 

import java.sql.Types;

import java.util.List;

 

import org.mybatis.generator.api.IntrospectedColumn;

import org.mybatis.generator.api.IntrospectedTable;

import org.mybatis.generator.api.PluginAdapter;

import org.mybatis.generator.api.dom.java.Field;

import org.mybatis.generator.api.dom.java.TopLevelClass;

 

publicclass JSR303Plugin extends PluginAdapter {

 

    @Override

    publicboolean validate(List<String> warnings) {

        returntrue;

    }

 

    @Override

    publicboolean modelFieldGenerated(Field field, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn,

            IntrospectedTable introspectedTable, ModelClassType modelClassType) {

        if (true == introspectedColumn.isStringColumn()) {

            if (false == introspectedColumn.isNullable()) {

                topLevelClass.addImportedType("org.hibernate.validator.constraints.NotBlank");

                field.addAnnotation("@NotBlank");

            }

            topLevelClass.addImportedType("javax.validation.constraints.Size");

            field.addAnnotation(

                    "@Size(min = 0, max = " + introspectedColumn.getLength() + " , message = \"长度必须在{min}{max}之间\")");

        }

 

        if (introspectedColumn.getJdbcType() == Types.INTEGER) {

            if (false == introspectedColumn.isNullable()) {

                topLevelClass.addImportedType("javax.validation.constraints.NotNull");

                field.addAnnotation("@NotNull");

            }

            topLevelClass.addImportedType("javax.validation.constraints.Max");

            field.addAnnotation("@Max(value=2147483647,message=\"最大值不能高于{value}\")");

            topLevelClass.addImportedType("javax.validation.constraints.Min");

            field.addAnnotation("@Min(value=-2147483648,message=\"最小值不能低于{value}\")");

        }

 

        returnsuper.modelFieldGenerated(field, topLevelClass, introspectedColumn, introspectedTable, modelClassType);

    }

 

}

2.4 编写生成代码类:Generator.java,该类里用到一个FileTool工具类,就是一个删除文件夹和删除文件的功能,此处就不贴出代码了

/*

 * To change this license header, choose License Headers in Project Properties.

 * To change this template file, choose Tools | Templates

 * and open the template in the editor.

 */

package tech.luoyu.ki.generator;

 

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import java.util.logging.Level;

import java.util.logging.Logger;

 

import org.mybatis.generator.api.MyBatisGenerator;

import org.mybatis.generator.config.Configuration;

import org.mybatis.generator.config.xml.ConfigurationParser;

import org.mybatis.generator.exception.InvalidConfigurationException;

import org.mybatis.generator.exception.XMLParserException;

import org.mybatis.generator.internal.DefaultShellCallback;

 

import tech.luoyu.ki.util.FileTool;

 

public class Generator {

 

         public static void main(String[] args) {

                   generate();

         }

 

         @SuppressWarnings(value = "all")

         private static void generate() {

                   String singleFileName = null;// single

                   // singleFileName = "SysUserMapper.xml";

 

                   // 1. 删除已经存在的mapper.xml

                   File file = new File(Generator.class.getResource("/").getFile());

                   File parentFile = file.getParentFile().getParentFile();

                   String autoMapperRelativePath = "src\\main\\resources\\mapper\\auto";

                   File autoMapperFile = new File(parentFile.getAbsolutePath() + File.separator + autoMapperRelativePath);

                   System.out.println(autoMapperFile.getAbsolutePath());

                   System.out.println(autoMapperFile.exists());

 

                   if (singleFileName == null) {

                            if (autoMapperFile.exists()) {

                                     FileTool.delDir(autoMapperFile.getAbsolutePath(), true);

                            }

 

                            autoMapperFile.mkdirs();

                   } else {

                            autoMapperFile = new File(parentFile.getAbsolutePath() + File.separator + autoMapperRelativePath

                                               + File.separator + singleFileName);

                            if (autoMapperFile.exists()) {

                                     FileTool.delFile(autoMapperFile.getAbsolutePath());

                            }

                   }

 

                   // 2. 重新生成mapper.xml

                   try {

                            List<String> warnings = new ArrayList<String>();

                            boolean overwrite = true;

                            ConfigurationParser cp = new ConfigurationParser(warnings);

                            InputStream stream = Generator.class.getClassLoader().getResourceAsStream("generatorConfig.xml");

                            Configuration config = cp.parseConfiguration(stream);

                            DefaultShellCallback callback = new DefaultShellCallback(overwrite);

                            MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);

                            myBatisGenerator.generate(null);

                   } catch (IOException ex) {

                            Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);

                   } catch (XMLParserException ex) {

                            Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);

                   } catch (InvalidConfigurationException ex) {

                            Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);

                   } catch (SQLException ex) {

                            Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);

                   } catch (InterruptedException ex) {

                            Logger.getLogger(Generator.class.getName()).log(Level.SEVERE, null, ex);

                   }

 

                   System.out.println("代码生成完毕");

         }

}

 

2.5 运行generator类,可以看到entity(且为每个entity生成了example),mapper接口,mapper.xml都已经生成



 

 

生成的entity里红框内容就是上文中提到的JSR303Plugin插件产生的内容,JSR303Plugin插件内的内容可以自己定制,本文的代码只对Stringint做了处理


 

 

3. 测试

3.1 controller里注入mapper,并添加映射方法,这里只是简单测试,就省略service层,直接在controller里调用mapper

         @Resource

    SysUserMapper userMapper;

 

    @RequestMapping(value = "user/list")

    public ModelAndView showUsers() {

        Map<String, Object> model = new HashMap<String, Object>();

        model.put("user", userMapper.selectByPrimaryKey("1"));

        returnnew ModelAndView("user/list", model);

    }

3.2 编写user/list.jsp

<body>

${user.userName }

${user.mobilePhone }

</body>

 

 

 

3.3 运行测试,正常



 

  • 大小: 11.7 KB
  • 大小: 5.8 KB
  • 大小: 25.8 KB
  • 大小: 6.3 KB
  • 大小: 18.8 KB
分享到:
评论

相关推荐

    springboot+mybatis+bootstrap整合的简单框架

    本项目"springboot+mybatis+bootstrap整合的简单框架"旨在提供一个快速开发的解决方案,将三个流行的开源技术——Spring Boot、MyBatis和Bootstrap融合在一起,以简化Web应用的构建过程。 Spring Boot是由Pivotal...

    Springboot项目搭建以及整合mybatis——eclipse

    完成以上步骤后,你就成功地在 Eclipse 上使用 SpringBoot 搭建了一个整合 Mybatis 的项目,并与 MySQL 数据库进行了连接。对于初学者来说,这是一个很好的实践项目,可以帮助理解 SpringBoot 和 Mybatis 如何协同...

    springboot-shiro-mybatis-demo.zip

    《SpringBoot整合Shiro与MyBatis的实战详解》 在现代Java开发中,SpringBoot以其简洁、快速的特性受到了广大开发者的喜爱。而Shiro和MyBatis作为两个非常重要的安全框架和持久层框架,它们的整合可以为Web应用提供...

    SpringBoot+Mybatis整合完整源码

    2. **Mybatis 简介** Mybatis 是一个优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。Mybatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。Mybatis 可以使用简单的 XML 或注解进行配置和...

    SpringBoot整合SSM框架——最简单示例

    SpringBoot整合SSM框架是将Spring、SpringMVC和MyBatis这三大流行Java开发组件融合到一起,以便简化Web应用的开发流程。这个最简单的示例将带你一步步了解如何在SpringBoot项目中实现SSM集成,从而提高开发效率。 ...

    【java框架】SpringBoot(7) -- SpringBoot整合MyBatis(csdn)————程序..pdf

    在Java开发中,...总的来说,SpringBoot整合MyBatis使得数据库操作变得更加简单,通过自动配置和依赖注入,大大减少了开发者的工作量。无论是配置模式、注解模式还是混合模式,都能提供高效、便捷的持久层支持。

    基于SpringBoot + Vue + Mybatis-Plus + Redis + Mysql 等技术栈的外卖点餐系统源码

    这是一个全面的外卖点餐系统开发项目,采用了当前流行的Java后端技术栈——SpringBoot、Mybatis-Plus,以及前端的Vue框架,同时结合了Redis内存数据库和Mysql关系型数据库来提升性能和用户体验。下面将详细阐述这些...

    springboot+mybatis+mysql

    **SpringBoot整合MyBatis** SpringBoot与MyBatis的整合使得开发更加便捷。首先,我们需要在项目中引入MyBatis的SpringBoot起步依赖。然后,通过配置文件(application.yml或application.properties)设置数据源、...

    springboot 整合mybatis 亲测 非常简单就能用了

    在提供的描述中提到,可能使用到了MyBatis的扩展库——MyBatis Plus(BaTiSi)。MyBatis Plus提供了一些便捷的CRUD操作,可以减少开发者编写基础的SQL语句。例如,如果项目中包含`CURD_baomidou-master`这个文件,这...

    iadmin-backend:iadmin后端,springboot + shiro + mybatis

    《iadmin后端:SpringBoot、Shiro与MyBatis深度整合详解》 在现代的Web开发中,高效且灵活的框架集成对于构建强大的后台系统至关重要。本文将深入探讨一个基于Java的项目——"iadmin-backend",它巧妙地融合了...

    springboot SSM整合

    首先,我们需要引入相应的依赖,如Struts2、MyBatis和它们的SpringBoot适配器。然后,配置Struts2的配置文件(struts.xml),定义Action和结果类型,接着配置MyBatis的配置文件(mybatis-config.xml)和Mapper文件。...

    SpringBoot+mybatis-plus+VUE民宿管理系统后台-毕业设计

    SpringBoot+mybatis-plus+VUE民宿管理系统后台-毕业设计 升级为mybatis-plus 加入启动页面类。 修改了一些VUE的其它问题。 本系列环境 环境 win11 工具 idea 2018 jdk 1.8 数据库 mysql5.5 maven 3.6.0 项目导入...

    【初学Demo注解版】SpringBoot+MyBatis+Thymeleaf+MySQL

    这是一个针对初学者设计的整合项目,它将四个关键的技术栈——SpringBoot、MyBatis、Thymeleaf和MySQL——融合在一起,通过注解的方式来简化开发流程。让我们逐一深入探讨这些技术及其在项目中的作用。 **...

    springboot-mybatis整合多数据源方式之一AOP法

    本文将详细讲解如何使用MyBatis和Spring Boot整合实现多数据源,并重点介绍一种方法——AOP(面向切面编程)法。这种方法允许我们在运行时动态地切换数据源。 首先,我们需要理解Spring Boot的自动配置特性。Spring...

    bookkeeping:周先生SpringBoot + Mybatis-plus + Vue整合小案例

    在这个“bookkeeping:周先生SpringBoot + Mybatis-plus + Vue整合小案例”中,我们可以学习到如何将三种流行的技术——SpringBoot、Mybatis-plus和Vue.js整合在一起,创建一个简单的会计记账应用。这个项目主要涵盖...

    springboot_mybatis_generator_plugin.rar

    为了提高开发效率,MyBatis提供了一个实用的工具——MyBatis Generator(MBG),它可以自动生成Java模型类、Mapper接口和XML映射文件,极大地减少了手动编写这些重复性工作的时间。在这个压缩包"springboot_mybatis_...

    个人博客系统(SpringBoot+Mybatis).zip

    三、SpringBoot整合Mybatis 整合SpringBoot和Mybatis,我们可以充分利用两者的优势,创建一个高效且易于维护的博客系统。主要步骤包括: 1. 添加依赖:在pom.xml中引入SpringBoot的starter-web和Mybatis的相关依赖...

    详解SpringBoot 快速整合Mybatis(去XML化+注解进阶)

    总之,通过SpringBoot整合Mybatis并采用注解的方式,我们可以抛弃XML配置文件,实现更加简洁和高效的开发模式。同时,利用Mybatis的映射注解,可以轻松处理对象属性与数据库字段的映射问题,使代码更加整洁,降低...

    MyBatis与Spring整合——通过官方文档进行最简单的整合

    ### MyBatis与Spring整合详解 #### 一、前言 在现代软件开发中,尤其在Java企业级应用领域,Spring框架和MyBatis框架是非常重要的组成部分。Spring框架以其强大的控制反转(IoC)和面向切面编程(AOP)功能,极大...

Global site tag (gtag.js) - Google Analytics