Java经典封装JDBC模板(充分体现面向对象思想)

程序清单一览

bean类

[html]  view plain copy
  1. package com.software.usermanager.bean;  
  2.   
  3. public class Users {  
  4.     private String id;  
  5.     private String name;  
  6.     private String age;  
  7.     public String getId() {  
  8.         return id;  
  9.     }  
  10.     public void setId(String id) {  
  11.         this.id = id;  
  12.     }  
  13.     public String getName() {  
  14.         return name;  
  15.     }  
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.     public String getAge() {  
  20.         return age;  
  21.     }  
  22.     public void setAge(String age) {  
  23.         this.age = age;  
  24.     }  
  25.       
  26.   
  27. }  


dao类

[html]  view plain copy
  1. package com.software.usermanager.dao;  
  2.   
  3.   
  4. import com.software.usermanager.bean.Users;  
  5. import com.software.usermanager.util.PageModel;  
  6. import java.util.List;  
  7.   
  8. public interface UsersDAO {  
  9.     public boolean insert(Users user);  //增  
  10.     public boolean delete(String id);   //单条删除  
  11.     public boolean delete(String[] userIds);  //批量删除  
  12.     public boolean update(Users user);  //修改  
  13.     public List<Users> query();     //全部查询  
  14.     public Users query(String id);  //单记录查询  
  15.     public PageModel query(int pageNo, int pageSize); //分页查询  
  16.     public PageModel query(int pageNo, int pageSize,String condition); //分页模糊查询  
  17.     public boolean Login(String name,String password); //登录  
  18.   
  19. }  


daoimpl类

