ssh2实现功能

项目大体:
在这里插入图片描述
编写实体类:
user.java
以及映射文件user.hbm.xml
将配置文件配置到heibernate中(既spring-hibernate.xml)

<value>com/wangcong/user/entity/User.hbm.xml</value>

写dao:
固定list方法

public List<User> list(){
	  return this.getHibernateTemplate().execute(new HibernateCallback<List<User>>() {

		@Override
		public List<User> doInHibernate(Session session) throws HibernateException {
			// 写内容
				Query query ;
				List list = new ArrayList ();
				//获取查询条件
				String uname = user.getUname();
				String pwd = user.getPwd();
				//判断是否为空
				if(StringUtils.isNotBlank(uname) && StringUtils.isNotBlank(pwd)) {
					//拼接hql
					query  = session.createQuery("from User where uname = :uname and pwd = :pwd");
					query.setParameter("uname", uname);
					query.setParameter("pwd", pwd);
					list = query.list();
				}
				return list;
			
		}
	});
  }

写biz和Dao中的方法一样

package com.wangcong.user.biz;

import com.wangcong.user.entity.User;

public interface UserBiz {
 public User login(User user);
}

写实现类impl

package com.wangcong.user.biz.impl;

import com.wangcong.user.biz.UserBiz;
import com.wangcong.user.dao.UserDao;
import com.wangcong.user.entity.User;

public class UserBizImpl implements UserBiz {
private UserDao userdao=new UserDao();
//提供set和get方法 因为spring要管理javabean 不提供会注入不进去
	public UserDao getUserdao() {
	return userdao;
}

public void setUserdao(UserDao userdao) {
	this.userdao = userdao;
}

	@Override
	public User login(User user) {
		return this.userdao.login(user);
	}

}

写web

package com.wangcong.user.web;

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

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.opensymphony.xwork2.ModelDriven;
import com.wangcong.base.util.ResponseUtil;
import com.wangcong.base.web.BaseAction;
import com.wangcong.user.biz.UserBiz;
import com.wangcong.user.entity.User;
/**
 * 将前台调用的处理逻辑写进去
 * @author 86135
 *
 */
public class UserAction extends BaseAction implements ModelDriven<User>{
	private static final long serialVersionUID = -3749721621681239940L;
    private UserBiz userBiz;//导入业务接口,并注入
    private User user=new User();
    
	public UserBiz getUserBiz() {
		return userBiz;
	}

	public void setUserBiz(UserBiz userBiz) {
		this.userBiz = userBiz;
	}

	public String list() throws Exception {
		 List<User> res = this.userBiz.login(user);
		if(res.size()==1) {//返回值成功,代表login中的hql语句查询成功,账号密码正确
			this.code=1;
			this.msg="登录成功";
			this.result=res;
		}else {
			this.code=0;
			this.msg="登录失败";
			this.result=res;
		}
		Map<String, Object> map=new HashMap<String, Object>();
		ObjectMapper om = new ObjectMapper();
		map.put("msg",msg);
		map.put("result", result);
		map.put("code", code);
		ResponseUtil.write(response,om.writeValueAsString(map));
		return SUCCESS;
	}

	@Override
	public User getModel() {
		return user;
	}
}


交给spring进行管理
新写一个spring-user放到spring-context.xml中进行管理

spring-user.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

  <bean class="com.wangcong.user.dao.UserDao" id="userDao" parent="baseDao"></bean>
<bean class="com.wangcong.user.biz.impl.UserBizImpl" id="userBiz" parent="baseBiz">
  <property name="userDao" ref="userDao"></property>
</bean>
<bean class="com.wangcong.user.web.UserAction" id="userAction" parent="baseAction">
<property name="userBiz" ref="userBiz"></property>
</bean>
</beans>

配置到struts中去

<action name="/user_*" class="userAction" method="{1}">
	<result name="success">/index.jsp</result>
</action>

进行测试:

访问
http://localhost:8080/SSH2/sy/user_list.action?uname=ls&&pwd=123
结果:
{"msg":"登录成功","result":[{"uname":"ls","pwd":"123"}],"code":1}

TreeNode(第一版本)

