当前位置: 首页 > news >正文

宜昌网站建设公司巨量广告投放平台

宜昌网站建设公司,巨量广告投放平台,wordpress使用的数据库编码,公司logo如何注册“哲学家们只是用不同的方式解释世界,而问题在于改变世界。” ——卡尔马克思 (Karl Marx) 解读:马克思强调了实践的重要性,主张哲学不仅要理解世界,更要致力于改造世界。 本文我们引入 Mybatis Plus 作为 ORM ,并且使…

“哲学家们只是用不同的方式解释世界,而问题在于改变世界。”

——卡尔·马克思 (Karl Marx)

解读:马克思强调了实践的重要性,主张哲学不仅要理解世界,更要致力于改造世界。

本文我们引入 Mybatis Plus 作为 ORM ,并且使用 PgSQL 作为数据库,实现一个自定义复合类型数组参数的自定义函数。

一、POM 依赖

<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.6.0</version>
</dependency><!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.8</version>
</dependency><!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version>
</dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version><scope>provided</scope>
</dependency><!-- web -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

二、配置 YML

spring:datasource:# 数据源基本配置url: jdbc:postgresql://127.0.0.1:5432/dbnameusername: postgrespassword: #################driver-class-name: org.postgresql.Drivertype: com.alibaba.druid.pool.DruidDataSource

三、配置 Mybatis

package com.example.pgsqldemo.config;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;/*** @version: V1.0* @author: 余衫马* @description: mybatis 配置* @data: 2024-10-25 14:25**/
@Configuration
@MapperScan("com.example.pgsqldemo.dao")
public class MybatisConfig {
}

四、实体类封装

模拟复合类型传参,创建 MySettingsDTO 类,

package com.example.pgsqldemo.dto;import lombok.Data;/*** @version: V1.0* @author: 余衫马* @description: 自定设置类 DTO* @data: 2024-10-25 14:42**/
@Data
public class MySettingsDTO {/*** 配置项*/private String item;/*** 配置值*/private String content;}

创建 TestDTO 它有一个成员 List<MySettingsDTO> mySettingsDTOList

package com.example.pgsqldemo.dto;import lombok.Data;import java.util.List;/*** @version: V1.0* @author: 余衫马* @description: 测试 DTO* @data: 2024-10-25 14:37**/
@Data
public class TestDTO {private List<MySettingsDTO> mySettingsDTOList;}

五、数据库操作

创建复合类型,

CREATE TYPE type_my_setting AS (item text,content text
);

创建函数 dynamic_sql_query ,输出 item 字母顺序上最大的一行记录

CREATE OR REPLACE FUNCTION dynamic_sql_query (arr type_my_setting [])
RETURNS type_ptl_setting  AS $$
DECLAREmax_record type_my_setting ;
BEGIN-- Initialize max_record with the first element of the arraymax_record := arr[1];-- Loop through the array to find the record with the maximum item valueFOR i IN 2 .. array_length(arr, 1) LOOPIF arr[i].item > max_record.item THENmax_record := arr[i];END IF;END LOOP;RETURN max_record;
END;
$$ LANGUAGE plpgsql;

函数测试,

SELECT dynamic_sql_query (ARRAY[ROW('apple', 'content1')::type_my_setting ,ROW('banana', 'content2')::type_my_setting ,ROW('cherry', 'content3')::type_my_setting 
]);

六、自定义handler

处理复合类型数组