[html]  view plain copy
  1. package com.software.usermanager.dao;  
  2. import com.software.usermanager.util.OptTemplate;  
  3. import java.sql.ResultSet;  
  4. import java.util.List;  
  5.   
  6. import com.software.usermanager.bean.Users;  
  7. import com.software.usermanager.util.*;  
  8.   
  9. public class UsersDAOImpl implements UsersDAO {  
  10.   
  11.     private OptTemplate optTemplate = null;  
  12.   
  13.     public UsersDAOImpl(OptTemplate optTemplate) {  
  14.         super();  
  15.         this.optTemplate = optTemplate;  
  16.     }  
  17.     public boolean Login(String name, String password) {  
  18.         // TODO Auto-generated method stub  
  19.         return false;  
  20.     }  
  21.   
  22.     public boolean delete(String id) {  
  23.         String sql = "delete from users where id=?";  
  24.         Object[] obj = { id };  
  25.         return optTemplate.update(sql, obj, false);  
  26.     }  
  27.   
  28.     public boolean delete(String[] userIds) {  
  29.         StringBuffer sbStr = new StringBuffer();  
  30.         Object[] obj = userIds;  
  31.         ;  
  32.         for (int i = 0; i < userIds.length; i++) {  
  33.             sbStr.append("?,");  
  34.         }  
  35.         String sql = "delete from users where id in("  
  36.                 + sbStr.substring(0, sbStr.length() - 1) + ")";  
  37.         return optTemplate.update(sql, obj, false);  
  38.     }  
  39.   
  40.     public boolean insert(Users user) {  
  41.         String sql = "insert into users(id,name,age) values(?,?,?)";  
  42.         Object[] obj = {user.getId(),user.getName(),user.getAge()};  
  43.         return optTemplate.update(sql, obj, false);  
  44.     }  
  45.   
  46.     @SuppressWarnings("unchecked")  
  47.     public List<Users> query() {  
  48.         String sql = "select * from users";  
  49.         Object[] obj = {};  
  50.         return (List<Users>) optTemplate.query(sql, obj, new UsersDAOObjectMapper());  
  51.           
  52.     }  
  53.   
  54.     public Users query(String id) {  
  55.         String sql = "select * from users";  
  56.         Object[] obj = {};  
  57.         return (Users) optTemplate.query(sql, obj, new UsersDAOObjectMapper()).get(0);  
  58.     }  
  59.   
  60.     public PageModel query(int pageNo, int pageSize) {  
  61.         String sql1 = "select * from users";  
  62.         Object[] obj1 = {};  
  63.         List<Users> list1 = (List<Users>) optTemplate.query(sql1, obj1,  
  64.                 new UsersDAOObjectMapper());  
  65.         int i = list1.size();  
  66.         String sql="select * from (select j.*,rownum rn from (select * from users) j where rownum<=?) where rn>?";  
  67.         Object[] obj = {pageNo * pageSize, (pageNo - 1) * pageSize};  
  68.         List<Users> list = (List<Users>) optTemplate.query(sql, obj,  
  69.                 new UsersDAOObjectMapper());  
  70.         PageModel pagemodel = new PageModel();  
  71.         pagemodel.setPageNo(pageNo);  
  72.         pagemodel.setPageSize(pageSize);  
  73.         pagemodel.setList(list);  
  74.         pagemodel.setTotalRecords(i);  
  75.         return pagemodel;  
  76.     }  
  77.   
  78.     public PageModel query(int pageNo, int pageSize, String condition) {  
  79.         String sql1 = "select * from users";  
  80.         Object[] obj1 = {};  
  81.         List<Users> list1 = (List<Users>) optTemplate.query(sql1, obj1,  
  82.                 new UsersDAOObjectMapper());  
  83.         int i = list1.size();  
  84.         String sql="select * from (select j.*,rownum rn from (select * from users where id like '"+condition+"%' or name like '"+condition+"%') j where rownum<=?) where rn>?";  
  85.         Object[] obj = {pageNo * pageSize, (pageNo - 1) * pageSize};  
  86.         List<Users> list = (List<Users>) optTemplate.query(sql, obj,  
  87.                 new UsersDAOObjectMapper());  
  88.         PageModel pagemodel = new PageModel();  
  89.         pagemodel.setPageNo(pageNo);  
  90.         pagemodel.setPageSize(pageSize);  
  91.         pagemodel.setList(list);  
  92.         pagemodel.setTotalRecords(i);  
  93.         return pagemodel;  
  94.     }  
  95.   
  96.     public boolean update(Users user) {  
  97.         String sql = "update users set name=?,age=? where id=?";  
  98.         Object[] obj = {user.getName(),user.getAge(),user.getId()};  
  99.         return optTemplate.update(sql, obj, false);  
  100.     }  
  101.   
  102.   
  103. }  
  104. class UsersDAOObjectMapper implements ObjectMapper{  
  105.     public Object mapping(ResultSet rs){  
  106.         Users u=new Users();      
  107.             try{  
  108.                   
  109.                 u.setId(rs.getString("id"));  
  110.                 u.setName(rs.getString("age"));  
  111.                 u.setName(rs.getString("name"));  
  112.   
  113.                   
  114.             }catch(Exception ex){  
  115.                 ex.printStackTrace();  
  116.             }  
  117.   
  118.         return u;  
  119.     }  
  120.       
  121. }  


 

util类