第二版本用一对多写(小编还在编写中)
项目大体:
在这里插入图片描述
写xml配置文件(TreeNode.hbm.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>

	<class name="com.wangcong.TreeNode.entity.TreeNode" table="t_vue_tree_node">
		<id name="tree_node_id" type="java.lang.Integer" column="tree_node_id">
			<generator class="increment" />
		</id>
		<property name="tree_node_name" type="java.lang.String" column="tree_node_name"></property>
		<property name="tree_node_type" type="java.lang.Integer" column="tree_node_type"></property>
		<property name="parent_node_id" type="java.lang.Integer" column="parent_node_id"></property>
		<property name="url" type="java.lang.String" column="url"></property>
		<property name="position" type="java.lang.Integer" column="position"></property>
		<property name="icon" type="java.lang.String" column="icon"></property>
	</class>
	
</hibernate-mapping>

将配置文件配置到heibernate中(既spring-hibernate.xml)

TreeNode.java

package com.wangcong.TreeNode.entity;

public class TreeNode {
private Integer tree_node_id;
private String tree_node_name;
private Integer tree_node_type;
private Integer parent_node_id;
private String url;
private Integer position;
private String icon;
public Integer getTree_node_id() {
	return tree_node_id;
}
public void setTree_node_id(Integer tree_node_id) {
	this.tree_node_id = tree_node_id;
}
public String getTree_node_name() {
	return tree_node_name;
}
public void setTree_node_name(String tree_node_name) {
	this.tree_node_name = tree_node_name;
}
public Integer getTree_node_type() {
	return tree_node_type;
}
public void setTree_node_type(Integer tree_node_type) {
	this.tree_node_type = tree_node_type;
}
public Integer getParent_node_id() {
	return parent_node_id;
}
public void setParent_node_id(Integer parent_node_id) {
	this.parent_node_id = parent_node_id;
}
public String getUrl() {
	return url;
}
public void setUrl(String url) {
	this.url = url;
}
public Integer getPosition() {
	return position;
}
public void setPosition(Integer position) {
	this.position = position;
}
public String getIcon() {
	return icon;
}
public void setIcon(String icon) {
	this.icon = icon;
}
@Override
public String toString() {
	return "TreeNode [tree_node_id=" + tree_node_id + ", tree_node_name=" + tree_node_name + ", tree_node_type="
			+ tree_node_type + ", parent_node_id=" + parent_node_id + ", url=" + url + ", position=" + position
			+ ", icon=" + icon + "]";
}

}

写dao方法(TreeNodeDao.java)

package com.wangcong.TreeNode.dao;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate5.HibernateCallback;

import com.wangcong.TreeNode.entity.TreeNode;
import com.wangcong.base.dao.BaseDao;

public class TreeNodeDao extends BaseDao{

public List<TreeNode> list(){
	return this.getHibernateTemplate().execute(new HibernateCallback<List<TreeNode>>() {

		@Override
		public List<TreeNode> doInHibernate(Session session) throws HibernateException {
			return session.createQuery("from TreeNode").list();
		}
	});
}
}

写biz方法(TreeNodeBiz.java)

package com.wangcong.TreeNode.biz;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;

import com.wangcong.TreeNode.entity.TreeNode;

public interface TreeNodeBiz {
	public List<TreeNode> list();
}

编写实现类(TreeNodeBizImpl.java)

package com.wangcong.TreeNode.biz.impl;

import java.util.List;

import com.wangcong.TreeNode.biz.TreeNodeBiz;
import com.wangcong.TreeNode.dao.TreeNodeDao;
import com.wangcong.TreeNode.entity.TreeNode;

public class TreeNodeBizImpl implements TreeNodeBiz{
	
private TreeNodeDao treeNodeDao=new TreeNodeDao();

public TreeNodeDao getTreeNodeDao() {
	return treeNodeDao;
}

public void setTreeNodeDao(TreeNodeDao treeNodeDao) {
	this.treeNodeDao = treeNodeDao;
}

@Override
public List<TreeNode> list() {
	return this.treeNodeDao.list();
}

}

写action(TreeNodeAction.java)

package com.wangcong.TreeNode.web;

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

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.opensymphony.xwork2.ModelDriven;
import com.wangcong.TreeNode.biz.TreeNodeBiz;
import com.wangcong.TreeNode.entity.TreeNode;
import com.wangcong.base.util.ResponseUtil;
import com.wangcong.base.web.BaseAction;

public class TreeNodeAction extends BaseAction implements ModelDriven<TreeNode>{
	private TreeNodeBiz treeNodeBiz;
	
	private TreeNode treeNode;
	
public TreeNodeBiz getTreeNodeBiz() {
		return treeNodeBiz;
	}

	public void setTreeNodeBiz(TreeNodeBiz treeNodeBiz) {
		this.treeNodeBiz = treeNodeBiz;
	}

public String list() throws Exception {
	 List<TreeNode> res = treeNodeBiz.list();
	
	 this.msg="操作成功";
	 this.code=1;
	 this.result=res;
	 Map<String, Object> map=new HashMap<String, Object>();
	 map.put("msg", msg);
	 map.put("result", result);
	 map.put("code", code);
	 ObjectMapper om = new ObjectMapper();
	 ResponseUtil.write(response, om.writeValueAsString(map));
	return SUCCESS;
}

@Override
public TreeNode getModel() {
	return treeNode;
}
}

交给spring进行管理
写spring-TreeNode.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
		
   <bean class="com.wangcong.TreeNode.dao.TreeNodeDao" id="treeNodeDao" parent="baseDao"></bean>
   
   <bean class="com.wangcong.TreeNode.biz.impl.TreeNodeBizImpl" id="treeNodeBiz"  parent="baseBiz">
     <property name="treeNodeDao" ref="treeNodeDao"></property>
   </bean>
   
   <bean class="com.wangcong.TreeNode.web.TreeNodeAction" id="treeNodeAction" parent="baseAction">
   <property name="treeNodeBiz" ref="treeNodeBiz"></property>
   </bean>
   
</beans>

分模块开发写到spring-context.xml中

  <import resource="spring-TreeNode.xml"/> 

并且交由struts进行控制

<action name="/node_*" class="treeNodeAction" method="{1}">
	<result name="success">/index.jsp</result>
	</action>

测试结果:

测试路径:
http://localhost:8080/SSH2/sy/node_list.action
测试结果:
{"msg":"操作成功","result":[{"tree_node_id":1,"tree_node_name":"系统管理","tree_node_type":1,"parent_node_id":null,"url":null,"position":1,"icon":"el-icon-setting"},{"tree_node_id":2,"tree_node_name":"用户管理","tree_node_type":2,"parent_node_id":1,"url":"/sys/VuexPage1","position":2,"icon":"el-icon-user"},{"tree_node_id":3,"tree_node_name":"角色管理","tree_node_type":2,"parent_node_id":1,"url":"/sys/VuexPage2","position":3,"icon":""},{"tree_node_id":4,"tree_node_name":"密码修改","tree_node_type":2,"parent_node_id":1,"url":null,"position":4,"icon":null},{"tree_node_id":5,"tree_node_name":"论坛管理","tree_node_type":1,"parent_node_id":null,"url":null,"position":5,"icon":"el-icon-reading"},{"tree_node_id":6,"tree_node_name":"文章管理","tree_node_type":2,"parent_node_id":5,"url":"/sys/Articles","position":6,"icon":null}],"code":1}

Articles

提供项目大体:
在这里插入图片描述
先编写:Article.hbm.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class table="t_vue_articles" name="com.wangcong.articles.entity.Articles">
		<id name="id" type="java.lang.Integer" column="id">
			<generator class="increment"></generator>
		</id>
		
		<property name="title" type="java.lang.String" column="title"></property>
		<property name="body" type="java.lang.String" column="body"></property>
	</class>
</hibernate-mapping>

将配置文件配置到heibernate中(既spring-hibernate.xml)

写实体类:Articles.java

package com.wangcong.articles.entity;

public class Articles {
private Integer id;
private String title;
private String body;

public Integer getId() {
	return id;
}
public void setId(Integer id) {
	this.id = id;
}
public String getTitle() {
	return title;
}
public void setTitle(String title) {
	this.title = title;
}
public String getBody() {
	return body;
}
public void setBody(String body) {
	this.body = body;
}
@Override
public String toString() {
	return "Articles [id=" + id + ", title=" + title + ", body=" + body + "]";
}

}

再写dao(ArticlesDao,java)

package com.wangcong.articles.dao;

import java.util.List;

import org.apache.commons.lang3.concurrent.TimedSemaphore;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate5.HibernateCallback;

import com.wangcong.articles.entity.Articles;
import com.wangcong.base.dao.BaseDao;
import com.wangcong.base.util.PageBean;

public class ArticlesDao extends BaseDao{
/**
 * 查询
 * @throws IllegalAccessException 
 * @throws InstantiationException 
 */
	public List<Articles> list(Articles articles,PageBean pageBean) throws InstantiationException, IllegalAccessException{
		 BaseDao  obj=super.getClass().newInstance();
		return this.getHibernateTemplate().execute(new HibernateCallback<List<Articles>>() {
			@Override
			public List<Articles> doInHibernate(Session session) throws HibernateException {
				String hql="from Articles";
				return  obj.executeQuery(session, hql, null, pageBean);
			}
		});
	}
	/**
	 * 增加
	 * 
	 */
	public void add(Articles articles) {
		this.getHibernateTemplate().save(articles);
	}
	/**
	 * 删除
	 * 
	 */
	public void del(Articles articles) {
		this.getHibernateTemplate().delete(articles);
	}
	/**
	 * 修改
	 * 
	 */
	public void edit(Articles articles) {
		this.getHibernateTemplate().update(articles);
	}
	
}

写biz(ArticlesBiz.java)

package com.wangcong.articles.biz;

import java.util.List;

import com.wangcong.articles.entity.Articles;
import com.wangcong.base.util.PageBean;

public interface ArticlesBiz {
	public void add(Articles articles);

	public void del(Articles articles);

	public void edit(Articles articles);

	public List<Articles> list(Articles articles,PageBean pageBean) throws InstantiationException, IllegalAccessException;
}

写实现类:(ArticlesBizImpl.java)

package com.wangcong.articles.biz.Impl;

import java.util.List;

import com.wangcong.articles.biz.ArticlesBiz;
import com.wangcong.articles.dao.ArticlesDao;
import com.wangcong.articles.entity.Articles;
import com.wangcong.base.util.PageBean;

public class ArticlesBizImpl implements ArticlesBiz{
  private ArticlesDao articlesDao;
  
	public ArticlesDao getArticlesDao() {
	return articlesDao;
}

public void setArticlesDao(ArticlesDao articlesDao) {
	this.articlesDao = articlesDao;
}

	@Override
	public void add(Articles articles) {
		this.articlesDao.add(articles);
	}

	@Override
	public void del(Articles articles) {
		// TODO Auto-generated method stub
		this.articlesDao.del(articles);
	}

	@Override
	public void edit(Articles articles) {
		// TODO Auto-generated method stub
		this.articlesDao.edit(articles);
	}

	@Override
	public List<Articles> list(Articles articles, PageBean pageBean)throws InstantiationException, IllegalAccessException {
		return this.articlesDao.list(articles, pageBean);
	}

}

再写web层:ArticleAction.java

package com.wangcong.articles.web;

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

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.opensymphony.xwork2.ModelDriven;
import com.wangcong.articles.biz.ArticlesBiz;
import com.wangcong.articles.entity.Articles;
import com.wangcong.base.util.PageBean;
import com.wangcong.base.util.ResponseUtil;
import com.wangcong.base.web.BaseAction;

public class ArticleAction extends BaseAction implements ModelDriven<Articles>{
private ArticlesBiz articlesBiz;
private Articles articles=new Articles();
public ArticlesBiz getArticlesBiz() {
	return articlesBiz;
}

public void setArticlesBiz(ArticlesBiz articlesBiz) {
	this.articlesBiz = articlesBiz;
}

/**
 * 查询
 * @throws Exception 
 * @throws JsonProcessingException 
 */
public String list() throws Exception {
	PageBean pageBean=new PageBean();
	pageBean.setRequest(request);
	List<Articles> res = this.articlesBiz.list(articles, pageBean);
	this.msg="操作成功";
	this.result=res;
	this.code=1;
	
	 Map<String, Object> map=new HashMap<String, Object>();
	 map.put("msg", msg);
	 map.put("result", result);
	 map.put("code", code);
	 ObjectMapper om = new ObjectMapper();
	 ResponseUtil.write(response, om.writeValueAsString(map));
	 
	/*JsonData jsonData = new JsonData(1, "操作成功", list);
	jsonData.put("pageBean", pageBean);
	System.out.println(pageBean.getTotal());
	ResponseUtil.write(response, om.writeValueAsString(jsonData));*/
	 
	return SUCCESS;
}

/**
 * 增加
 */
public String add() {
	this.articlesBiz.add(articles);
	return SUCCESS;
}
/**
 * 删除
 */
public String del() {
	this.articlesBiz.del(articles);
	return SUCCESS;
}
/**
 * 修改
 * @return
 */
public String edit() {
	this.articlesBiz.edit(articles);
	return SUCCESS;
}

@Override
public Articles getModel(){
	return articles;
}
}

交给Spring进行管理:
编写spring-articles.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
		
   <bean class="com.wangcong.articles.dao.ArticlesDao" id="articlesDao" parent="baseDao"></bean>
   
   <bean class="com.wangcong.articles.biz.Impl.ArticlesBizImpl" id="articlesBiz" parent="baseBiz">
     <property name="articlesDao" ref="articlesDao"></property>
   </bean>
   
   <bean class="com.wangcong.articles.web.ArticleAction" id="articleAction" parent="baseAction">
   <property name="articlesBiz" ref="articlesBiz"></property>
   </bean>
</beans>

进行管理:

<!-- 分模块开发中的user模块 -->
       <import resource="spring-articles.xml"/>

交给struts控制:

 
	 <action name="/articles_*" class="articleAction" method="{1}">
	<result name="success">/index.jsp</result>
	</action>
	 

测试:

http://localhost:8080/SSH2/sy/articles_list.action
结果:
{"msg":"操作成功","result":[{"id":1,"title":"MySQL Tutorial","body":"DBMS stands for DataBase ..."},{"id":2,"title":"How To Use MySQL Efficiently","body":"After you went through a ..."},{"id":3,"title":"Optimising MySQL","body":"In this tutorial we will show ..."},{"id":4,"title":"","body":"1. Never run mysqld as root. 2. ..."},{"id":5,"title":"MySQL vs. YourSQL","body":"In the following database comparison ..."},{"id":6,"title":"MySQL Security","body":"When configured properly, MySQL ..."},{"id":8,"title":"阿里与拼多多的增量之战","body":"近日,多家媒体报道阿里内部正考虑将聚划算彻底从淘宝天猫独立出来,成立大聚划算事业群。据传独立后的聚划算将肩负起阿里进攻下沉市场、迎战拼多多的重任"},{"id":9,"title":"lucene工具类","body":"package com.javaxl.p1.utils;\n\nimport java.io.IOException;\nimport java.nio.file.Paths;\n\nimport org.apache.lucene.analysis.Analyzer;\nimport org.apache.lucene"},{"id":10,"title":"lucene案例","body":"对某一表进行索引操作的帮助类package com.javaxl.p1.component;\n\nimport com.javaxl.p1.entity.Blog;\nimport com.javaxl.p1.service.BlogService;\nimport com.javaxl.p1.utils.Date"},{"id":15,"title":"solr简介","body":"solr简单了解下,相较于lucene好处在哪里"}],"code":1}

测试:

http://localhost:8080/SSH2/sy/articles_add.action?title=%E5%93%87%E5%93%88%E5%93%88&&body=%E5%93%87%E5%93%88%E5%93%88%E5%BE%88%E5%A5%BD%E5%96%9D

结果:
在这里插入图片描述

测试:

http://localhost:8080/SSH2/sy/articles_del.action?id=169

结果:不存在169的数据
在这里插入图片描述

测试:

http://localhost:8080/SSH2/sy/articles_edit.action?id=168&&title=修改&&body=修改

结果:
在这里插入图片描述

报错:

User问题

在这里插入图片描述
问题描述:userAction找不到。
解决方法:
在这里插入图片描述

TreeNode问题

在这里插入图片描述
在这里插入图片描述
问题在于spring-hibernate没有填写xml文件
在这里插入图片描述
上述都没有填写

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值