龙空技术网

springboot+mybatis-plus+mysql入门实例

成小同 279

前言:

此刻姐妹们对“ftl分页”大约比较看重,同学们都想要知道一些“ftl分页”的相关内容。那么小编也在网络上收集了一些有关“ftl分页””的相关资讯,希望大家能喜欢,兄弟们快快来了解一下吧!

本篇文章主要是对最近工作的一个总结,做一个简单的记录。本文将通过一个简单的开发实例来讲解springboot、mybatis-plus、mysql的整合开发。本文的目的是,希望读者按着这篇文章的操作步骤,自己能够搭建起项目工程,把示例程序运行起来。并根据自己项目的实际需求进行开发。

1、技术及开发工具简介

使用技术版本介绍

springboot: 2.5.0

mybatis-plus: 3.4.2

mybatis-plus-generator: 3.4.1

mysql: 5.4

intellij idea: 2018.3.2

springboot的目的是对spring应用的环境搭建和开发过程进行简化。其集成大量适用框架,有效解决依赖包的版本冲突问题。内嵌Tomcat容器,直接运行jar包就可以提供web服务。使用springboot来开发程序的项目是比较多的。

mybatis-plus在mybatis基础上做了增强,简化了开发,提高了开发效率。使用起来也比较方便,所以采用该框架来操作数据库。

mysql是流行的开源免费的关系型数据库管理系统。开源免费,使用量大,就选它了。

intellij idea是java语言的集成开发环境,是大多数java开发人员的首选开发工具。

本文将使用以上技术及工具开发本文的示例程序。

2、快速搭建springboot工程项目

intellij idea中点击File->New->Project,弹出New Project窗体。在新弹出的窗体左侧导航栏中选择Spring Initializr,右侧面板中选择Default单选按钮,点击next按钮进入下一步操作界面。

输入Group,Artifact,Java Version,Name,Package后,点击“next”按钮进入下一步的操作界面。

选中左侧面板中的“Web”和右侧面板中的“Spring Web”。选中左侧面板中的“SQL”和右侧面板中的“MySQL Driver”。点击“Next”按钮进入下一步操作界面。

输入“Project Name”,“Project location”,然后点击"Finish"按钮完成springboot项目的创建。

新建完成后的工程项目结构如下图所示。其中“.mvn”,“HELP.md”,“mvnw”,“mvnw.cmd”文件及文件夹是可以删除的。

3、mysql测试数据准备

在mysql数据库中建立一张user表,用于后面进行数据库的增删改查操作。

user表的mysql数据库sql建表语句

