Spring+Hibernate+Xfire实现远程分布式调用

一、基本接口

public interface IBaseDao {

    public void save(Kpxxmx transientInstance);
    public void delete(Kpxxmx persistentInstance);
    public Kpxxmx findById(java.lang.Long id);
    public List findByExample(Kpxxmx instance);
    public List findByProperty(String propertyName, Object value);
    public List findByWdhKpzb(Object wdhKpzb) ;
    public List findByPzbm(Object pzbm) ;
    public List findByQyId(Object qyId);
    public List findBySwjgbm(Object swjgbm);
    public List findByZgKpzb(Object zgKpzb);
    public List findBySphKpzb(Object sphKpzb);
    public List findByKplxKpzb(Object kplxKpzb);
    public List findBySmbm(Object smbm);
    public List findBySzbm(Object szbm);
    public List findBySfxz(Object sfxz);
    public List findByZjid(Object zjid);
    public List findByNsrid(Object nsrid);
    public List findByDjzh(Object djzh);
    public List findByMm(Object mm);
    public List findByZt(Object zt);
    public List findByXzqhdm(Object xzqhdm);
    public List findBySzmc(Object szmc);
    public List findByWdhSbzb(Object wdhSbzb);
    public List findByNsrsbh(Object nsrsbh);
    public List findAll();
    public Kpxxmx merge(Kpxxmx detachedInstance);
    public void attachDirty(Kpxxmx instance);
    public void attachClean(Kpxxmx instance);
}

 

二、新建实现类

 

public class IBaseDaoImpl extends HibernateDaoSupport implements IBaseDao {
    private static final Log log = LogFactory.getLog(KpxxmxServiceImp.class);
    public static final String WDH_KPZB = "wdhKpzb";
    public static final String PZBM = "pzbm";
    public static final String QY_ID = "qyId";
    public static final String SWJGBM = "swjgbm";
    public static final String ZG_KPZB = "zgKpzb";
    public static final String SPH_KPZB = "sphKpzb";
    public static final String KPLX_KPZB = "kplxKpzb";
    public static final String SMBM = "smbm";
    public static final String SZBM = "szbm";
    public static final String SFXZ = "sfxz";
    public static final String ZJID = "zjid";
    public static final String NSRID = "nsrid";
    public static final String DJZH = "djzh";
    public static final String MM = "mm";
    public static final String ZT = "zt";
    public static final String XZQHDM = "xzqhdm";
    public static final String SZMC = "szmc";
    public static final String WDH_SBZB = "wdhSbzb";
    public static final String NSRSBH = "nsrsbh";
   
    public void save(Kpxxmx transientInstance) {
        log.debug("saving Kpxxmx instance");
        try {
            getHibernateTemplate().save(transientInstance);
            log.debug("save successful");
        } catch (RuntimeException re) {
            log.error("save failed", re);
            throw re;
        }
    }

    public void delete(Kpxxmx persistentInstance) {
        log.debug("deleting Kpxxmx instance");
        try {
            getHibernateTemplate().delete(persistentInstance);
            log.debug("delete successful");
        } catch (RuntimeException re) {
            log.error("delete failed", re);
            throw re;
        }
    }

    public Kpxxmx findById(java.lang.Long id) {
        log.debug("getting Kpxxmx instance with id: " + id);
        try {
            Kpxxmx instance = (Kpxxmx) getHibernateTemplate().get(
                    "edu.tsing.vo.Kpxxmx", id);
            return instance;
        } catch (RuntimeException re) {
            log.error("get failed", re);
            throw re;
        }
    }

    public List findByExample(Kpxxmx instance) {
        log.debug("finding Kpxxmx instance by example");
        try {
            List results = getHibernateTemplate().findByExample(instance);
            log.debug("find by example successful, result size: "
                    + results.size());
            return results;
        } catch (RuntimeException re) {
            log.error("find by example failed", re);
            throw re;
        }
    }

