2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Springboot परियोजनाविकासे सामान्यतया दत्तांशसङ्ग्रहार्थं मुख्यदत्तांशकोशरूपेण सम्बन्धात्मकदत्तांशकोशस्य उपयोगः भवति कदाचित् व्यावसायिकपरिदृश्येषु विद्यमानसारणीसंरचनायाः कस्टमव्यापारसूचनायाः विस्तारस्य आवश्यकता भवति । अस्मिन् परिदृश्ये सामान्यतया json प्रकारस्य भण्डारणस्य उपयोगः भवति । अयं लेखः Mybatis-plus इत्यस्य साहाय्येन Springboot परियोजनायां json इत्यस्य संचालनस्य व्यावहारिकसमाधानस्य सारांशं ददाति ।
Spring boot + Mybatis-plus + PostgreSQL, PostgreSQL आँकडाकोषे एकं निश्चितं क्षेत्रं json प्रकारस्य भवति ।
MyBatis इत्यस्मिन् type handler (TypeHandler) JavaType तथा JdbcType इत्येतयोः मध्ये सेतुस्य भूमिकां निर्वहति । तेषां उपयोगः SQL स्टेट्मेण्ट् निष्पादयति समये जावा ऑब्जेक्ट् इत्यस्य मूल्यं PreparedStatement इत्यत्र सेट् कर्तुं, अथवा ResultSet अथवा CallableStatement इत्यस्मात् मूल्यं पुनः प्राप्तुं भवति ।
MyBatis-Plus भवन्तं केचन अन्तर्निर्मितप्रकारस्य प्रोसेसराः प्रदाति, ये भवितुम् अर्हन्ति TableField
एनोटेशन्स् शीघ्रं MyBatis पात्रे प्रविष्टाः भवन्ति, येन विकासप्रक्रिया सरलं भवति । MyBatis-Plus क्षेत्रप्रकारस्य प्रोसेसर आधिकारिकसन्दर्भदस्तावेजः:क्षेत्र प्रकार प्रोसेसर |.
JSON क्षेत्रप्रकारस्य संचालकः
MyBatis-Plus इत्यत्र विविधाः अन्तःनिर्मिताः JSON प्रकारस्य प्रोसेसरः सन्ति, यथा... AbstractJsonTypeHandler
तस्य उपवर्गाः चFastjson2TypeHandler
、FastjsonTypeHandler
、GsonTypeHandler
、JacksonTypeHandler
प्रतीक्षतु। एते प्रोसेसराः JSON स्ट्रिंग् जावा ऑब्जेक्ट्स् मध्ये परिवर्तयितुं शक्नुवन्ति ।
PostgreSQL आँकडाधारक्षेत्राणि उपरि चित्रे दर्शितानि सन्ति: param_config json प्रकारस्य क्षेत्रम् अस्ति ।
Step 1: DO संस्थानां लेखनम्
क्षेत्रदत्तांशप्रकारः अस्ति com.alibaba.fastjson2.JSONObject 。
@Data
@Accessors(chain = true)
@TableName(autoResultMap = true)
public class User {
private Long id;
...
/**
* 关键代码!!!
* 必须开启映射注解
*
* @TableName(autoResultMap = true)
*
* 选择对应的 JSON 处理器,并确保存在对应的 JSON 解析依赖包
*/
@TableField(value = "param_config", typeHandler = JacksonTypeHandler.class)
// 或者使用 FastjsonTypeHandler
// @TableField(typeHandler = FastjsonTypeHandler.class)
private JSONObject paramConfig;
}
चरण 2: XML विन्यास तत्सम्बद्ध लेखनविधिः
<!-- 关键代码!!!!!!! -->
<!-- 单个字段的类型处理器配置 -->
<result column="param_config" jdbcType="VARCHAR" property="paramConfig" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
<!-- 多个字段中某个字段的类型处理器配置 -->
<resultMap id="departmentResultMap" type="com.baomidou...DepartmentVO">
<result property="director" column="director" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
</resultMap>
<select id="selectPageVO" resultMap="departmentResultMap">
select id,name,director from department ...
</select>
दत्तांशकोशे रक्षितानि परिणामानि पश्यन्तु, यथा अधः दर्शितम् अस्ति:
प्रथमं PostgreSQL database URL इत्यस्य अनन्तरं योजयन्तु &stringtype=अनिर्दिष्टम्, ध्यानं कुर्वन्तु यत् यदि एतत् विन्यासः प्रत्यक्षतया दत्तांशकोशनाम्नः पूर्वं भवति तर्हि भवद्भिः आवश्यकम् & प्रतिस्थापनं कृत्वा? 。
Step 1: DO entity class इति लेखनम्
@TableField(value = "param_config", typeHandler = JacksonTypeHandler.class)
private String paramConfig;
चरण 2: XML विन्यास तत्सम्बद्ध लेखनविधिः
<!-- 单个字段的类型处理器配置 -->
<result column="param_config" jdbcType="VARCHAR" property="paramConfig" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler" />
दत्तांशकोशे रक्षितानि परिणामानि पश्यन्तु, यथा अधः दर्शितम् अस्ति:
MyBatis-Plus इत्यस्मिन् अन्तर्निर्मितप्रकारस्य प्रोसेसरस्य उपयोगस्य अतिरिक्तं विकासकाः आवश्यकतानुसारं प्रकारप्रोसेसरं अपि अनुकूलितुं शक्नुवन्ति ।
उदाहरणार्थं, PostgreSQL दत्तांशकोशस्य उपयोगं कुर्वन्, भवान् JSON प्रकारस्य क्षेत्राणां सम्मुखीभवितुं शक्नोति अस्मिन् सन्दर्भे, भवान् JSON दत्तांशं संसाधितुं कस्टम् प्रकारस्य प्रोसेसरं निर्मातुम् अर्हति ।
निम्नलिखितम् इष्टस्य JSON प्रकारस्य प्रोसेसरस्य उदाहरणम् अस्ति ।
package com.ruoyi.common.utils.pg;
import com.ruoyi.common.utils.StringUtils;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedTypes;
import org.postgresql.util.PGobject;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @ClassName: JsonTypeHandlerPg
* @Description: json对象处理
* @Author: hjm
* @Date: 2024-07-11 10:34
*/
@MappedTypes(String.class)
public class JsonTypeHandlerPg extends BaseTypeHandler<String> {
/**
* 引入PGSQL提供的工具类PGobject
*/
private static final PGobject JSON_OBJECT = new PGobject();
public static final String JSON_TYPE = "json";
/**
* 关键位置!!!
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, String param, JdbcType jdbcType) throws SQLException {
JSON_OBJECT.setType(JSON_TYPE);
JSON_OBJECT.setValue(param);
ps.setObject(i, JSON_OBJECT);
}
@Override
public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
String sqlJson = rs.getString(columnName);
if (StringUtils.isNotBlank(sqlJson)) {
return sqlJson;
}
return null;
}
// 根据列索引,获取可以为空的结果
@Override
public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
String sqlJson = rs.getString(columnIndex);
if (StringUtils.isNotBlank(sqlJson)) {
return sqlJson;
}
return null;
}
@Override
public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
String sqlJson = cs.getString(columnIndex);
if (StringUtils.isNotBlank(sqlJson)) {
return sqlJson;
}
return null;
}
}
सत्तावर्गे उत्तीर्णः TableField
एनोटेशन्स् कस्टम् टाइप् हैंडलर्स् निर्दिशन्ति:
/**
* 测试对象
*
* @author hjm
* @date 2024-07-11
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("data_test")
public class DataTest extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id")
private Long id;
/**
* 关键位置!!!
*/
@TableField(typeHandler = JsonTypeHandlerPg.class)
private String jsonData;
}
मैपर सञ्चिकां परिवर्तयन्तु
<?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.ruoyi.dt.mapper.DataTestMapper">
<resultMap type="com.ruoyi.dt.domain.DataTest" id="DataTestResult">
<result property="id" column="id"/>
<!-- 关键位置!!! -->
<result property="jsonData" column="json_data" typeHandler="com.ruoyi.common.utils.pg.JsonTypeHandlerPg"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>
व्यावसायिक कोड
/**
* 新增数据
*/
@Override
public Boolean insertByAo(DataTestAo ao) {
DataTest add = BeanUtil.toBean(ao, DataTest.class);
// 关键位置!!!
add.setJsonData(JSONUtil.toJsonStr(ao));
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
ao.setId(add.getId());
}
return flag;
}
अयं लेखः समाप्तः!