- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
Mybatis 。
<!-- 统一管理 jar 包版本 -->
<properties>
<druid-boot.version>1.1.10</druid-boot.version>
<mybatis-boot.version>2.1.0</mybatis-boot.version>
<mysql-connector.version>8.0.16</mysql-connector.version>
<mssql-jdbc.version>8.2.2.jre8</mssql-jdbc.version>
<oracle-jdbc.version>19.3.0.0</oracle-jdbc.version>
<pagehelper-starter.version>1.2.10</pagehelper-starter.version>
</properties>
<!--子模块继承之后,锁定版本+子模块不用写 groupid 和 version -->
<dependencyManagement>
<dependencies>
<!-- mybatis + druid + mysql + mssql-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-boot.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-boot.version}</version>
</dependency>
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>${pagehelper-starter.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>${mssql-jdbc.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle-jdbc.version}</version>
</dependency>
<!-- mybatis + druid + mysql + mssql-->
</dependencies>
</dependencyManagement>
Mybatis Plus 使用框架自带的分布控件,如果使用 pagehelper 会报 JSqlParser 的版本冲突,根据情况排除 pagehelper 版本(不推荐).
<!-- 统一管理 jar 包版本 -->
<properties>
<druid-boot.version>1.2.23</druid-boot.version>
<mybatis-plus.version>3.5.7</mybatis-plus.version>
<mysql-connector.version>8.0.33</mysql-connector.version>
<mssql-jdbc.version>8.2.2.jre8</mssql-jdbc.version>
<oracle-jdbc.version>19.3.0.0</oracle-jdbc.version>
</properties>
<!--子模块继承之后,锁定版本+子模块不用写 groupid 和 version -->
<dependencyManagement>
<dependencies>
<!-- mybatis plus + druid + mysql + mssql-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>${druid-boot.version}</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>${mysql-connector.version}</version>
</dependency>
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>${mssql-jdbc.version}</version>
</dependency>
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle-jdbc.version}</version>
</dependency>
<!-- mybatis plus + druid + mysql + mssql-->
</dependencies>
</dependencyManagement>
Mybatis 。
mybatis:
# 指定sql映射文件位置
mapper-locations: classpath*:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
type-handlers-package: com.vipsoft.base.handler # MySQL 8.0 用以mysql中json格式的字段,进行转换的自定义转换器,转换为实体类的JSONObject属性
Mybatis-Plus 。
mybatis-plus:
mapper-locations: classpath*:mapper/*Mapper.xml
global-config:
banner: true
db-config:
id-type: auto
where-strategy: not_empty
insert-strategy: not_empty
update-strategy: not_null
type-handlers-package: com.vipsoft.base.handler # MySQL 8.0 用以mysql中json格式的字段,进行转换的自定义转换器,转换为实体类的JSONObject属性
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
map-underscore-to-camel-case: true
jdbc-type-for-null: 'null'
call-setters-on-nulls: true
shrink-whitespaces-in-sql: true
Mybatis Plus 分页,需要添加 拦截器配置,否则分页不生效 。
package com.vipsoft.base.config;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
/**
* 分页插件 -- 否则分页不生效
* @return
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
@MapperScan({"com.vipsoft.admin.mapper"}) 和 Mybatis 无区别 。
package com.vipsoft.admin;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@ComponentScan(basePackages = {"com.vipsoft"})
@SpringBootApplication
@MapperScan({"com.vipsoft.admin.mapper"})
public class VipSoftAdminApplication {
public static void main(String[] args) {
SpringApplication.run(VipSoftAdminApplication.class, args);
}
}
SysMenu 。
//@TableName("sys_menu") 默认会将 SysMenu 解析成 sys_menu 如果解析后不是正确的表名,需要通过 TableName进行指定,
public class SysMenu extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 菜单ID */
@TableId(value = "menu_id", type = IdType.ASSIGN_ID)
private Long menuId;
/** 菜单名称 */
@TableField(value = "menu_name")
private String menuName;
/** 父菜单名称 */
@TableField(exist = false) //非数据库字段,进行排除
private String parentName;
....省略
}
SysMenuMapper.xml 。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.vipsoft.admin.mapper.SysMenuMapper">
<resultMap type="com.vipsoft.admin.entity.SysMenu" id="SysMenuResult">
<id property="menuId" column="menu_id"/>
<result property="menuName" column="menu_name"/>
<result property="parentName" column="parent_name"/>
<result property="parentId" column="parent_id"/>
<result property="orderNum" column="order_num"/>
<result property="path" column="path"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>
<select id="listMenu" parameterType="com.vipsoft.admin.entity.SysMenu" resultMap="SysMenuResult">
select menu_id, menu_name, parent_id, order_num, create_time from sys_menu
<where>
<if test="menuName != null and menuName != ''">
AND menu_name like concat('%', #{menuName}, '%')
</if>
<if test="visible != null and visible != ''">
AND visible = #{visible}
</if>
<if test="status != null and status != ''">
AND status = #{status}
</if>
</where>
order by parent_id, order_num
</select>
<select id="listMenuPage" resultMap="SysMenuResult">
select menu_id, menu_name, parent_id, order_num, create_time from sys_menu
<where>
<if test="query.menuName != null and query.menuName != ''">
AND menu_name like concat('%', #{query.menuName}, '%')
</if>
<if test="query.visible != null and query.visible != ''">
AND visible = #{query.visible}
</if>
<if test="query.status != null and query.status != ''">
AND status = #{query.status}
</if>
</where>
order by parent_id, order_num
</select>
</mapper>
需要继承 BaseMapper 。
package com.vipsoft.admin.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vipsoft.admin.entity.SysMenu;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 菜单表 数据层
*/
public interface SysMenuMapper extends BaseMapper<SysMenu> {
List<SysMenu> listMenu(SysMenu menu);
IPage<SysMenu> listMenuPage(Page page, @Param("query") SysMenu menu);
}
ISysMenuService 。
package com.vipsoft.admin.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vipsoft.admin.entity.SysMenu;
import java.util.List;
/**
* 菜单 业务层
*
*/
public interface ISysMenuService
{
/**
* 列表查询(自定义SQL,分页)
*/
List<SysMenu> listMenu(SysMenu menu);
/**
* 列表查询(框架分页)
*/
IPage selectPage(SysMenu menu);
/**
* 列表查询(自定义SQL,分页)
*/
IPage listMenuPage(SysMenu menu);
}
SysMenuService 。
package com.vipsoft.admin.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vipsoft.admin.entity.SysMenu;
import com.vipsoft.admin.mapper.SysMenuMapper;
import com.vipsoft.admin.service.ISysMenuService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.github.pagehelper.PageParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 菜单 业务层处理
*
* @author ruoyi
*/
@Service
public class SysMenuServiceImpl implements ISysMenuService {
@Autowired
private SysMenuMapper menuMapper;
/**
* 列表查询(自定义SQL,分页)
*/
@Override
public List<SysMenu> listMenu(SysMenu menu) {
return menuMapper.listMenu(new SysMenu());
}
/**
* 列表查询(框架分页)
*/
@Override
public IPage selectPage(SysMenu menu) {
Page page = new Page();
page.setCurrent(2);
page.setSize(10);
List<OrderItem> orderItems = new ArrayList<>();
orderItems.add(OrderItem.desc("menu_id"));
page.setOrders(orderItems);
Page pageList = menuMapper.selectPage(page, null);
return pageList;
}
/**
* 列表查询(自定义SQL,分页)
*/
@Override
public IPage listMenuPage(SysMenu menu) {
Page page = new Page();
page.setCurrent(2);
page.setSize(10);
List<OrderItem> orderItems = new ArrayList<>();
orderItems.add(OrderItem.desc("menu_id")); //先按 menu_id 排序,再按 mapper.xml 中的排(可以在查询输出的SQL中查看)
page.setOrders(orderItems);
IPage<SysMenu> pageList = menuMapper.listMenuPage(page, menu);
return pageList;
}
}
package com.vipsoft.admin.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.vipsoft.admin.entity.SysMenu;
import com.vipsoft.admin.service.ISysMenuService;
import com.vipsoft.base.core.ApiResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* 菜单信息
*/
@RestController
@RequestMapping("/menu")
public class SysMenuController {
@Autowired
private ISysMenuService menuService;
/**
* 获取菜单列表
*/
@GetMapping("/selectPage")
public ApiResult selectPage(SysMenu menu) {
IPage menus = menuService.selectPage(menu);
return new ApiResult(menus);
}
/**
* 获取菜单列表
*/
@GetMapping("/list")
public ApiResult listMenu(SysMenu menu) {
List<SysMenu> menus = menuService.listMenu(menu);
return new ApiResult(menus);
}
/**
* 获取菜单列表
*/
@GetMapping("/listMenuPage")
public ApiResult listMenuPage(SysMenu menu) {
IPage menus = menuService.listMenuPage(menu);
return new ApiResult(menus);
}
}
最后此篇关于SpringBoot2.7.18集成MybatisPlus+Druid的文章就讲到这里了,如果你想了解更多关于SpringBoot2.7.18集成MybatisPlus+Druid的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
是否可以让 Druid 数据源包含 2 个(或多个)时间戳?我知道 Druid 是基于时间的数据库,我对这个概念没有问题,但我想添加另一个维度,我可以使用它来处理时间戳 例如用户保留:指标肯定是指定到
我们正在对 Druid 进行 POC,以检查它是否适合我们的用例。虽然我们能够摄取数据但不确定以下内容: druid 如何支持无模式输入:假设输入维度由最终用户自行决定。然后这里没有定义的模式。因此,
Druid 如何在将实时摄取的数据移交给深度存储之前保留它? 文档中Druid有intermedatepersistperiod和maxpendingpersists的配置。但它并没有太多说明什么是中
当我将 JSON 摄取规范发送到 Druid 霸主 API 时,我得到以下响应: HTTP/1.1 400 Bad Request Content-Type: application/json Dat
我正在尝试将以下德鲁伊 sql 查询转换为德鲁伊 json 查询,因为我拥有的列之一是多值维度,德鲁伊不支持 sql 样式查询。 我的sql查询: SELECT date_dt, source, ty
例如我有以下 Druid 查询: "filter": { "type": "and", "fields": [ { "type": "selector",
我正在尝试在超过 500k 数据限制的情况下运行 groupBy 查询。我收到此错误。 { "error": "Resource limit exceeded", "errorMess
我使用 Druid 来监控我网站中的事件。 数据可以表示如下: event_id | country | user_id | event_type ==================
我在历史节点上存储了大约 10GB 的数据。但是,该节点的内存消耗约为 2GB。 当我启动一个选择查询时,结果在 30 多秒内第一次返回。接下来,它们排在第二位(因为代理缓存)。 我关心的是将任何查询
我创建了一个架构,并向德鲁伊架构添加了 1TB 数据。然后升级了日志文件版本并添加了新的两列。然后我想将该数据添加到德鲁伊模式。但还不能。 最佳答案 为了向现有数据源添加新列,您需要按照以下步骤操作:
我有分析服务器(例如点击计数器)。我想使用一些 api 向德鲁伊发送数据。我该怎么做?我可以用它代替谷歌分析吗? 最佳答案 正如 se7entyse7en 所说: You can ingest you
我是德鲁伊新手。我想从我的 java 应用程序查询远程 druid 集群。我在 druid-user google group 中读到我们可以使用 io.druid.client.DirectDrui
Apache Druid简介 Apache Druid是一个实时分析型数据库,旨在对大型数据集进行快速的查询分析("OLAP"查询)。Druid最常被当做数据库来用以支持实时摄取、高性能查询和高稳定运
我似乎在 Druid 网站上找不到任何特定的教程/文档页面,其中列出了 Druid 中所有支持的维度数据类型。从我读了多少,我知道 long, float和 string绝对支持,但我对其他支持的类型
前言 在 上一篇文章 中,我们介绍了弹性数据库连接失效的背景,并探讨了HikariCP连接池探活策略的相关内容。在本文中,我们将会继续探讨另一个线上常用的连接池——Druid,并为您介绍如何在使
Druid是阿里巴巴开发的一个连接池,他提供了一个高效、功能强大、可扩展性好的数据库连接池,区别于hikari。如果选择高性能可以选hikari,如果要功能多就选,druid。 首先pom引入依赖
目录 Pom 依赖 yml 配置 Config 配置 Mapper扫描 Entity Mapper.xml Mapper - SysMenuMapper
我们如何在德鲁伊中写 sum(distinct col) ?如果我尝试用德鲁伊编写,它说无法构建计划,但在德鲁伊中也是可能的。我尝试转换为子查询方法,但我的内部查询返回大量项目级数据,因此超时。 最佳
我正在使用 imply 来处理德鲁伊的集群。但是我的日志文件已增加到数百 GB 的存储空间。我说的是存在于 imply/var/sv/目录中的日志文件,其中有这 7 个日志文件,broker.log、
通过遵循 http://druid.io/docs/latest/tutorials/tutorial-loading-streaming-data.html 的教程,我能够通过 Kafka 控制台将
我是一名优秀的程序员,十分优秀!