    public List findByProperty(String propertyName, Object value) {
        log.debug("finding Kpxxmx instance with property: " + propertyName
                + ", value: " + value);
        try {
            String queryString = "from Kpxxmx as model where model."
                    + propertyName + "= ?";
            return getHibernateTemplate().find(queryString, value);
        } catch (RuntimeException re) {
            log.error("find by property name failed", re);
            throw re;
        }
    }

    public List findByWdhKpzb(Object wdhKpzb) {
        return findByProperty(WDH_KPZB, wdhKpzb);
    }

    public List findByPzbm(Object pzbm) {
        return findByProperty(PZBM, pzbm);
    }

    public List findByQyId(Object qyId) {
        return findByProperty(QY_ID, qyId);
    }

    public List findBySwjgbm(Object swjgbm) {
        return findByProperty(SWJGBM, swjgbm);
    }

    public List findByZgKpzb(Object zgKpzb) {
        return findByProperty(ZG_KPZB, zgKpzb);
    }

    public List findBySphKpzb(Object sphKpzb) {
        return findByProperty(SPH_KPZB, sphKpzb);
    }

    public List findByKplxKpzb(Object kplxKpzb) {
        return findByProperty(KPLX_KPZB, kplxKpzb);
    }

    public List findBySmbm(Object smbm) {
        return findByProperty(SMBM, smbm);
    }

    public List findBySzbm(Object szbm) {
        return findByProperty(SZBM, szbm);
    }

    public List findBySfxz(Object sfxz) {
        return findByProperty(SFXZ, sfxz);
    }

    public List findByZjid(Object zjid) {
        return findByProperty(ZJID, zjid);
    }

    public List findByNsrid(Object nsrid) {
        return findByProperty(NSRID, nsrid);
    }

    public List findByDjzh(Object djzh) {
        return findByProperty(DJZH, djzh);
    }

    public List findByMm(Object mm) {
        return findByProperty(MM, mm);
    }

    public List findByZt(Object zt) {
        return findByProperty(ZT, zt);
    }

    public List findByXzqhdm(Object xzqhdm) {
        return findByProperty(XZQHDM, xzqhdm);
    }

    public List findBySzmc(Object szmc) {
        return findByProperty(SZMC, szmc);
    }

    public List findByWdhSbzb(Object wdhSbzb) {
        return findByProperty(WDH_SBZB, wdhSbzb);
    }

    public List findByNsrsbh(Object nsrsbh) {
        return findByProperty(NSRSBH, nsrsbh);
    }

    public List findAll() {
        log.debug("finding all Kpxxmx instances");
        try {
            String queryString = "from Kpxxmx";
            return this.getHibernateTemplate().find(queryString);
        } catch (RuntimeException re) {
            log.error("find all failed", re);
            throw re;
        }
    }

    public Kpxxmx merge(Kpxxmx detachedInstance) {
        log.debug("merging Kpxxmx instance");
        try {
            Kpxxmx result = (Kpxxmx) getHibernateTemplate().merge(
                    detachedInstance);
            log.debug("merge successful");
            return result;
        } catch (RuntimeException re) {
            log.error("merge failed", re);
            throw re;
        }
    }