[html]  view plain copy
  1. package com.software.usermanager.util;  
  2. import java.sql.Connection;  
  3. import java.sql.PreparedStatement;  
  4. import java.sql.ResultSet;  
  5. import java.sql.SQLException;  
  6. import java.sql.Statement;  
  7. import java.util.ArrayList;  
  8. import java.util.List;  
  9.   
  10. import com.software.usermanager.db.DBConnection;  
  11.   
  12. public class OptTemplate {  
  13.     public Object find(String sql,Object[] obj,ObjectMapper mapper){  
  14.         Object o=null;  
  15.         Connection conn=null;  
  16.         PreparedStatement pstmt=null;  
  17.         try{  
  18.             conn=DBConnection.getConn();  
  19.             pstmt=conn.prepareStatement(sql);  
  20.             for(int i=0;i<obj.length;i++){  
  21.                 pstmt.setObject(i+1, obj[i]);  
  22.                 ResultSet rs=pstmt.executeQuery();  
  23.                 if(rs.next()){  
  24.                     o=mapper.mapping(rs);  
  25.                 }  
  26.             }  
  27.             }catch(Exception ex){  
  28.                 ex.printStackTrace();  
  29.             }finally{  
  30.                 try{  
  31.                     pstmt.close();  
  32.                     conn.close();  
  33.                 }catch(SQLException ex){  
  34.                     ex.printStackTrace();  
  35.                 }  
  36.             }  
  37.             return o;  
  38.         }  
  39.   
  40.     public List<? extends Object> query(String sql,Object[] obj,ObjectMapper mapper){  
  41.         Object o=null;  
  42.         List<Object> list=new ArrayList<Object>();  
  43.         Connection conn=null;  
  44.         PreparedStatement pstmt=null;  
  45.         try{  
  46.             conn=DBConnection.getConn();  
  47.             pstmt=conn.prepareStatement(sql);  
  48.             for(int i=0;i<obj.length;i++){  
  49.                 pstmt.setObject(i+1, obj[i]);  
  50.             }  
  51.                 ResultSet rs=pstmt.executeQuery();  
  52.   
  53.                 while(rs.next()){  
  54.                       
  55.                     o=mapper.mapping(rs);  
  56.                     list.add(o);  
  57.                 }  
  58.               
  59.               
  60.         }catch(SQLException ex){  
  61.             ex.printStackTrace();  
  62.         }finally{  
  63.             try{  
  64.                 pstmt.close();  
  65.                 conn.close();  
  66.             }catch(SQLException ex){  
  67.                 ex.printStackTrace();  
  68.             }  
  69.         }  
  70.         return list;  
  71.     }  
  72.     public boolean update(String sql,Object[] obj,boolean isGenerateKey){  
  73.         Connection conn=null;  
  74.         PreparedStatement pstmt=null;  
  75.         boolean bFlag=false;  
  76.         try{  
  77.             conn=DBConnection.getConn();  
  78.             pstmt=isGenerateKey ? conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS):conn.prepareStatement(sql);  
  79.             for(int i=0;i<obj.length;i++){  
  80.                 pstmt.setObject(i+1, obj[i]);  
  81.             }  
  82.             conn.setAutoCommit(false);  
  83.             int i=pstmt.executeUpdate();  
  84.             conn.commit();  
  85.             if(i>0)  
  86.                 bFlag=true;  
  87.         }catch(SQLException ex){  
  88.             ex.printStackTrace();  
  89.         }finally{  
  90.             try{  
  91.                 conn.close();  
  92.                 pstmt.close();  
  93.                   
  94.             }catch(SQLException ex){  
  95.                 ex.printStackTrace();  
  96.             }  
  97.         }  
  98.         return bFlag;  
  99.     }  
  100.       
  101.   
  102. }  


 

[html]  view plain copy
  1. package com.software.usermanager.util;  
  2.   
  3. import java.sql.ResultSet;  
  4.   
  5. public interface ObjectMapper {  
  6.     public Object mapping(ResultSet rs);  
  7.   
  8. }  


 

 

 

分页封装类


 

