技术标签: spring spring boot java mybatis
这里对mybatisplus中配置遇到的问题及extent、implement所导入的包也为大家方便引入依赖
1 引入相关依赖
依赖只是参考,每人的仓库不同,代码块内容仅作参考
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.20</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-core</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.1</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.2.0</version>
</dependency>
</dependencies>
2 yml文件配置
部分小伙伴 mysql-connector-java 版本过高,需要将 driver-class-name换成:com.mysql.cj.jdbc.Driver
server:
port: 9999
# 配置数据源
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/goods?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=true
username: root
password: 123456
3 相关的数据库表数据
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for tb_area
-- ----------------------------
DROP TABLE IF EXISTS `tb_area`;
CREATE TABLE `tb_area` (
`area_id` int(2) NOT NULL AUTO_INCREMENT COMMENT '自增id',
`area_name` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '区域名称',
`priority` int(2) NOT NULL DEFAULT 0 COMMENT '优先级',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_time` datetime NULL DEFAULT NULL COMMENT '最后修改时间',
PRIMARY KEY (`area_id`) USING BTREE,
UNIQUE INDEX `UK_AREA`(`area_name`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 12 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
SET FOREIGN_KEY_CHECKS = 1;
代码环节
1 目录结构
2 dao数据
import java.io.Serializable;
import java.util.Date;
import com.baomidou.mybatisplus.extension.activerecord.Model;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@AllArgsConstructor
@NoArgsConstructor
public class BaseEntity<T extends Model> extends Model {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@Override
protected Serializable pkVal() {
return super.pkVal();
}
}
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("tb_area")
public class Book extends BaseEntity<Book> implements Serializable {
@TableId(value = "area_id", type = IdType.AUTO)
private Integer areaId;
private String areaName;
private int priority;
}
3 service层
需要注意的是import的对象是什么(吃过这里的亏)
import com.alnex.myOwn.dao.Book;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IBookService extends IService<Book> {
}
import org.springframework.stereotype.Service;
import com.alnex.myOwn.dao.Book;
import com.alnex.myOwn.mapper.BookMapper;
import com.alnex.myOwn.service.IBookService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@Service
public class BookServerImpl extends ServiceImpl<BookMapper, Book> implements IBookService{
}
4 map包下
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface SuperMapper<T> extends BaseMapper<T> {
}
import java.util.List;
import org.apache.ibatis.annotations.Select;
import com.alnex.myOwn.dao.Book;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface BookMapper extends BaseMapper<Book> {
@Select("SELECT * FROM `tb_area`")
List<Book> selectList();
}
5 controller包下
import javax.annotation.Resource;
import java.util.List;
import org.springframework.web.bind.annotation.*;
import com.alnex.myOwn.dao.Book;
import com.alnex.myOwn.service.IBookService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping("/book")
public class IndexController {
@Resource
private IBookService bookServer;
@GetMapping("/list/{pageNum}/{pageSize}")
public Object index(@PathVariable("pageNum") int pageNum,@PathVariable("pageSize") int pageSize){
System.out.println("pageNum = " + pageNum);
System.out.println("pageSize = " + pageSize);
log.info("----- baseMapper 自带分页 ------");
Page<Book> pg = new Page<>(pageNum, pageSize);
IPage<Book> bookIPage = bookServer.page(pg);
log.info("总条数 ------> [{}]" , bookIPage.getTotal());
log.info("当前页数 ------> [{}]" , bookIPage.getCurrent());
log.info("当前每页显示数 ------> [{}]" , bookIPage.getSize());
log.info("当前页数据 ------> [{}]" , bookIPage.getRecords());
print(bookIPage.getRecords());
log.info("----- Book 列表数据展示 ------");
List<Book> list = bookServer.list();
log.info("list 数据 ------> {[]} " + list);
return bookIPage;
}
private <T> void print(List<Book> list) {
if (!CollectionUtils.isEmpty(list)) {
for (Book t : list) {
log.info("Book 数据为 ----> [{}]",t);
log.info("[{}]",t.getCreateTime());
log.info("[{}]",t.getUpdateTime());
}
}
}
@GetMapping("/getOne/{areaId}")
public Object getOne(@PathVariable("areaId") int areaId){
System.out.println(areaId);
//方法一
Book other = bookServer.getById(areaId);
log.info("book 数据为 ------> [{}]" , other);
System.out.println();
//方法二
QueryWrapper<Book> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("area_id",areaId);
Book book = bookServer.getOne(queryWrapper);
log.info("book1 数据为 ------> [{}]" , book);
return book;
}
@PutMapping("/save")
public Object save(@RequestBody Book book){
return bookServer.save(book);
}
@DeleteMapping("/del/{areaId}")
public Object del(@PathVariable("areaId") int areaId){
boolean b;
//方式一
// b = bookServer.removeById(areaId);
//方式二
QueryWrapper<Book> queryWrapper =new QueryWrapper<>();
queryWrapper.eq("area_id",areaId);
b = bookServer.remove(queryWrapper);
return b;
}
@PutMapping("/update")
public Object update(@RequestBody Book book){
return bookServer.updateById(book);
}
//批量新增或者修改方法,判断ID是否存在,如果ID不存在执行新增,如果ID存在先执行查询语句,查询结果为空新增,否则修改。
@PutMapping("/addMore")
public Object addList(@RequestBody List<Book> list){
return bookServer.saveOrUpdateBatch(list);
}
}
6 config包下【重要】
在之前配置config 时只配置mybatisplus 的分页插件,发现在启动时一直报 Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required 的错误
附查询的相关资料:https://www.cnblogs.com/hawk0035/p/3337283.html?utm_source=tuicool
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.type.JdbcType;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.baomidou.mybatisplus.core.MybatisConfiguration;
import com.baomidou.mybatisplus.core.MybatisXMLLanguageDriver;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.incrementer.DB2KeyGenerator;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
@Configuration
@MapperScan("com.alnex.myOwn.mapper")
public class MybatisPlusConfig {
/**
* mybatis-plus分页插件<br>
* 文档:http://mp.baomidou.com<br>
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource, GlobalConfig globalConfig) throws Exception {
MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
MybatisConfiguration configuration = new MybatisConfiguration();
configuration.setDefaultScriptingLanguage(MybatisXMLLanguageDriver.class);
configuration.setJdbcTypeForNull(JdbcType.NULL);
configuration.setMapUnderscoreToCamelCase(true);
sqlSessionFactory.setConfiguration(configuration);
PaginationInterceptor pagination = new PaginationInterceptor();
sqlSessionFactory.setPlugins(pagination);
sqlSessionFactory.setGlobalConfig(globalConfig);
return sqlSessionFactory.getObject();
}
@Bean
public GlobalConfig globalConfig() {
GlobalConfig config = new GlobalConfig();
GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig();
dbConfig.setKeyGenerator(new DB2KeyGenerator());
config.setDbConfig(dbConfig);
return config;
}
}
以上就是mybatisplus的相关总结,如有问题,欢迎留言讨论~
今天给大家介绍一下今天自己新学到的,就是django中使用到支付宝!1.一个简易的流程先大致说一下一整个流程(大致): 用户在网站(前端发起ajax请求)要去支付-->django通过post接收到了ajax请求,并处理-->ajango处理通过,然后引导用户去支付宝提供的页面-->用户完成支付后,支付宝通知django用户支付了!-->django再开始对用户进行服务2.我们需要准备什么?在自己的虚拟环境中安装python-alipaypip install
---------------------- android培训、java培训、期待与您交流! ----------------------1.IO流(BufferedWriter)/*缓冲区的出现是为了提高留的操作效率而出现的.所以在创建缓冲区之前,必须要现有流对象.该缓冲区中提供了一个跨平台的换行符.newLine();*/import ja
Flutter ExpansionPanelList阴影边框去除事情是这样的,我写一个界面,需要一个下拉框列表,但是不是所有的样式不是一样的,所以我写了一个Column,然后写了两个ExpansionPanelList,一个是List生成的,另一个是自己加的代码大概长这个样子child: Column( children: [ ExpansionPanelList( children : _data.asMap().keys.map((index){ _flutter expansiontile 去除边框
要求和预期结果:实现贵州地市地图效果,并且鼠标过去有数据展示,贵安新区数据无法展示,弄个自定义地图展示出来相关文件准备,加载地图和部分相关组件。echarts.min.js 和 guizhou.js可以从网上找..html文件引入相关js文件[有先后顺序],html文件准备一个div放地图,如下:<!DOCTYPE html PUBLIC "-//W3C//DTD H...
使用pandas模块进行排序、筛选、求和、计数使用python编辑excel,实现的功能包括:python设置当前路径、使用pandas打开excel、生成数据透视表,在不覆盖原内容的基础上追加写入数据、对透视表的内容进行排序、按条件筛选、求和、计数。##python使用好了,可以帮助减轻很多重复性的工作,解放双手和大脑,为了更好地温故知新,在此记下今晚用过的知识点。设置当前路径os.chdir('path') #path为希望设置的路径使用pandas打开表格social_sec=pd_python pandas 求和排序
记一次Java Bug的解决过程Q:Bug描述前端form表单数据提交时,后端出现Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported]这样的提示,也没有触..._content type 'application/x-www-form-urlencoded;charset=utf-8' not supported
小组成员介绍队长: Dyj软件工程专业学生,学习过c语言、c++、数据结构、java、计算机网络等课程,喜欢钻研和思考问题。想从事java后端开发或者考编。希望能在软件工程这门课学到对自己有用的知识。队员一: Hyj我就读于软件工程专业,目前大三,不打算考研。未来的就业方向是 Java 后台开发或者考公务员。现在是一个自学后端的小菜鸡,力求在实习之前把涉及到的技术栈学一遍。我平时喜欢听歌,也喜欢学点新技术队员二: Wxy软件工程专业大三学生,学习过C、C++、Java、数据结构等课程,_软件工程小组成员分工
简介线性代数相关领域中,矩阵操作一般是核心内容。对矩阵的特征值和特征向量的计算一直在数值计算占有重要位置。这里介绍一种根据指定个数来返回矩阵特征值及特征向量的方式。实例% By lyqmath% Dalian University of Technology% School of Mathematical Sciences 2008% BOLG: http://blog.csdn.net/lyqmath
代码链接:http://www.cnblogs.com/bobbywei/p/4469145.html#3174062搭档博客:http://www.cnblogs.com/Roc201306114311Roc/p/4487545.html1、黑盒测试主要就是测试代码的功能与输入有效性在问题, 以便于了解或使用系统的内部结构及知识。2、白盒测试在设计测试的过程中,我们...
1. 准备工作windows --- 官网下载镜像, 软碟通刻录manjaro --- 社区下载镜像,USB Writer刻录2. 安装步骤:2.1 Windows安装省略, 使用UEFI模式安装备注,很好用的Office Activation脚本,save and run this .bat as Admin:@echo off(cd /d "%~dp0")&..._manjaro双系统安装教程
The for statementThe for statement is used to iterate over the elements of a sequence (such as a string, tuple or list) or other iterable object:for_stmt ::= "for" target_list "in" expression_lis_for k,v in
????????关注后回复“进群”,拉你进程序员交流群????????作者:小雨淅淅o0编辑:陶家龙出处:cnblogs.com/xiaoyuxixi/p/12235979.html“ 新公司要上监控,面试提..._java程序员需要会prometheus吗