CREATE TABLE `user` (  `userid` varchar(40) NOT NULL COMMENT 'userid',  `name` varchar(100) DEFAULT NULL COMMENT '姓名',  `age` int(11) DEFAULT NULL COMMENT '年龄',  PRIMARY KEY (`userid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4、数据库操作框架mybatis-plus集成及代码自动生成

pom.xml文件中引入mysql相关依赖。注意,生成springboot工程的时候已经自动引入了mysql依赖,但是生成的依赖没有版本。这个地方只是加了mysql版本号。

<dependency>	<groupId>mysql</groupId>	<artifactId>mysql-connector-java</artifactId>	<version>5.1.49</version></dependency>

pom.xml文件中引入mybatis-plus及自动生成代码需要的相关依赖。

<dependency>	<groupId>com.baomidou</groupId>	<artifactId>mybatis-plus-boot-starter</artifactId>    <version>3.4.2</version></dependency><dependency>	<groupId>com.baomidou</groupId>	<artifactId>mybatis-plus-generator</artifactId>	<version>3.4.1</version></dependency><dependency>	<groupId>org.freemarker</groupId>	<artifactId>freemarker</artifactId>	<version>2.3.31</version></dependency>

编写自动生成Entity,Mapper,Service代码的类CodeGenerator.java。

package com.xiaotong.demo;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.InjectionConfig;import com.baomidou.mybatisplus.generator.config.*;import com.baomidou.mybatisplus.generator.config.po.TableInfo;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;import java.util.List;public class CodeGenerator {    public static void main(String[] args) {        AutoGenerator autoGenerator = new AutoGenerator();        GlobalConfig globalConfig = new GlobalConfig();        String projectPath = System.getProperty("user.dir");        globalConfig.setOutputDir(projectPath + "/src/main/java/autogencode");        globalConfig.setAuthor("xiaotong");        globalConfig.setOpen(false);        globalConfig.setFileOverride(true);        globalConfig.setServiceName("%sService");        autoGenerator.setGlobalConfig(globalConfig);        DataSourceConfig dsc = new DataSourceConfig();        dsc.setUrl("jdbc:mysql://192.168.22.99:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8");        dsc.setDriverName("com.mysql.jdbc.Driver");        dsc.setUsername("root");        dsc.setPassword("123456");        autoGenerator.setDataSource(dsc);        PackageConfig packageConfig = new PackageConfig();        packageConfig.setParent(null);        packageConfig.setEntity("com.xiaotong.demo.entitiy");        packageConfig.setMapper("com.xiaotong.demo.mapper");        packageConfig.setController("com.xiaotong.demo.controller");        packageConfig.setXml("com.xiaotong.demo.mapper");        packageConfig.setService("com.xiaotong.demo.service");        packageConfig.setServiceImpl("com.xiaotong.demo.service.impl");        autoGenerator.setPackageInfo(packageConfig);        InjectionConfig injectionConfig = new InjectionConfig() {            @Override            public void initMap() {            }        };        //freemarker模板引擎        String templatePath = "/templates/mapper.xml.ftl";        // 输出配置        List<FileOutConfig> focList = new ArrayList<>();        focList.add(new FileOutConfig(templatePath) {            @Override            public String outputFile(TableInfo tableInfo) {                return projectPath + "/src/main/java/autogencode/com/xiaotong/demo/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;            }        });        injectionConfig.setFileOutConfigList(focList);        autoGenerator.setCfg(injectionConfig);        // 模板        TemplateConfig templateConfig = new TemplateConfig();        templateConfig.setXml(null);        autoGenerator.setTemplate(templateConfig);        // 策略        StrategyConfig strategy = new StrategyConfig();        strategy.setNaming(NamingStrategy.underline_to_camel);        strategy.setColumnNaming(NamingStrategy.underline_to_camel);        strategy.setEntityLombokModel(false);        strategy.setRestControllerStyle(true);        strategy.setInclude(new String[]{                "user"        });        strategy.setControllerMappingHyphenStyle(true);        autoGenerator.setStrategy(strategy);        autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());        autoGenerator.execute();    }}

运行CodeGenerator类中的main函数生成代码。代码目录结构如下图所示。

整理生成的代码,将代码移动到需要的位置上。移动过后最终的目录结构如下图所示。

application.yml文件中配置mysql连接信息。springboot工程创建的时候,创建的文件名为application.properties,将文件名改为application.yml即可。

server:  port: 8089spring:  application:    name: xiaotongdemo  datasource:    driver-class-name: com.mysql.jdbc.Driver    url: jdbc:mysql://192.168.22.99:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8    username: root    password: 123456  jackson:    date-format: yyyy-MM-dd HH:mm:ss    time-zone: GMT+8

使用@MapperScan配置mybatis-plus扫描路径。

@SpringBootApplication@MapperScan("com.xiaotong.demo.mapper")public class XiaotongdemoApplication {    public static void main(String[] args) {        SpringApplication.run(XiaotongdemoApplication.class, args);    }}

mybatis-plus分页插件配置,新建MybatisPlusConfig.java文件,内容如下。

@Configuration@MapperScan("com.xiaotong.demo.*.mapper*")public class MybatisPlusConfig {    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));        return interceptor;    }}

日志配置。resources目录下新建“logback-spring.xml”,输入如下内容完成日志配置。

<?xml version="1.0" encoding="UTF-8"?><configuration scan="true" scanPeriod="1 seconds" debug="false">    <property name="log_path" value="./logs"/>    <property name="log_pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %logger{50} - %msg%n"/>    <property name="log_fileNamePattern" value="-%d{yyyy-MM-dd}.%i.log"/>    <property name="log_maxFileSize" value="100MB"/>    <property name="log_maxHistory" value="15"/>    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">        <encoder charset="UTF-8">            <pattern>${log_pattern}</pattern>        </encoder>    </appender>    <appender name="File" class="ch.qos.logback.core.rolling.RollingFileAppender">        <file>${log_path}/demo.log</file>        <encoder charset="UTF-8">            <pattern>${log_pattern}</pattern>        </encoder>        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">            <fileNamePattern>${log_path}/bwzt${log_fileNamePattern}</fileNamePattern>            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">                <maxFileSize>${log_maxFileSize}</maxFileSize>            </timeBasedFileNamingAndTriggeringPolicy>            <maxHistory>${log_maxHistory}</maxHistory>        </rollingPolicy>    </appender>    <root level="INFO">        <appender-ref ref="File"/>        <appender-ref ref="CONSOLE"/>    </root></configuration>

到此mybatis-plus就完成了集成。

5、功能开发及测试

这一节将通过开发一些简单的功能来介绍一下如何给前端提供rest接口,以及如何使用mybatis-plus来对数据库进行增删改查操作。

功能包括新增更新用户,删除单个用户,单个用户查询,用户列表查询,用户列表分页查询。

rest接入层代码。

package com.xiaotong.demo.controller;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.xiaotong.demo.entitiy.User;import com.xiaotong.demo.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;/** * * @author xiaotong * @since 2021-06-08 */@RestController@RequestMapping("/user")public class UserController {    @Autowired    private UserService userService;    /**     *  新增更新用户     */    @RequestMapping(value = "/addorupdate", method = RequestMethod.POST)    @ResponseBody    public User addOrUpdateUser(@RequestBody User user) {        return userService.addOrUpdateUser(user);    }    /**     * 单个用户查询     */    @RequestMapping(value = "/get", method = RequestMethod.GET)    @ResponseBody    public User getUser(String userid){        return userService.getUser(userid);    }    /**     * 删除单个用户     */    @RequestMapping(value = "/del", method = RequestMethod.POST)    @ResponseBody    public boolean delUser(String userid){        return userService.delUser(userid);    }    /**     * 用户列表查询     */    @RequestMapping(value = "/list", method = RequestMethod.GET)    @ResponseBody    public List<User> findUserList(String name){        return userService.findUserList(name);    }    /**     * 用户列表分页查询     */    @RequestMapping(value = "/page/list", method = RequestMethod.GET)    @ResponseBody    public Page<User> findUserPageList(Integer pageNum, Integer pageSize,String name){        if(null == pageNum){            pageNum = 1;        }        if(null == pageSize){            pageSize = 10;        }        return userService.findUserPageList(pageNum,pageSize,name);    }}

Service实现层代码。

package com.xiaotong.demo.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.baomidou.mybatisplus.extension.plugins.pagination.Page;import com.xiaotong.demo.entitiy.User;import com.xiaotong.demo.mapper.UserMapper;import com.xiaotong.demo.service.UserService;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.stereotype.Service;import java.util.List;import java.util.UUID;/** * @author xiaotong * @since 2021-06-08 */@Servicepublic class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {    @Override    public User addOrUpdateUser(User user){        if(null == user.getUserid() || "".equals(user.getUserid())){            user.setUserid(UUID.randomUUID().toString());        }        this.saveOrUpdate(user);        return user;    }    @Override    public User getUser(String userid){        return this.getById(userid);    }    @Override    public boolean delUser(String userid){        return this.removeById(userid);    }    @Override    public List<User> findUserList(String name){        QueryWrapper<User> queryWrapper = new QueryWrapper();        if(null != name){            queryWrapper.like("name",name);        }        List<User> users = this.list(queryWrapper);        return users;    }    @Override    public Page<User> findUserPageList(Integer pageNum, Integer pageSize,String name){        Page<User> page = new Page(pageNum,pageSize);        QueryWrapper<User> queryWrapper = new QueryWrapper();        if(null != name){            queryWrapper.like("name",name);        }        this.page(page,queryWrapper);        return page;    }}

启动程序,让我们看看运行结果吧!

新增用户、单个用户查询测试结果。

更新用户测试结果。

用户列表查询测试结果。

用户列表分页查询结果。

删除单个用户测试结果。

再来看一下最后的项目目录结构吧!

注意事项

代码当中有的地方没做参数效验,实际开发过程中需要做参数效验。没有做统一异常处理,下次再来写这个吧!程序启动时日志输出警告。Can not find table primary key in Class。新增更新用户时报错。com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: error: can not execute. because can not find column for id from entity!这个是因为自动生成的实体代码里面,主键没有带@TableId注解。自己手动加上就可以了。至于生成的实体代码为什么没有带对应的注解,后面有时间在研究!

6、总结

整篇文章到此就结束了。该篇文章主要介绍了当前流行的springboot+mybatis-plus+mysql的整合开发。希望能对正在使用的人员有所帮助。

有问题欢迎反馈,大家一起交流学习!

如果对你有帮助,欢迎分享给你周围需要的人!

需要源码的话,私信发送 :springboot+mybatis-plus+mysql入门示例 你的邮箱

标签: #ftl分页