    public void attachDirty(Kpxxmx instance) {
        log.debug("attaching dirty Kpxxmx instance");
        try {
            getHibernateTemplate().saveOrUpdate(instance);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }

    public void attachClean(Kpxxmx instance) {
        log.debug("attaching clean Kpxxmx instance");
        try {
            getHibernateTemplate().lock(instance, LockMode.NONE);
            log.debug("attach successful");
        } catch (RuntimeException re) {
            log.error("attach failed", re);
            throw re;
        }
    }
   
}

 

三、新建业务接口

 

public interface KpxxmxService {
    public void save(Kpxxmx transientInstance);
    public void delete(Kpxxmx persistentInstance);
    public Kpxxmx findById(java.lang.Long id);
    public List<Kpxxmx> findByExample(Kpxxmx instance);
    public List<Kpxxmx> findByProperty(String propertyName, Object value);
    public List<Kpxxmx> findByWdhKpzb(Object wdhKpzb) ;
    public List<Kpxxmx> findByPzbm(Object pzbm) ;
    public List<Kpxxmx> findByQyId(Object qyId);
    public List<Kpxxmx> findBySwjgbm(Object swjgbm);
    public List<Kpxxmx> findByZgKpzb(Object zgKpzb);
    public List<Kpxxmx> findBySphKpzb(Object sphKpzb);
    public List<Kpxxmx> findByKplxKpzb(Object kplxKpzb);
    public List<Kpxxmx> findBySmbm(Object smbm);
    public List<Kpxxmx> findBySzbm(Object szbm);
    public List<Kpxxmx> findBySfxz(Object sfxz);
    public List<Kpxxmx> findByZjid(Object zjid);
    public List<Kpxxmx> findByNsrid(Object nsrid);
    public List<Kpxxmx> findByDjzh(Object djzh);
    public List<Kpxxmx> findByMm(Object mm);
    public List<Kpxxmx> findByZt(Object zt);
    public List<Kpxxmx> findByXzqhdm(Object xzqhdm);
    public List<Kpxxmx> findBySzmc(Object szmc);
    public List<Kpxxmx> findByWdhSbzb(Object wdhSbzb);
    public List<Kpxxmx> findByNsrsbh(Object nsrsbh);
    public List<Kpxxmx> findAll();
    public Kpxxmx merge(Kpxxmx detachedInstance);
    public void attachDirty(Kpxxmx instance);
    public void attachClean(Kpxxmx instance);


}

 

四、在Sring中注入业务组件

public class KpxxmxServiceImp implements KpxxmxService {
   
    private IBaseDao baseDao;   
   
    public IBaseDao getBaseDao() {
        return baseDao;
    }

    public void setBaseDao(IBaseDao baseDao) {
        this.baseDao = baseDao;
    }

    public void attachClean(Kpxxmx instance) {
   
        baseDao.attachClean(instance);   
    }

    public void attachDirty(Kpxxmx instance) {
        // TODO Auto-generated method stub
        baseDao.attachDirty(instance);
    }

    public void delete(Kpxxmx persistentInstance) {
        // TODO Auto-generated method stub
        baseDao.delete(persistentInstance);
    }

    public List<Kpxxmx> findAll() {
        // TODO Auto-generated method stub
        return baseDao.findAll();
    }

    public List<Kpxxmx> findByDjzh(Object djzh) {
        // TODO Auto-generated method stub
        return baseDao.findByDjzh(djzh);
    }

    public List<Kpxxmx> findByExample(Kpxxmx instance) {
        // TODO Auto-generated method stub
        return baseDao.findByExample(instance);
    }

    public Kpxxmx findById(Long id) {
        // TODO Auto-generated method stub
        return baseDao.findById(id);
    }

    public List<Kpxxmx> findByKplxKpzb(Object kplxKpzb) {
        // TODO Auto-generated method stub
        return baseDao.findByKplxKpzb(kplxKpzb);
    }

    public List<Kpxxmx> findByMm(Object mm) {
        // TODO Auto-generated method stub
        return baseDao.findByMm(mm);
    }

    public List<Kpxxmx> findByNsrid(Object nsrid) {
        // TODO Auto-generated method stub
        return baseDao.findByNsrid(nsrid);
    }

    public List<Kpxxmx> findByNsrsbh(Object nsrsbh) {
        // TODO Auto-generated method stub
        return baseDao.findByNsrsbh(nsrsbh);
    }

    public List<Kpxxmx> findByProperty(String propertyName, Object value) {
        // TODO Auto-generated method stub
        return baseDao.findByProperty(propertyName, value);
    }