[html]  view plain copy
  1. package com.software.usermanager.util;  
  2.   
  3. import java.util.List;  
  4.   
  5. public class PageModel<T> {  
  6.       
  7.     //结果集  
  8.     private List<T> list;  
  9.       
  10.     //记录数  
  11.     private int totalRecords;  
  12.       
  13.     //每页多少条数据  
  14.     private int pageSize;  
  15.       
  16.     //第几页  
  17.     private int pageNo;  
  18.   
  19.     /**  
  20.      * 返回总页数  
  21.      * @return  
  22.      */  
  23.     public int getTotalPages() {  
  24.         return (totalRecords + pageSize - 1) / pageSize;  
  25.     }  
  26.       
  27.     /**  
  28.      * 首页  
  29.      * @return  
  30.      */  
  31.     public int getTopPageNo() {  
  32.         return 1;  
  33.     }  
  34.       
  35.     /**  
  36.      * 上一页   
  37.      * @return  
  38.      */  
  39.     public int getPreviousPageNo() {  
  40.         if (this.pageNo <= 1) {  
  41.             return 1;  
  42.         }  
  43.         return this.pageNo - 1;  
  44.     }  
  45.       
  46.     /**  
  47.      * 下一页  
  48.      * @return  
  49.      */  
  50.     public int getNextPageNo() {  
  51.         if (this.pageNo >= getButtomPageNo()) {  
  52.             return getButtomPageNo();  
  53.         }  
  54.         return this.pageNo + 1;  
  55.     }  
  56.       
  57.     /**  
  58.      * 尾页  
  59.      * @return  
  60.      */  
  61.     public int getButtomPageNo() {  
  62.         return getTotalPages();  
  63.     }  
  64.       
  65.     public List<T> getList() {  
  66.         return list;  
  67.     }  
  68.   
  69.     public void setList(List<T> list) {  
  70.         this.list = list;  
  71.     }  
  72.   
  73.     public int getTotalRecords() {  
  74.         return totalRecords;  
  75.     }  
  76.   
  77.     public void setTotalRecords(int totalRecords) {  
  78.         this.totalRecords = totalRecords;  
  79.     }  
  80.   
  81.     public int getPageSize() {  
  82.         return pageSize;  
  83.     }  
  84.   
  85.     public void setPageSize(int pageSize) {  
  86.         this.pageSize = pageSize;  
  87.     }  
  88.   
  89.     public int getPageNo() {  
  90.         return pageNo;  
  91.     }  
  92.   
  93.     public void setPageNo(int pageNo) {  
  94.         this.pageNo = pageNo;  
  95.     }  
  96. }  


 

数据库配置文件dbconf.properties

[html]  view plain copy
  1. #oracle连接实例  
  2. driverClass = oracle.jdbc.driver.OracleDriver  
  3. url = jdbc:oracle:thin:@192.168.137.23:1521:orcl  
[html]  view plain copy
  1. username = 用户名  
[html]  view plain copy
  1. password = 密码  


数据库封装类