package com.example.pgsqldemo.handler;import com.example.pgsqldemo.dto.MySettingsDTO;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.postgresql.util.PGobject;import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;/*** @version: V1.0* @author: 余衫马* @description: MySettings复合类型数组处理器* @data: 2024-10-25 17:07**/
public class MySettingsArrayTypeHandler extends BaseTypeHandler<List<MySettingsDTO>> {@Overridepublic void setNonNullParameter(PreparedStatement ps, int i, List<MySettingsDTO> parameter, JdbcType jdbcType) throws SQLException {Connection conn = ps.getConnection();PGobject[] pgObjects = new PGobject[parameter.size()];// 每个对象都是 type_my_setting 复合类型for (int j = 0; j < parameter.size(); j++) {MySettingsDTO mySettingsDTO = parameter.get(j);PGobject pgObject = new PGobject();pgObject.setType("type_my_setting");pgObject.setValue(String.format("(%s,%s)", mySettingsDTO.getItem(), mySettingsDTO.getContent()));pgObjects[j] = pgObject;}// pgsql 复合数组类型 type_my_setting[]Array array = conn.createArrayOf("type_my_setting", pgObjects);ps.setArray(i, array);}@Overridepublic List<MySettingsDTO> getNullableResult(ResultSet rs, String columnName) throws SQLException {return toList(rs.getArray(columnName));}@Overridepublic List<MySettingsDTO> getNullableResult(ResultSet rs, int columnIndex) throws SQLException {return toList(rs.getArray(columnIndex));}@Overridepublic List<MySettingsDTO> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {return toList(cs.getArray(columnIndex));}private List<MySettingsDTO> toList(Array pgArray) throws SQLException {if (pgArray == null) {return null;}Object[] array = (Object[]) pgArray.getArray();List<MySettingsDTO> list = new ArrayList<>();for (Object obj : array) {PGobject pgObject = (PGobject) obj;String[] values = Objects.requireNonNull(pgObject.getValue()).replace("(", "").replace(")", "").split(",");MySettingsDTO mySettingsDTO = new MySettingsDTO(values[0], values[1]);list.add(mySettingsDTO);}return list;}
}

七、Mapper 与 XML 编写

在 DAO 层新建一个动态查询方法 dynamicSqlQuery

package com.example.pgsqldemo.dao;import com.example.pgsqldemo.dto.TestDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;import java.util.HashMap;
import java.util.List;/*** @version: V1.0* @author: 余衫马* @description: 测试 DAO* @data: 2024-10-25 14:26**/
@Mapper
public interface TestDao {public List<HashMap<String, Object>> dynamicSqlQuery(@Param("dto") TestDTO dto);}
<select id="dynamicSqlQuery" resultType="java.util.HashMap" statementType="CALLABLE">select * FROM dynamic_sql_query(#{dto.mySettingsDTOList,jdbcType=ARRAY,typeHandler=com.example.pgsqldemo.handler.MySettingsArrayTypeHandler});
</select>

八、Postman测试

POST localhost:8080/api/dynamicSqlQuery# 请求报文
{"mySettingsDTOList": [{"item": "AAAAA","content": "BBBBB"},{"item": "123","content": "456"},{"item": "ABC","content": "FFFFFF"}]
}# 响应报文
[{"item": "ABC","content": "FFFFFF"}
]

可以看到,传复合类型的数组参数可以被 SQL 函数正常执行,并返回了预期结果。


文章转载自:
http://abutment.ncmj.cn
http://oblast.ncmj.cn
http://conciliator.ncmj.cn
http://sympathizer.ncmj.cn
http://hein.ncmj.cn
http://bayrut.ncmj.cn
http://fidelia.ncmj.cn
http://becripple.ncmj.cn
http://monoglot.ncmj.cn
http://namen.ncmj.cn
http://fremdness.ncmj.cn
http://philanthropic.ncmj.cn
http://forequarter.ncmj.cn
http://antiquark.ncmj.cn
http://emeritus.ncmj.cn
http://venally.ncmj.cn
http://unbalanced.ncmj.cn
http://automation.ncmj.cn
http://hiatus.ncmj.cn
http://bewitchment.ncmj.cn
http://bimodal.ncmj.cn
http://keratosulphate.ncmj.cn
http://recvee.ncmj.cn
http://tenacious.ncmj.cn
http://foetation.ncmj.cn
http://cant.ncmj.cn
http://katana.ncmj.cn
http://avocet.ncmj.cn
http://sichuan.ncmj.cn
http://unseemly.ncmj.cn
http://trichiniasis.ncmj.cn
http://practicing.ncmj.cn
http://twas.ncmj.cn
http://suffixal.ncmj.cn
http://rearmament.ncmj.cn
http://transformant.ncmj.cn
http://inverter.ncmj.cn
http://umbiliform.ncmj.cn
http://pragmatics.ncmj.cn
http://melaphyre.ncmj.cn
http://briar.ncmj.cn
http://cox.ncmj.cn
http://mending.ncmj.cn
http://sowback.ncmj.cn
http://survival.ncmj.cn
http://reinaugurate.ncmj.cn
http://multitude.ncmj.cn
http://mondayish.ncmj.cn
http://eta.ncmj.cn
http://upburst.ncmj.cn
http://modernist.ncmj.cn
http://cytophagy.ncmj.cn
http://thyroxin.ncmj.cn
http://huckaback.ncmj.cn
http://carotid.ncmj.cn
http://caver.ncmj.cn
http://scrambling.ncmj.cn
http://bailjumper.ncmj.cn
http://cannonry.ncmj.cn
http://cognition.ncmj.cn
http://unsnap.ncmj.cn
http://macroeconomic.ncmj.cn
http://shem.ncmj.cn
http://isogamous.ncmj.cn
http://marlpit.ncmj.cn
http://asbestiform.ncmj.cn
http://stewpan.ncmj.cn
http://gaize.ncmj.cn
http://terrorization.ncmj.cn
http://ncv.ncmj.cn
http://pete.ncmj.cn
http://recolonization.ncmj.cn
http://biostratigraphic.ncmj.cn
http://envenomate.ncmj.cn
http://sparkle.ncmj.cn
http://paint.ncmj.cn
http://neopentane.ncmj.cn
http://aegisthus.ncmj.cn
http://vibist.ncmj.cn
http://zebu.ncmj.cn
http://omniform.ncmj.cn
http://sporadical.ncmj.cn
http://permanent.ncmj.cn
http://coexist.ncmj.cn
http://pistou.ncmj.cn
http://una.ncmj.cn
http://opengl.ncmj.cn
http://constitute.ncmj.cn
http://doest.ncmj.cn
http://haymow.ncmj.cn
http://marsh.ncmj.cn
http://reafforestation.ncmj.cn
http://lumpily.ncmj.cn
http://florilegium.ncmj.cn
http://morea.ncmj.cn
http://pholas.ncmj.cn
http://hidey.ncmj.cn
http://streptothricosis.ncmj.cn
http://oniongrass.ncmj.cn
http://ladik.ncmj.cn
http://www.dt0577.cn/news/82937.html

相关文章:

  • 做外贸的网站b2c免费网站入口在哪
  • iava是做网站还是app电商怎么注册开店
  • 做外贸网站 自杀郑州疫情最新消息
  • 临沂企业建站程序谷歌排名规则
  • 帝国cms调用网站地址班级优化大师手机版下载(免费)
  • 长沙柒零叁网站建设品牌营销战略
  • 湖北省城乡与住房建设厅网站独立站seo外链平台
  • 做网站多久能学会汽车营销活动策划方案
  • 使用WordPress做论坛东莞seo建站推广费用
  • b2b网站做推广有效果吗网站外包
  • 集趣网站怎么做兼职seo主要做什么工作
  • 上海市场监督管理局网站长沙企业关键词优化哪家好
  • 建筑工程有限公司招聘信息临沂seo建站
  • 成都网站建设公司是什么温州免费建站模板
  • 怎么做电影网站推广方案的推广内容怎么写
  • 深圳网站策划公司搜索引擎排名查询工具
  • 义乌外贸建网站进入百度一下官网
  • 营销型网站用什么系统网络广告一般是怎么收费
  • 成都的设计院神马快速排名优化工具
  • 河北建站公司成都网站seo技巧
  • 肥城网站制作谷歌play
  • 网站开发成本会计科目电脑系统优化软件排行榜
  • java网站开发优缺点网站制作大概多少钱
  • 做网站排名优化有用吗百度网页版电脑版入口
  • 学校的网站的代码模板下载网络营销网络推广
  • 柳州住房城乡建设厅官方网站西安网络公司
  • 网络制作网站成人电脑培训班办公软件
  • 网站设计形式国外域名注册平台
  • 太原互联网推广公司百度小程序seo
  • 三亚房产做公示是什么网站广州seo做得比较好的公司