    public List<Kpxxmx> findByPzbm(Object pzbm) {
        // TODO Auto-generated method stub
        return baseDao.findByPzbm(pzbm);
    }

    public List<Kpxxmx> findByQyId(Object qyId) {
        // TODO Auto-generated method stub
        return baseDao.findByQyId(qyId);
    }

    public List<Kpxxmx> findBySfxz(Object sfxz) {
        // TODO Auto-generated method stub
        return baseDao.findBySfxz(sfxz);
    }

    public List<Kpxxmx> findBySmbm(Object smbm) {
        // TODO Auto-generated method stub
        return baseDao.findBySmbm(smbm);
    }

    public List<Kpxxmx> findBySphKpzb(Object sphKpzb) {
        // TODO Auto-generated method stub
        return baseDao.findBySphKpzb(sphKpzb);
    }

    public List<Kpxxmx> findBySwjgbm(Object swjgbm) {
        // TODO Auto-generated method stub
        return baseDao.findBySwjgbm(swjgbm);
    }

    public List<Kpxxmx> findBySzbm(Object szbm) {
        // TODO Auto-generated method stub
        return baseDao.findBySzbm(szbm);
    }

    public List<Kpxxmx> findBySzmc(Object szmc) {
        // TODO Auto-generated method stub
        return baseDao.findBySzmc(szmc);
    }

    public List<Kpxxmx> findByWdhKpzb(Object wdhKpzb) {
        // TODO Auto-generated method stub
        return baseDao.findByWdhKpzb(wdhKpzb);
    }

    public List<Kpxxmx> findByWdhSbzb(Object wdhSbzb) {
        // TODO Auto-generated method stub
        return baseDao.findByWdhSbzb(wdhSbzb);
    }

    public List<Kpxxmx> findByXzqhdm(Object xzqhdm) {
        // TODO Auto-generated method stub
        return baseDao.findByXzqhdm(xzqhdm);
    }

    public List<Kpxxmx> findByZgKpzb(Object zgKpzb) {
        // TODO Auto-generated method stub
        return baseDao.findByZgKpzb(zgKpzb);
    }

    public List<Kpxxmx> findByZjid(Object zjid) {
        // TODO Auto-generated method stub
        return baseDao.findByZjid(zjid);
    }

    public List<Kpxxmx> findByZt(Object zt) {
        // TODO Auto-generated method stub
        return baseDao.findByZt(zt);
    }

    public Kpxxmx merge(Kpxxmx detachedInstance) {
        // TODO Auto-generated method stub
        return baseDao.merge(detachedInstance);
    }

    public void save(Kpxxmx transientInstance) {
        // TODO Auto-generated method stub
        baseDao.save(transientInstance);
       
    }
    }

 

五、实体类

 

public class Kpxxmx implements java.io.Serializable {

    // Fields