[html]  view plain copy
  1. package com.software.usermanager.db;  
  2.   
  3.   
  4. import java.io.IOException;  
  5. import java.sql.Connection;  
  6. import java.sql.DriverManager;  
  7. import java.sql.SQLException;  
  8. import java.util.Properties;  
  9.   
  10.   
  11. public class DBConnection {  
  12.   
  13.     private static Connection conn = null;  
  14.     private static Properties props = null;  
  15.   
  16.     static {  
  17.         props = new Properties();  
  18.         try {  
  19.             props.load(DBConnection.class.getResourceAsStream("/dbconf.properties"));  
  20.         } catch (IOException e1) {  
  21.             e1.printStackTrace();  
  22.         }  
  23.         try {  
  24.             Class.forName(props.getProperty("driverClass"));  
  25.         } catch (ClassNotFoundException e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29.       
  30.   
  31.     public static Connection getConn(){  
  32.         try {  
  33.             conn = DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"), props.getProperty("password"));  
  34.             conn.setAutoCommit(false);  
  35.         } catch (SQLException e) {  
  36.             e.printStackTrace();  
  37.         }  
  38.         return conn;  
  39.     }  
  40.   
  41.       
  42.       
  43.     public void closeConn(){  
  44.         try {  
  45.             if (conn != null)  
  46.                 conn.close();  
  47.         } catch (SQLException e) {  
  48.             e.printStackTrace();  
  49.         }  
  50.           
  51.     }  
  52. }  


junit测试类

[html]  view plain copy
  1. package com.software.usermanager.test;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.software.usermanager.bean.Users;  
  6.   
  7. import org.apache.tomcat.jni.User;  
  8. import org.junit.After;  
  9. import org.junit.Before;  
  10. import org.junit.Test;  
  11.   
  12. import com.software.usermanager.dao.UsersDAO;  
  13. import com.software.usermanager.dao.UsersDAOImpl;  
  14. import com.software.usermanager.db.DBConnection;  
  15. import com.software.usermanager.util.OptTemplate;  
  16. import com.software.usermanager.util.PageModel;  
  17.   
  18. public class UserTest {  
  19.     DBConnection dbConn = null;  
  20.   
  21.     @Before  
  22.     public void setUp() {  
  23.         dbConn = new DBConnection();  
  24.     }  
  25.   
  26.     @After  
  27.     public void tearDown() {  
  28.         dbConn.closeConn();  
  29.   
  30.     }  
  31.     /************测试插入记录***************/  
  32.   
  33. //  @Test  
  34. //  public void testinsert() {  
  35. //      UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());  
  36. //      for(int i=0;i<20;i++){  
  37. //      Users u = new Users();  
  38. //      u.setId(""+i);  
  39. //      u.setName("郑六");  
  40. //      u.setAge("2"+i);  
  41. //      boolean b=usersdao.insert(u);  
  42. //      if(b==false){  
  43. //          System.out.println("插入失败");  
  44. //      }else{  
  45. //          System.out.println("插入成功");  
  46. //      }}  
  47. //        
  48. //  
  49. //  }  
  50.     /************测试修改记录***************/  
  51.   
  52. //  @Test  
  53. //  public void testupdate() {  
  54. //      UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());  
  55. //      Users u = new Users();  
  56. //      u.setId("5");  
  57. //      u.setName("郑六");  
  58. //      u.setAge("21");  
  59. //      boolean b=usersdao.update(u);  
  60. //      if(b==false){  
  61. //          System.out.println("更新失败");  
  62. //      }else{  
  63. //          System.out.println("更新成功");  
  64. //      }  
  65. //        
  66. //  
  67. //  }  
  68.     /************测试删除单条记录***************/  
  69.   
  70. //  @Test  
  71. //  public void testdeleteById() {  
  72. //      UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());  
  73. //      boolean b=usersdao.delete("2");  
  74. //      if(b==false){  
  75. //          System.out.println("删除失败");  
  76. //      }else{  
  77. //          System.out.println("删除成功");  
  78. //      }  
  79. //        
  80. //  }  
  81.     /************测试批量删除记录***************/  
  82. //  
  83. //  @Test  
  84. //  public void testdeleteByArray() {  
  85. //      UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());  
  86. //      String[] s={"3","4","5"};  
  87. //      boolean b=usersdao.delete(s);  
  88. //      if(b==false){  
  89. //          System.out.println("删除失败");  
  90. //      }else{  
  91. //          System.out.println("删除成功");  
  92. //      }  
  93. //        
  94. //  }  
  95.     /*********查询全部记录结果集为泛型 ************/  
  96. //  @Test  
  97. //  public void testqueryAll(){  
  98. //      UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());  
  99. //      List<Users> list=usersdao.query();  
  100. //      for(Users u:list){  
  101. //          System.out.println(u.getId());  
  102. //      }  
  103. //  }  
  104.     /*********查询单条记录结果集为对象 ************/  
  105. //  @Test  
  106. //  public void testqueryAll(){  
  107. //      UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());  
  108. //      Users u=usersdao.query("7");  
  109. //      System.out.println(u.getName());  
  110. //        
  111. //  }  
  112. //  /*********分页查询全部记录结果集为pagemodel************/  
  113. //  @Test  
  114. //  public void testqueryAll(){  
  115. //      UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());  
  116. //      PageModel pml=usersdao.query(2,2);  
  117. //      List<Users> list=pml.getList();  
  118. //      for(Users u:list){  
  119. //          System.out.println(u.getId());  
  120. //      }  
  121. //  }  
  122.     /*********分页模糊查询全部记录结果集为pagemodel************/  
  123.     @Test  
  124.     public void testqueryAll(){  
  125.         UsersDAO usersdao = new UsersDAOImpl(new OptTemplate());  
  126.         PageModel pml=usersdao.query(1,2,"2");  
  127.         List<Users> list=pml.getList();  
  128.         for(Users u:list){  
  129.             System.out.println(u.getId());  
  130.         }  
  131.     }  
  132.   
  133. }  


 

注意:以下代码非本程序必须代码,仅供自己笔记之用

Filter

[html]  view plain copy
  1. package com.software.usermanager.filter;  
  2.   
  3. import java.io.IOException;  
  4.   
  5. import javax.servlet.Filter;  
  6. import javax.servlet.FilterChain;  
  7. import javax.servlet.FilterConfig;  
  8. import javax.servlet.ServletException;  
  9. import javax.servlet.ServletRequest;  
  10. import javax.servlet.ServletResponse;  
  11.   
  12.     public class FilterEncoding implements Filter {  
  13.   
  14.         private String encoding = "utf-8";  
  15.         public void destroy() {  
  16.   
  17.         }  
  18.   
  19.         public void doFilter(ServletRequest request, ServletResponse response,  
  20.                 FilterChain arg2) throws IOException, ServletException {  
  21.             request.setCharacterEncoding(encoding);  
  22.             response.setCharacterEncoding(encoding);  
  23.             arg2.doFilter(request, response);  
  24.   
  25.         }  
  26.   
  27.         public void init(FilterConfig arg0) throws ServletException {  
  28.             encoding = arg0.getInitParameter("encoding");  
  29.         }  
  30.   
  31.     }  


Listener

 

[html]  view plain copy
  1. package com.software.usermanager.listener;  
  2.   
  3. import java.util.Date;  
  4.   
  5. import javax.servlet.ServletContextEvent;  
  6. import javax.servlet.ServletContextListener;  
  7.   
  8. public class Listener implements ServletContextListener   
  9. {  
  10.     public void contextDestroyed(ServletContextEvent event)   
  11.     {  
  12.         // 销毁记录  
  13.     }  
  14.   
  15.     public void contextInitialized(ServletContextEvent event)   
  16.     {  
  17.         // 记录登录信息  
  18.         Date date = new Date();  
  19.         event.getServletContext().log(date.toString());  
  20.     }  
  21. }  


web.xml配置文件

 

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  3.     <display-name>xkxt</display-name>  
  4.     <welcome-file-list>  
  5.         <welcome-file>index.jsp</welcome-file>        
  6.     </welcome-file-list>  
  7.       <filter>  
  8.       <filter-name>Encoding</filter-name>  
  9.       <filter-class>com.software.usermanager.FilterEncoding</filter-class>  
  10.    
  11.     <init-param>  
  12.     <param-name>encoding</param-name>  
  13.     <param-value>UTF-8</param-value>  
  14.     </init-param>  
  15.      </filter>  
  16.        <filter-mapping>  
  17.        <filter-name>Encoding</filter-name>  
  18.        <url-pattern>/*</url-pattern>  
  19.   </filter-mapping>  
  20.       
  21.     <listener>  
  22.         <listener-class>com.software.usermanager.Listener</listener-class>  
  23.     </listener>  
  24.     <servlet>  
  25.        <servlet-name>xkxt</servlet-name>  
  26.        <servlet-class>com.software.usermanager.XKXTServlet</servlet-class>  
  27.     </servlet>  
  28.     <servlet-mapping>  
  29.       <servlet-name>xkxt</servlet-name>  
  30.       <url-pattern>/action</url-pattern>  
  31.     </servlet-mapping>  
  32.         <servlet>  
  33.        <servlet-name>querydqm</servlet-name>  
  34.        <servlet-class>com.software.usermanager.DQMServlet</servlet-class>  
  35.     </servlet>  
  36.     <servlet-mapping>  
  37.       <servlet-name>querydqm</servlet-name>  
  38.       <url-pattern>/action</url-pattern>  
  39.     </servlet-mapping>  
  40.     
  41.     
  42.       
  43.       
  44.       
  45. </web-app>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值