Mybatis(7):返回结果封装ResulMap的高级属性--Collection标签

mybatis collection list string NULL 博文链接:https://jaychang.iteye.com/blog/2357143 立即下载

四部曲:

1.写接口  +  2.写映射sql  + 3.把mapper注册到mybatis的配置文件  + 4.写单元测试和运行

(1)新建两个实体类User.java 和 Address.java:
User.java(必须包含一个复杂属性(eg:序列),因为我们将通过Collection对嵌入的 javaBean 进行映射):

User.java:

package com.smbms.entities;

import java.util.Date;
import java.util.List;

public class User {
	private Integer id;
	private String userCode;
	private String userName;
	private String userPassword;
	private Integer gender;
	private Date birthday;
	private String phone;
	private String address ;
	private Integer userRole;
	private Integer createdBy;
	private Date creationDate;
	private Integer modifyBy;
	private Date modifyDate;
	private String userRoleName;
	private List<Address> addressList;
	
	
		
	public List<Address> getAddressList() {
		return addressList;
	}
	public void setAddressList(List<Address> addressList) {
		this.addressList = addressList;
	}
	public String getUserRoleName() {
		return userRoleName;
	}
	public void setUserRoleName(String userRoleName) {
		this.userRoleName = userRoleName;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUserCode() {
		return userCode;
	}
	public void setUserCode(String userCode) {
		this.userCode = userCode;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getUserPassword() {
		return userPassword;
	}
	public void setUserPassword(String userPassword) {
		this.userPassword = userPassword;
	}
	public Integer getGender() {
		return gender;
	}
	public void setGender(Integer gender) {
		this.gender = gender;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Integer getUserRole() {
		return userRole;
	}
	public void setUserRole(Integer userRole) {
		this.userRole = userRole;
	}
	public Integer getCreatedBy() {
		return createdBy;
	}
	public void setCreatedBy(Integer createdBy) {
		this.createdBy = createdBy;
	}
	public Date getCreationDate() {
		return creationDate;
	}
	public void setCreationDate(Date creationDate) {
		this.creationDate = creationDate;
	}
	public Integer getModifyBy() {
		return modifyBy;
	}
	public void setModifyBy(Integer modifyBy) {
		this.modifyBy = modifyBy;
	}
	public Date getModifyDate() {
		return modifyDate;
	}
	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}
	public User(Integer id, String userCode, String userName, String userPassword, Integer gender, Date birthday,
			String phone, String address, Integer userRole, Integer createdBy, Date creationDate, Integer modifyBy,
			Date modifyDate) {
		super();
		this.id = id;
		this.userCode = userCode;
		this.userName = userName;
		this.userPassword = userPassword;
		this.gender = gender;
		this.birthday = birthday;
		this.phone = phone;
		this.address = address;
		this.userRole = userRole;
		this.createdBy = createdBy;
		this.creationDate = creationDate;
		this.modifyBy = modifyBy;
		this.modifyDate = modifyDate;
	}
	public User() {
		super();
		// TODO 自动生成的构造函数存根
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", userCode=" + userCode + ", userName=" + userName + ", userPassword=" + userPassword
				+ ", gender=" + gender + ", birthday=" + birthday + ", phone=" + phone + ", address=" + address
				+ ", userRole=" + userRole + ", createdBy=" + createdBy + ", creationDate=" + creationDate
				+ ", modifyBy=" + modifyBy + ", modifyDate=" + modifyDate + "]";
	}
	
}

Address.java:

package com.smbms.entities;

import java.util.Date;

public class Address {
	private Integer id;
	private String postCode;
	private String contact;
	private String tel;
	private Integer createBy;
	private Date creationDate;
	private String modify;
	private Date modifyDate;
	private String AddressDesc;
	
	
	public String getAddressDesc() {
		return AddressDesc;
	}
	public void setAddressDesc(String addressDesc) {
		AddressDesc = addressDesc;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getPostCode() {
		return postCode;
	}
	public void setPostCode(String postCode) {
		this.postCode = postCode;
	}
	public String getContact() {
		return contact;
	}
	public void setContact(String contact) {
		this.contact = contact;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public Integer getCreateBy() {
		return createBy;
	}
	public void setCreateBy(Integer createBy) {
		this.createBy = createBy;
	}
	public Date getCreationDate() {
		return creationDate;
	}
	public void setCreationDate(Date creationDate) {
		this.creationDate = creationDate;
	}
	public String getModify() {
		return modify;
	}
	public void setModify(String modify) {
		this.modify = modify;
	}
	public Date getModifyDate() {
		return modifyDate;
	}
	public void setModifyDate(Date modifyDate) {
		this.modifyDate = modifyDate;
	}
	@Override
	public String toString() {
		return "Address [id=" + id + ", postCode=" + postCode + ", contact=" + contact + ", tel=" + tel + ", createBy="
				+ createBy + ", creationDate=" + creationDate + ", modify=" + modify + ", modifyDate=" + modifyDate
				+ "]";
	}
	public Address(Integer id, String postCode, String contact, String tel, Integer createBy, Date creationDate,
			String modify, Date modifyDate) {
		super();
		this.id = id;
		this.postCode = postCode;
		this.contact = contact;
		this.tel = tel;
		this.createBy = createBy;
		this.creationDate = creationDate;
		this.modify = modify;
		this.modifyDate = modifyDate;
	}
	public Address() {
		super();
		// TODO 自动生成的构造函数存根
	}
	
}

(2)在接口类UserMapper.java中进行方法定义:

package com.smbms.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.smbms.entities.User;

public interface UserMapper {
	
	public List<User> getAddressListByUserId(@Param("id") Integer userId);
	
}

(3)在sql映射文件 UserMapper.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.smbms.dao.UserMapper">

	<resultMap type="com.smbms.entities.User" id="UserAdressResult">
		<id property="id" column="id"/>
		<result property="userCode" column="userCode"/>
		<result property="userName" column="userName"/>
		<collection property="addressList" ofType="com.smbms.entities.Address">
			<id property="id" column="a_id"/>
			<result property="postCode" column="postCode"/>
			<result property="tel" column="tel"/>
			<result property="contact" column="contact"/>
			<result property="addressDesc" column="addressDesc"/>		
		</collection>
	</resultMap>
	<select id="getAddressListByUserId" 
	     parameterType="Integer" resultMap="UserAdressResult">
		select u.* , a.id as a_id ,a.contact,a.addressDesc,a.tel,a.postCode
		from smbms_user u,smbms_address a
		   where u.userRole=#{UserRole} and u.userRole=r.id
	</select>
	
 </mapper> 

(4)在全局配置文件注册映射文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
 PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3-config.dtd" >
 <configuration>
 	<properties resource="datasources.properties"/>
 	<settings>
 		<setting name="logImpl" value="LOG4J"/>
 	</settings>
 	<environments default="development">
 		<environment id="development">
 			<transactionManager type="JDBC"></transactionManager>
 			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driver}"/>
				<property name="url" value="${jdbc.url}"/>
				<property name="username" value="${jdbc.usename}"/>
				<property name="password" value="${jdbc.password}"/>
			</dataSource>
 		</environment>
 	</environments>
 	<mappers>
 		<mapper resource="com/smbms/dao/UserMapper.xml"/>
 		<mapper resource="com/smbms/dao/ProviderMapper.xml"/>
 	</mappers>
 </configuration>

(5)编写单元测试UserTest:

package com.smbms.entities;

import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.smbms.dao.ProviderMapper;
import com.smbms.dao.UserMapper;

public class UserTest {
	
	public SqlSession getSqlSession() throws IOException{
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory build = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession openSession = build.openSession();
		return openSession;
	}
	//collection标签对应于User的一个对象属性的列表
	@Test
	public void test12() throws IOException{
		System.out.println("===============test add!");
		List<User> userlist = new ArrayList<User> ();
		User user = new User();
		int count = 0;
		SqlSession sqlSession = getSqlSession();
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
		try{
			userlist = mapper.getAddressListByUserId(4);
			for(User u: userlist){
				List<Address> addressList = u.getAddressList();
				for(Address a:addressList){
					System.out.println("***"+a.getId()+a.getContact()+a.getModify()+a.getPostCode()+a.getTel()+a.getCreateBy()+a.getCreationDate());
					System.out.println(a.toString());
					System.out.println("================test end");
				}
			}
		}catch(Exception e){
			e.printStackTrace();
			sqlSession.rollback();
		}finally{
			sqlSession.close();
		}
	}

}	

综上,完成一个返回结果封装ResulMap的高级属性--Collection标签的Demo。




【异常】OpenClaw网关仪表盘 pairing required 报错排查与解决方案 在OpenClaw网关仪表盘页面,完成WebSocket URL、网关令牌等必填项配置后,点击「连接」按钮尝试建立网关连接时,页面下方出现红色报错提示框,核心报错内容为,无法完成网关连接建立,且该报错在令牌配置正确、网络链路通畅的场景下仍会触发。该报错常见于非本地回环地址的访问场景,包括局域网远程访问、公网域名/IP访问、云服务器部署的网关远程管理等场景,本地127.0.0.1回环地址访问通常可正常连接。 阅读详情

相关推荐

基于STM32的工业设备状态监测系统

工业设备的预测性维护需求日益增长,本文设计了一款基于STM32的智能监测终端,可实时采集设备振动、温度、电流等关键参数,通过边缘计算分析设备健康状态,实现故障预警与能效优化。系统支持4G/LoRa远程通信,适用于工厂、发电站等工业场景。本系统实现了工业设备关键参数的实时监测,故障识别准确率达到92%。:STM32F429(带FPU,支持浮点运算)多参数联合判据(振动+温度+电流突变检测)ACS712电流检测模块(0-30A)FFT频谱分析(识别轴承故障特征频率)故障代码生成(支持16种预设故障类型)

stm32d1219的博客 1323

MyBatis resultMap collection标签 返回基本类型集合 如:List<Long> List<String> List<Integer>等

MyBatis Collection标签 返回基本类型集合 List List List List

做梦的咸鱼 3286

如何用Python爬取中国土地市场网2000-2023年土地出让数据(含经纬度)

本文详细介绍了如何使用Python爬取中国土地市场网2000-2023年的土地出让数据(含经纬度),提供了一套高效的技术方案。通过应对动态加载的反爬机制、优化地理编码数据存储和设计异常处理流程,帮助开发者建立自动化数据采集管道。方案已在商业地产分析项目中验证,可稳定采集超过50万条土地交易记录。

weixin_30566063的博客 172

【MyBatis】resultMap标签中里的collection标签

前言 collection(一对多) 元素的作用和association元素的作用差不多一样,事实上,它们非常类似,也是映射到JavaBean的某个“复杂类型” 属性,只不过这个属性是一个集合列表,即JavaBean内部嵌套一个复杂数据类型(集合)。和使用association元素一样,我们使用嵌套查询, 或者从连接中嵌套结果集。 示例 1、现有两张表,sys_dict_type和sys_dict_value,两表是一对多的关系,表结构如下图所示: 2、其中表sys_dict_type的

qq_37634156的博客 8130

海康威视GigE工业相机的python调用demo

默认路径安装完成后,在路径C:\Program Files (x86)\MVS\Development\Samples\Python\BasicDemo下的BasicDemo.py中,海康威视官方提供了基本的调用方法,本文也是基于这个修改的。BasicDemo.py提供了通过枚举选择相机的方法,在官方的另一个DEMO:ConnectSpecCamera.py中提供了另一种不通过枚举,直接访问特定IP相机的方法,也可以参考。另外,如果每台相机都定义了唯一的用户定义名,也可以通过用户定义名来区分相机。

xulibo5828的博客 2108

STM32/GD32以太网开发避坑指南:ZLG EPORTM模块调试实战(含YT8512H配置)

本文针对STM32/GD32平台使用ZLG EPORTM模块进行以太网开发时遇到的常见问题,提供了详细的调试实战指南。重点解析了从传统PHY驱动迁移到YT8512H芯片的核心步骤,包括软件复位延时、RMII时钟配置等关键陷阱,并分享了LWIP集成与稳定性验证的实用经验,帮助开发者高效避坑。

rice5的博客 1161

mybatise 中 返回collection写法 可层层嵌套

xml中写法 <resultMap id="deptGradeListMap" type="java.util.Map"> <result column="id" property="id" jdbcType="VARCHAR" /> <result column="userId" property="userId" jdbcType="VARCHAR" /> <result column="userName" property="userName"..

ybf57ai的博客 406

VS2019+EasyX图形库实战:手把手教你用C语言打造消消乐小游戏(附完整源码)

本文详细介绍了如何使用VS2019和EasyX图形库从零开始构建一个C语言消消乐小游戏。通过环境配置、数据结构设计、界面绘制、交互实现到游戏逻辑完善的完整流程,帮助开发者掌握图形编程和游戏开发的核心技巧,并附有完整源码供参考。

bush的博客 186

mybatis返回嵌套list结果(使用collection标签)

mybatis返回嵌套list结果(使用collection标签) 1.前言 举个栗子: 表a是书籍信息表(书籍id,书籍名称,书籍作者,出版日期,出版社) 表b是借阅流水表(流水id,借阅者id,借阅者姓名,书籍id) 需求: 获取表a每本书的借阅者姓名 如: [ {//书籍1111被 张三、李四借阅过 "bookId": "11111", "borrowList": [ { "readerName": "张三" }, {

qq_37700773的博客 2134

Ghost备份还原Win10全攻略:从老电脑迁移到新硬盘,ESP分区处理是关键

本文详细介绍了使用Ghost工具将Win10系统从旧电脑迁移到新硬盘的全过程,特别强调了ESP分区的关键处理方法。通过分步指导备份、分区准备、系统还原和引导修复,帮助用户实现无缝系统迁移,解决常见问题如启动失败和驱动兼容性。

weixin_30823001的博客 672

微信小程序 - {“errMsg”:”requestPayment:fail banned”} 微信小程序调用wx.requestPayment支付失败返回错误(uniapp微信小程序微信支付报错)

{“errMsg”:”requestPayment:fail banned”},微信小程序调用wx.requestPayment报错requestPayment:fail banned,uni-app微信小程序wx.requestPayment支付报错requestPayment:fail banned,拉起小程序支付报错,iPhone苹果ios真机微信支付报错,Android安卓手机微信支付报错,支付报错,商户配置,签名验证,uniapp 小程序支付微信支付一场,设置过b2b类目,确认了商户号相关功能正常

🏆 前端领域优质创作者 3342

MyBatis的collection(返回值包含集合)

我们在这里用实例做解释(我们需要做一个简单需求)表之间的关系,我就不说了(大家应该都能看懂)。我们需求:用户评论列表(这个比较简单)我们需要创建一个无关实体类。

WZGOU的博客 544

停车位检测:基于YOLOv5与UI界面的实现

YOLOv5是YOLO(You Only Look Once)系列中的最新版本,它能够在单次前向传播中同时完成多个目标的定位与分类,因此被广泛应用于实时目标检测任务。与之前的版本相比,YOLOv5在精度和速度上得到了很大的优化,适合嵌入到实际的自动驾驶和智能交通系统中。YOLOv5使用了卷积神经网络(CNN)进行特征提取,并通过回归方法预测边界框、类别及置信度。高效的推理速度:YOLOv5采用了优化的模型结构,能够在保证精度的同时提供较快的推理速度。较高的精度。

YOLO 694

Mybatis高级结果映射ResulMap与ResultType,collection与association

高级结果映射 MyBatis的创建基于这样一个思想:数据库并不是您想怎样就怎样的。虽然我们希望所有的数据库遵守第三范式或BCNF(修正的第三范式),但它们不是。如果有一个数据库能够完美映射到所有应用程序,也将是非常棒的,但也没有。结果集映射就是MyBatis为解决这些问题而提供的解决方案。例如,我们如何映射下面这条语句? [sql] view plain cop

freedomlove_的博客 1828

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Mybatis框架中结果映射resultMap标签方法属性收录

ID:在resultMap中,可以为每个映射指定一个唯一的ID,以便于引用。 Result:基本的结果映射,可以指定列名和对象属性名之间的映射关系。 Collection:用于处理一对多的关系映射。例如,一个用户(User)对象关联多个订单(Order)对象。 resultMap是MyBatis中用于处理复杂数据映射的关键特性。通过定义。

1525

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

resultMap多表查询【MyBatis笔记五】

resultMap 处理列名不一致问题(多表查询) 目录 (1)处理单表关系 (2)处理多表关系 ①⼀对多和多对⼀ ②多对多 ③一对一 (1)处理单表关系 通过给列起别名,让别名=属性名,也可以实现数据对应(mybatis 能实现的是单表的⾃动操作) property 为实体类中的属性名,column 为数据库返回结果的列名,两者不一致的时候需要通过 resultMap 实现数据对应。 <resultMap id="aaa" type="bean.Dept"> ..

yuyu的博客 819

mybatis返回集合 collections 一对多

课程mapper 根据老师ID 查询课程 // 通过老师ID 得到课程 List<Course> getCourseByTeacherId(Integer teacherId); <select id="getCourseByTeacherId" resultMap="BaseResultMap"> select * from course where TID = #{teacherId} </select> 定义返回类 @Data public class T

拱卒的博客 594

mybatis嵌套resultMap

mybatis嵌套resultMap SQL语句: select c1, c2, c3, c4...cn from some_table Mybatis mapper.xml <select id="query" resultMap="SomethingMap"> select c1, c2, c3, c4...cn from some_table where someconditions </select> <resultMap type="com.package

wenfenglingran的博客 1573

Mybatis 只返回一条数据的解决方案 之association、collection

Mybatis中有一个结果集映射map-&gt;resultMapresultMap中有association和collectionassociation是一对一或者多对一,collection是一对多为了方便理解,我用了两个类测试,一个是StudentC,一个ClassS:学生类StudentC:public class StudentC { private Long sid; ...

ckk_xiao的博客 2431

mybatis collection

eg: SELECT * FROM user_info WHERE (USERNAME,AGE) IN ((‘张三’,‘26’),(‘李四’,‘58’),(‘王五’,‘27’),…-----建议做if test="xxxx!=null and xxxx.size()>0"的校验,比较严谨。-----建议做if test="xxxx!=null and xxxx.length()>0"的校验,比较严谨。=null and xxxx.size()>0"的校验,比较严谨。第一种:获取Map的键值对。

weixin_44617188的博客 4790

【备忘录】Mybatis collection标签一对多映射中的多只查出一个返回结果、Springboot返回json时因jackson多出额外的参数

参考:https://blog.youkuaiyun.com/u013447988/article/details/106228938。使用jackson进行序列化时,springboot的@RequestBody注解底层是使用jackson进行序列化的,建议:每张表的主键如id最好定义为不同,如 tearch表主键—tid,student表主键—sid。原因:一所对应的表与多所对应的表的id相同 导致的,可以用别名解决。

Cangwuwuwu 564

mybatis中的resulitMap配置

首先我们给resultMap取了一个id,这个id是resultMap的唯一标识符,我们在后面引用这个resultMap的时候就是通过这个id来引用,然后还定义了type属性,type属性指明了这个resultMap它对应的是哪个JavaBean。  在resultMap节点中,id表示哪个字段代表这主键,result节点定义了普通的映射关系,这里的property表示JavaBean中的属性名

qq_34777858的博客 556

mybatis resultMap 嵌套,将部分属性对应封装到Map中,复杂映射mapper

XML文件 &lt;resultMap type="com.web.dto.TemplateColumnsVO" id="TemplateColumnsVO"&gt; &lt;result column="type" property="type" /&gt; &lt;result column="column_code

流水随清风的博客 1万+

MyBatis中的collection两种常用使用方法(非常详细)

MyBatis中的collection两种常用使用方法 码云MybatisDemo: 用来学习springboot整合mybatis (gitee.com) collection主要是应对表关系是一对多的情况 查询的时候,用到联表去查询 接下来的小案例包括:市,学校,医院(随便写的),写一个最简单的demo 主要的功能就是查询出所有的市以及对应的市下面所有的学校和医院 实体类:医院 @Data @AllArgsConstructor @NoArgsConstructor public class Hospi

weixin_46645338的博客 4万+

MyBatis,resultmap中collection 返回List<Long>

<select id="queryPharmacyVisitIds" resultMap="queryProductAndPharmacyVisit"> SELECT tp.product_id, tp.start_date, tp.end_date, tpv.pharmacy_visit_id ...

yx_liu的博客 6103

Mybatis一对多关联查询,返回结果集list中嵌套list实例(collection实现)

Mybatis一对多关联查询,返回结果集list中嵌套list实例,collection实现1.问题描述2.解决方法==3.特别提醒==4.运行结果5.总结 1.问题描述 最近在使用SpringBoot框架开发Web层项目时遇到的一个小问题,需要查询一个对象(A)的数据内容到另一个对象(B)中的list集合中,将对象(B)的数据展示在页面上。 2.解决方法 解决方法:主要使用mybatis中的 c...

lihaoyiding的博客 9107

mybatis返回多个map结果

如果返回一条结果,xml直接这样写: <select id="searchncomedateByInvestID" resultMap="java.util.HashMap"> select t1.invest_id , cast(t1.modify_time AS DATE) modify_time fro...

qq_38348679的博客 4176
上一篇: Mybatis(6):返回结果封装ResulMap的高级属性--association标签
下一篇: Spring(4):log4j打印日志
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值