    private Long recid;
    private String wdhKpzb;
    private BigDecimal wdxhKpmx;
    private String pzbm;
    private String qyId;
    private String swjgbm;
    private String zgKpzb;
    private String sphKpzb;
    private Date kprqKpzb;
    private String kplxKpzb;
    private String smbm;
    private String szbm;
    private BigDecimal nsjsjKpmx;
    private BigDecimal kslKpmx;
    private BigDecimal dwsgKpmx;
    private BigDecimal slKpmx;
    private BigDecimal kcsKpmx;
    private BigDecimal kpsjKpmx;
    private Date jzrqKpmx;
    private Date jzrq1Kpmx;
    private String sfxz;
    private Long zjid;
    private Long nsrid;
    private BigDecimal czr;
    private Date czsj;
    private String djzh;
    private String mm;
    private String zt;
    private String xzqhdm;
    private String szmc;
    private BigDecimal sjsjZbmx;
    private Date sbrqZbmx;
    private String wdhSbzb;
    private BigDecimal wdhxhZbmx;
    private String nsrsbh;

 

。。。。。。。。。。。。。。。。。。。

 

 

六、映射文件

<hibernate-mapping>
    <class name="edu.tsing.vo.Kpxxmx" table="KPXXMX" schema="scott">
        <id name="recid" type="java.lang.Long">
            <column name="RECID" precision="10" scale="0" />
            <generator class="sequence">
                <param name="sequence">TAX_SEQENCE</param>
            </generator>
        </id>
        <property name="wdhKpzb" type="java.lang.String">
            <column name="WDH_KPZB" length="20" />
        </property>
        <property name="wdxhKpmx" type="java.math.BigDecimal">
            <column name="WDXH_KPMX" precision="22" scale="0" />
        </property>
        <property name="pzbm" type="java.lang.String">
            <column name="PZBM" length="4" />
        </property>
        <property name="qyId" type="java.lang.String">
            <column name="QY_ID" length="20" />
        </property>
        <property name="swjgbm" type="java.lang.String">
            <column name="SWJGBM" length="8" />
        </property>
        <property name="zgKpzb" type="java.lang.String">
            <column name="ZG_KPZB" length="20" />
        </property>
        <property name="sphKpzb" type="java.lang.String">
            <column name="SPH_KPZB" length="8" />
        </property>
        <property name="kprqKpzb" type="java.util.Date">
            <column name="KPRQ_KPZB" length="7" />
        </property>
        <property name="kplxKpzb" type="java.lang.String">
            <column name="KPLX_KPZB" length="2" />
        </property>
        <property name="smbm" type="java.lang.String">
            <column name="SMBM" length="8" />
        </property>
        <property name="szbm" type="java.lang.String">
            <column name="SZBM" length="2" />
        </property>
        <property name="nsjsjKpmx" type="java.math.BigDecimal">
            <column name="NSJSJ_KPMX" precision="22" scale="0" />
        </property>
        <property name="kslKpmx" type="java.math.BigDecimal">
            <column name="KSL_KPMX" precision="22" scale="0" />
        </property>
        <property name="dwsgKpmx" type="java.math.BigDecimal">
            <column name="DWSG_KPMX" precision="22" scale="0" />
        </property>
        <property name="slKpmx" type="java.math.BigDecimal">
            <column name="SL_KPMX" precision="22" scale="0" />
        </property>
        <property name="kcsKpmx" type="java.math.BigDecimal">
            <column name="KCS_KPMX" precision="22" scale="0" />
        </property>
        <property name="kpsjKpmx" type="java.math.BigDecimal">
            <column name="KPSJ_KPMX" precision="22" scale="0" />
        </property>
        <property name="jzrqKpmx" type="java.util.Date">
            <column name="JZRQ_KPMX" length="7" />
        </property>
        <property name="jzrq1Kpmx" type="java.util.Date">
            <column name="JZRQ1_KPMX" length="7" />
        </property>
        <property name="sfxz" type="java.lang.String">
            <column name="SFXZ" length="2" />
        </property>
        <property name="zjid" type="java.lang.Long">
            <column name="ZJID" precision="10" scale="0" />
        </property>
        <property name="nsrid" type="java.lang.Long">
            <column name="NSRID" precision="10" scale="0" />
        </property>
        <property name="czr" type="java.math.BigDecimal">
            <column name="CZR" precision="22" scale="0" />
        </property>
        <property name="czsj" type="java.util.Date">
            <column name="CZSJ" length="7" />
        </property>
        <property name="djzh" type="java.lang.String">
            <column name="DJZH" length="30" />
        </property>
        <property name="mm" type="java.lang.String">
            <column name="MM" length="2" />
        </property>
        <property name="zt" type="java.lang.String">
            <column name="ZT" length="2" />
        </property>
        <property name="xzqhdm" type="java.lang.String">
            <column name="XZQHDM" length="20" />
        </property>
        <property name="szmc" type="java.lang.String">
            <column name="SZMC" length="20" />
        </property>
        <property name="sjsjZbmx" type="java.math.BigDecimal">
            <column name="SJSJ_ZBMX" precision="22" scale="0" />
        </property>
        <property name="sbrqZbmx" type="java.util.Date">
            <column name="SBRQ_ZBMX" length="7" />
        </property>
        <property name="wdhSbzb" type="java.lang.String">
            <column name="WDH_SBZB" length="20" />
        </property>
        <property name="wdhxhZbmx" type="java.math.BigDecimal">
            <column name="WDHXH_ZBMX" precision="22" scale="0" />
        </property>
        <property name="nsrsbh" type="java.lang.String">
            <column name="NSRSBH" length="20" />
        </property>
    </class>
</hibernate-mapping>

 

七、新建Spring配置文件 applicationContext.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

