springBoot+mybatisPlus小demo

项目介绍:采用restful api进行接口规范 / 项目框架SpringBoot+mybatis Plus / 采用mysql进行数据存储 / 采用swaggerUI进行前后端业务分离式开发。

开发环境:JDK1.8+Mysql8.0.12+IDEAL

实现功能:springboot搭建整体框架,MybatisPlus动态生成Dao+Services+Entity+Controller结构

项目介绍:无实际的业务操作,都是测试功能。其中为了区别mybastis和mybatisPlus,特意写了两个接口分别采用mapper.xml进行dao层操作和采用Iservice提供的CRUD操作进行数据查询。

ps:如果对springboot和mybayisPlus已了解,可直接访问码云进行demo下载 https://gitee.com/xc199534/SpringBootMybatisPlus/

----------------------------------------------------------分割线---------------------------------------------

1.项目整体结构

其中Config中包括MybatisPlusConfig和SwaggerConfig两个类,分别用于初始化MybatisPlus和Swagger基础设置。

数据库结构,采用navicat进行可视化管理。

 

 

2.配置文件application.properties

也可采用.yml格式进行配置文件设置,本项目是使用.properties。

spring.application.name=spring-boot-config
server.port=8080
server.context-path=/#mybatis mapper文件的位置
mybatis.mapper-locations=classpath*:mapper/*.xml
#扫描pojo类的位置,在此处指明扫描实体类的包,在mapper中就可以不用写pojo类的全路径名了
mybatis.type-aliases-package=com.example.demo
#可以通过mybatis.config-location属性来指定mybatis的配置文件的位置,
#mybatis.config-location=classpath:mybatis-config.xml

#数据库参数设置 jdbc.type=mysql spring.datasource.url=jdbc:mysql://localhost:3306/demo spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver

 

 

3.pom.xml内容(所有不上项目完整pom.xml的demo都是耍流氓)

<dependencies><!-- Springboot--><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.springframework.data</groupId><artifactId>spring-data-elasticsearch</artifactId></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><!-- <version>2.1.3</version>   --></dependency><dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><!-- <version>3.0.9</version> --></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><scope>provided</scope></dependency><!-- 阿里巴巴druid数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency><!-- mysql驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!-- mybatisplus与springboot整合 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>2.3</version></dependency><!-- 模板引擎 --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>1.7</version></dependency><!--swagger--><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency></dependencies>

 

3.自动生成代码(Dao/service/Entity)

调用MpGenerator.java的主函数生成定义好MVC层结构(MpGenerator定义了文件位置,文件名称,依赖关系等属性)。

Dao层:生成*Dao.java文件和*Dao.xml,后者可理解为Dao层的数据库映射操作,mybatis支持在.xml文件中写数据库CURD语句,但myatisPlus支持使用内置的CRUD操作,避免了复杂的数据库语句。

Service层 :生成一个接口文件,一个接口实现类。

Entity层:生成实体类,对应到数据库的表结构。

SchoolDao.java

package com.example.demo.dao;import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.example.demo.entity.School;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;public interface SchoolDao extends BaseMapper<School> {School getSchoolById(@Param("id") int id);
}
View Code

SchoolService.java

import com.baomidou.mybatisplus.service.IService;
import com.example.demo.entity.School;
import org.elasticsearch.index.query.QueryStringQueryBuilder;public interface SchoolService extends IService<School> {public School getSchoolById(int id);// public Iterable<School> searchByES(QueryStringQueryBuilder builder);

}
View Code

SchoolServiceImpl.java

import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.example.demo.dao.SchoolDao;
import com.example.demo.entity.School;
import com.example.demo.services.SchoolService;
import org.elasticsearch.index.query.QueryStringQueryBuilder;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class SchoolServiceImpl extends ServiceImpl<SchoolDao, School> implements SchoolService {@Overridepublic School getSchoolById(int id) {return baseMapper.selectById(id);}
}
View Code

School.java

import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import com.baomidou.mybatisplus.annotations.TableName;
import org.springframework.data.elasticsearch.annotations.Document;import java.io.Serializable;@TableName("school")
@Document(indexName = "education", type = "school")
public class School implements Serializable {@TableId("ID")private int id;@TableField("NAME")private String name;@TableField("RANGE")private int range;@TableField("AGE")private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getRange() { return range; }public void setRange(int range) { this.range = range; }public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "School{" +"id=" + id +", name='" + name +", range=" + range +", age=" + age +'}';}
}
View Code

 

4、Controller层

@RestController
@RequestMapping("/")
public class SampleController {@Autowiredprivate UserService userService;@Autowiredprivate SchoolService schoolService;@Autowiredprivate testDao testdao;@Autowiredprivate ElasticsearchTemplate elasticsearchTemplate;@ApiOperation(value = "测试")@GetMapping("/home")String home() {return "Hello World!";}@RequestMapping(value = "/getUser", method = RequestMethod.GET)public User helloUser() {User user = userService.getUserById(1);System.out.println(user);return user;}@ApiOperation(value = "采取mybatis方式查询")@ApiImplicitParam(name = "id", value = "用户id", paramType = "path", required = true)@GetMapping("/getSchool/maybatis/{id}")public School helloSchool1(@PathVariable("id") int id) {School school = schoolService.getSchoolById(id);System.out.println(school);return school;}@ApiOperation(value = "采取mybatis-plus方式查询")@ApiImplicitParam(name = "id", value = "用户id", paramType = "path", required = true)@GetMapping("/getSchool/maybatis-plus/{id}")public School helloSchool2(@PathVariable("id") int id) {School school = schoolService.selectById(id);System.out.println(school);return school;}@ApiOperation(value = "插入数据")@ApiImplicitParam(name = "school", value = "学校信息", paramType = "body", required = true)@PostMapping("/insert/school")public Boolean insertSchool(@RequestBody School school) {Boolean tag = schoolService.insert(school);System.out.println(tag);return tag;}
}
View Code

 

5、调用主程序启动

@SpringBootApplication
@MapperScan("com.example.demo.dao")
@ComponentScan(basePackages = {"com.example.demo.config","com.example.demo.controller","com.example.demo.services"})
public class DemoApplication {public static void main(String[] args) {//System.setProperty("es.set.netty.runtime.available.processors", "false");SpringApplication.run(DemoApplication.class, args);}
}

 启动成功后访问:http://localhost:8080/swagger-ui.html#/,显示下图效果即配置成功。

 

转载于:https://www.cnblogs.com/xiongchang95/p/9840164.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570249.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js时间比较方法

中国标准时间转化 Thu May 12 2016 08:00:00 GMT0800 (中国标准时间)--此格式日期无法传到java后台&#xff0c;须格式化&#xff0c;方法如下 var d new Date(Thu May 12 2016 08:00:00 GMT0800 (中国标准时间)); youWantd.getFullYear() - (d.getMonth() 1) - d.get…

[NOI1995]石子合并

题目描述&#xff1a; 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆&#xff0c;并将新的一堆的石子数&#xff0c;记为该次合并的得分。 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 输入输出格…

js中的trim()方法

1.直接使用 string.trim() 浏览器版本限制&#xff1a;JavaScript Version 1.8 2.间接使用<即自己使用正则构造类trim的方法> function myTrim(x) {return x.replace(/^\s|\s$/gm,); }function myFunction() {var str myTrim(" Hello World! &quo…

jQuery中each()的用法

each() 方法规定为每个匹配元素规定运行的函数。 提示&#xff1a;返回 false 可用于及早停止循环。 //输出每个 li 元素的文本&#xff1a; $("button").click(function(){$("li").each(function(){alert($(this).text())}); }); 语法&#xff1a; $(…

BZOJ 4997 [Usaco2017 Feb]Why Did the Cow Cross the Road III

本来想做一道搜索 最后发现是一道并查集的水题 如果两个邻格之间没有路 就把他们合并就行了 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int MAXN105; const int MAXM20005; inline …

如何写dblink?

dblink是什么&#xff1f; 是数据库的链接&#xff0c;就像电话线一样&#xff0c;是一个通道&#xff0c;当我们要跨本地数据库&#xff0c; 访问另外一个数据库表中的数据时&#xff0c;本地数据库中就必须要创建远程数据库的dblink, 通过dblink本地数据库可以像访问本地数…

Building designing UVA - 11039

先取正的和负的绝对值较小者为开头 。然后交替从正负数中取绝对值最小但比上一个大的。 证明&#xff1a; 1.开头选正负数中绝对值较小的&#xff1a;否则能再多放1个。 2.交替选的时候选最小的符合条件的&#xff1a;如果大的符合&#xff0c;换小的仍符合。 #include <ios…

js判断浏览器种类

只区分浏览器&#xff0c;不考虑版本 function myBrowser(){var userAgent navigator.userAgent; //取得浏览器的userAgent字符串if (userAgent.indexOf("Opera") > -1) {return "Opera"}; //判断是否Opera浏览器if (userAgent.indexOf("Firefox…

axios get post下载文件

let url URLParser.submitUrl(/download);return new Promise((resolve, reject) > { axios({ method: get,// post url: url,     data : , responseType: blob }).then((response) > { const blob new Blob([response.data])…

oracle如何创建视图

视图的优点&#xff1a; 1.对数据库的访问&#xff0c;因为视图可以有选择性的选取数据库里的一部分。 2.用户通过简单的查询可以从复杂查询中得到结果。 3.维护数据的独立性&#xff0c;试图可从多个表检索数据。 4.对于相同的数据可产生不同的视图。 视图分为简单视图和复杂…

docker+selenium grid解决node执行经常卡死

执行用例时出现下图&#xff1a; 可以在启动node节点容器时添加如下红色字体的参数 docker run -d -p 5903:5900 --shm-size512m --link selenium_hub:hub --name chrome_node-5903 -e NODE_MAX_INSTANCES5 -e NODE_MAX_SESSION5 selenium/node-chrome-debug 启动容器后到grid…

oracle授权操作

1、给数据库用户授权&#xff08;对象为用户表&#xff09; GRANT privilege[, ...] ON object[, ...] TO { PUBLIC | GROUP group| username} 详解&#xff1a; privilege&#xff1a; select&#xff1a;查询 insert&#xff1a;插入 update&#xff1a;更新 delete&am…

oracle死锁的解决方法

1、 关于死锁 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进程称为死锁进…

高级软件工程第四次作业:两只小熊队团队作业

一、团队展示 队名&#xff1a;两只小熊队 队员学号 周菲&#xff08;队长&#xff09;学号&#xff1a; 201810812007 孔繁燕&#xff08;队员&#xff09;学号&#xff1a;201810812001 一句话描述拟作的团队项目&#xff1a;充分发挥主动积极性&#xff0c;通过团队提升自我…

关于QueryRunner数据查询以及常用方法

QueryRunner数据查询操作调用QueryRunner类方法query(Connection con,String sql,ResultSetHandler r, Object.params)ResultSetHandler r 结果集的处理方式,传递ResultSetHandler接口实现类Object.params SQL语句中的?占位符注意: query方法返回值,返回的是T 泛型, 具体返回值…

js的校验

1、判断是否为数字&#xff08;整数、小数&#xff09; //使用isNaN()函数 //isNaN()的缺点就在于 null、空格以及空串会被按照0来处理 //isNaN: Not a Number function isRealNum(val){// isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除if(val "" || v…

oracle存储过程的写法

create or replace procedure 要创建的存储过程名称(入参a in varchar2, 出参b out varchar2) is变量c varchar2(2000);变量d number(10);异常变量e exception;beginif 入参a is null thenraise 异常e;end if;//跳到异常处理for cc in (select语句) LOOP//执行sqlv_sql:sel…

杂项:WCF

ylbtech-杂项&#xff1a;WCFWindows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架&#xff0c;可以翻译为Windows 通讯开发平台。整合了原有的windows通讯的 .net Remoting&#xff0c;WebService&#xff0c;Socket的机制&#xff0c;并融合…

js定时器的写法

js 定时器有以下两个方法&#xff1a; setInterval() &#xff1a;按照指定的周期&#xff08;以毫秒计&#xff09;来调用函数或计算表达式。方法会不停地调用函数&#xff0c;直到 clearInterval() 被调用或窗口被关闭。 setTimeout() &#xff1a;在指定的毫秒数后调用函数…

Oracle特殊恢复原理与实战(DSI系列)

1、深入浅出Oracle(DSI系列Ⅰ) 2、Oracle特殊恢复原理与实战&#xff08;DSI系列Ⅱ&#xff09; 3、Oracle SQL Tuning&#xff08;DSI系列Ⅲ&#xff09;即将开设 4、Oracle DB Performance Diagnostics&#xff08;DSI系列Ⅳ&#xff09;2018年内将开设 5、Oracle DSI核心揭密…