前言:
此刻姐妹们对“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分页