    <bean id="datasource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
        </property>
        <property name="url" value="jdbc:oracle:thin:@localhost:1521:wang">
        </property>
        <property name="username" value="scott"></property>
        <property name="password" value="123"></property>
    </bean>
    <!--数据源
        <bean id="datasource"
        class="org.springframework.jndi.JndiObjectFactoryBean"> <property
        name="jndiName"> <value>java:comp/env/jdbc/exch</value> </property>
        </bean>
    -->
    <bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="datasource" />
        </property>
        <property name="mappingResources">
            <list>
            <value>edu/tsing/vo/Kpxxmx.hbm.xml</value>           
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
                <!-- <prop key="hibernate.show_sql">true</prop> -->
            </props>
        </property>       
   
    </bean>

    <bean id="namingTransactionAttribute"
        class="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
        <property name="properties">
            <props>
                <prop key="insert*">PROPAGATION_REQUIRED</prop>
                <prop key="create*">PROPAGATION_REQUIRED</prop>
                <prop key="update*">PROPAGATION_REQUIRED</prop>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="del*">PROPAGATION_REQUIRED</prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>
    <bean id="baseTransactionProxy"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
        abstract="true">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributeSource">
            <ref bean="namingTransactionAttribute" />
        </property>
    </bean>

    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
            <ref bean="datasource" />
        </property>
    </bean>

    <bean id="baseDao" class="edu.tsing.dao.IBaseDaoImpl">
        <property name="sessionFactory">
            <ref bean="sessionFactory"/>
        </property>
    </bean>
    <!-- 业务组件 -->
    <bean id="baseserviceTarget" class="edu.tsing.service.KpxxmxServiceImp">
        <property name="baseDao">
            <ref bean="baseDao" />
        </property>
    </bean>
<!--
    <bean id="baseService" parent="baseTransactionProxy">
        <property name="proxyInterfaces">
            <list>
                <value>edu.tsing.service.KpxxmxService</value>
            </list>
        </property>
        <property name="target">
            <ref bean="baseserviceTarget" />
        </property>
    </bean>
 -->
    <bean id="UserServices" parent="baseWebService">
   
        <property name="serviceBean" ref="baseserviceTarget" />
       
        <property name="serviceClass" value="edu.tsing.service.KpxxmxService" />
    </bean>
   
     <import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
     
   
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="urlMap">           
                <map>
                    <entry key="/UserServices.ws">                   
                    <ref bean="UserServices" />               
                    </entry>
                </map>   

        </property>
    </bean>
    <bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter"
        lazy-init="false" abstract="true">
       
        <property name="serviceFactory" ref="xfire.serviceFactory" />
   
        <property name="xfire" ref="xfire" />
    </bean>   
</beans>

 

八、serivce.xml文件配置

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service> 
 <name>KpxxmxService</name> 
<namespace>http://service.tsing.edu.services</namespace> 
 <serviceClass>edu.tsing.service.KpxxmxService</serviceClass> 
 <implementationClass>edu.tsing.service.KpxxmxServiceImp</implementationClass> 
</service>     
</beans>

 

九、远程或本地调用,直接下载附件中项目(kp_web)进行调用.

 

..............................................................

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值