zoukankan      html  css  js  c++  java
  • IDEA环境下SSM整合------环境配置

    声明:本文纯为个人笔记整理,如有不妥之处还望及时指出,欢迎转载! 

    只为解决操作问题,可以从第二幅图往后看!

    一、做不出详细的概念叙述和文本设计,本文主要以实战步骤为主,少量解释为辅助,下面请大家牢记两幅图:

    截图来自张开涛博客

          典型的jsp(java server page)是一种服务器执行的组件,运行在标准HTML页面的java技术,最终还是被编译成服务器可以识别的servlet代码,生成.class文件,相比Servlet开发简洁、方便,缺点是视图显示、业务控制比较复杂,而且把对后端操作放在jsp页面很不安全;

          故产生了Jsp+JavaBean开发,使用<jsp:usebean>标签,自动将请求封装为javabean组件,可以认为是为了增强jsp开发;这也是单一的开发思路,即下图所示,这种模型同样是没有本子上解决问题,大量的业务处理依然在jsp页面中,而bean负责的只有参数的请求处理;所以出现了我们的MVC模型;

    jsp+bean模型

    image

    MVC模型

    在JvavEE的开发中,可以认为下图就是我们的web mvc模型

    控制器用servlet、模型用JavaBean、视图采用Jsp

    image

    二、下面开始步入正题;

    进行springmvc开发,写业务逻辑之前,首先要做到:

    1.开发环境(jdk+IDE+maven+mysql)

    2.配置环境(web.xml、pom.xml、application.xml、springmvc.xml、mybatis.xml)

    3.定义domian、生成dao、mapper

    按照上述步骤进行开发,便于在后期调错,另外 可以个那好的梳理业务逻辑,本文只介绍,文件配置到连接上数据库。

    三、SpringMvc开发用到的通用配置文件

    1.pom.xml这里粘贴一个详细的pom文件,包含各种依赖和maven常用的几个插件

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>Traing</groupId>
    <artifactId>springmvc</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>springmvc</name>
    <url>http://maven.apache.org</url>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <webVersion>2.3</webVersion>
    </properties>
    <dependencies>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-core</artifactId>
    <version>2.4.3</version>
    </dependency>
    <dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.3</version>
    </dependency>
    <!--以下四个是SpringMvc中数据校验jar包jsr 303的相关依赖 -->
    <dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.1.3.Final</version>
    </dependency>
    <dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
    </dependency>
    <dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.1.1.GA</version>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>bean-validator</artifactId>
    <version>3.0-JBoss-4.0.2</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.enterprise.deploy</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.jms</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.management.j2ee</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.0.0</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.resource</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.security.auth.message</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.security.jacc</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.servlet</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.servlet.jsp</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api-osgi</artifactId>
    <version>2.2.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>jsr311-api</artifactId>
    <version>1.1.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jstl-impl</artifactId>
    <version>1.2</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.3</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>javax.xml</groupId>
    <artifactId>webservices-api-osgi</artifactId>
    <version>2.0.1</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.jboss.weld</groupId>
    <artifactId>weld-osgi-bundle</artifactId>
    <version>1.0.1-SP3</version>
    <scope>provided</scope>
    </dependency>
    <dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>javax.servlet.jsp.jstl</artifactId>
    <version>1.2.1</version>
    </dependency>


    <!-- 项目其他依赖 -->

    <!-- mysql 依赖 https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.23</version>
    </dependency>
    <!-- junit 依赖 -->
    <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
    </dependency>

    <!-- Mybatis -->
    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.1</version>
    </dependency>
    <!-- spring 依赖 -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>3.2.18.RELEASE</version>
    <scope>test</scope>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/aspectj/aspectjweaver -->
    <dependency>
    <groupId>aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.5.4</version>
    </dependency>


    <!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>
    <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.2.18.RELEASE</version>
    </dependency>
    <!-- spring mybatis 整合依赖 -->
    <dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.1</version>
    </dependency>
    <!--生成代码插件 -->
    <dependency>
    <groupId>org.mybatis.generator</groupId>
    <artifactId>mybatis-generator-core</artifactId>
    <version>1.3.3</version>
    <type>jar</type>
    </dependency>
    <!-- 连接池 -->
    <!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->

    <dependency>
    <groupId>commons-dbcp</groupId>
    <artifactId>commons-dbcp</artifactId>
    <version>1.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-pool/commons-pool -->
    <dependency>
    <groupId>commons-pool</groupId>
    <artifactId>commons-pool</artifactId>
    <version>1.6</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
    </dependency>

    <!-- 文件上传 -->
    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.6</version>
    </dependency>
    <!-- 导入c3p0依赖 -->
    <dependency>
    <groupId>com.mchange</groupId>
    <artifactId>mchange-commons-java</artifactId>
    <version>0.2.3.1</version>
    </dependency>
    <dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
    </dependency>

    <!-- log4j -->
    <dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.16</version>
    </dependency>

    </dependencies>
    <build>

    //打成jar时会自动打包依赖
    <plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <configuration>
    <encoding>UTF-8</encoding>
    </configuration>
    </plugin>

    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
    <source>1.7</source>
    <target>1.7</target>
    <encoding>UTF-8</encoding>
    </configuration>
    </plugin>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>1.4</version>
    <configuration>
    <createDependencyReducedPom>true</createDependencyReducedPom>
    </configuration>
    <executions>
    <execution>
    <phase>package</phase>
    <goals>
    <goal>shade</goal>
    </goals>
    <configuration>
    <transformers>
    <transformer
    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
    <mainClass>com.cmos.task.TaskManager</mainClass>
    </transformer>
    </transformers>
    </configuration>
    </execution>
    </executions>
    </plugin>
    </plugins>


    </build>
    </project>

    2.web.xml  需要注意其中两个配置文件 一个是application.xml :主要配置dataSource、dao、service等跟持久化相近的非webBean

    一个是springmvc.xml:配置controller、handlerResolver视图解析器等web层组件

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    <display-name>springmvc</display-name>
    <welcome-file-list>
    <welcome-file>/views/login.jsp</welcome-file>
    </welcome-file-list>
    <!-- 处理字符集编码 -->
    <filter>
    <filter-name>CharacterEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value>
    </init-param>
    </filter>
    <filter-mapping>
    <filter-name>CharacterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- 配置springmvc核心过滤器 -->
    <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/springmvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
    </servlet-mapping>
    <!-- 配置spring的web工厂 -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:/applicationContext.xml</param-value>
    </context-param>
    <!-- RESTful风格的配置:把POST请求转为PUT、DELETE请求-->
    <filter>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>HiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

    </web-app>

    3.application.xml由于我主要用的注解驱动开发,所以这个配置文件没有相关的dao、servic的bean配置、我将mybatis的配置单独写在Mybatis.xml文件里,但是不要忘记引入到这里。如果只有数据库配置的话,也可以直接写进来(不建议)

    4.Mybatis.xml  注意db.properties文件中的内容username、password注意不要配置的太通用 有可能会和本机的配置冲突

    db.properties文件中的内容
    driverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/studentmanager?useUnicode=true&characterEncoding=UTF-8
    jdbcUserName=root
    jdbcPassword=root
     
    Mybatis.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:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">

    <context:property-placeholder location="classpath:db.properties"/>
    <!-- 配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${driverClassName}">
    </property>
    <property name="url" value="${url}">
    </property>
    <property name="username" value="${jdbcUserName}">
    </property>
    <property name="password" value="${jdbcPassword}">
    </property>
    </bean>
    <!--配置sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!-- 加载mybatis的全局配置文件
    <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"/>
    -->
    <!-- 数据库连接池 -->
    <property name="dataSource" ref="dataSource"/>
    <property name="mapperLocations" value="classpath:/Mapper/*Mapper.xml">
    </property>
    <property name="typeAliasesPackage" value="classpath:com.cmos.domain">
    </property>
    </bean>

    <!-- mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
    <property name="basePackage" value="com.cmos.dao"/>
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>
    <!-- 事务管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource">
    </property>
    </bean>
    <!-- 使用annotation注解方式配置事务 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    </beans>

    5.SpringMVC.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:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
                               http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                               http://www.springframework.org/schema/context
                               http://www.springframework.org/schema/context/spring-context-3.2.xsd
                               http://www.springframework.org/schema/mvc
                               http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
        <!-- 包含:webBean ViewResolver、handlerAdapter controller handlerMapping-->
        <!-- 配置自定义扫描的包 -->
        <context:component-scan base-package="com.cmos.controller,com.cmos.service,com.cmos.dao"/>
        <!-- 配置视图解析器:如何把handler方法返回值解析为实际的物理视图 -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/views/">
            </property>
            <property name="suffix" value=".jsp">
            </property>
        </bean>
        <!-- default-servlet-handler 会在SpringMvc 上下文中定义一个DefaultServletHttpRequestHandler,
            它会对进入DispatcherServlet的请求进行筛查,如果发现没有经过映射的请求,就将该请求交由web应用服务器
             默认的Servlet处理,如果不是静态资源则用DispathcerServlet进行处理 -->
        <mvc:default-servlet-handler/>
        <mvc:annotation-driven>
        </mvc:annotation-driven>
    
        <!--拦截器-->
        <mvc:interceptors>
            <mvc:interceptor>
                <mvc:mapping path="/district"/>
                <mvc:mapping path="/organization"/>
                <mvc:mapping path="/unit"/>
                <mvc:mapping path="/student"/>
                <!--com.coms...是我项目的包的名称不要误解 -->
                <bean class="com.cmos.handlers.MyInterceptor"></bean>
            </mvc:interceptor>
        </mvc:interceptors>
    
    
        <!-- 配置SimpleMappingExceptionResolver -->
        <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
            <property name="exceptionMappings">
                <props>
                    <prop key="java.lang.ArrayIndexOutOfBoundsException">error</prop>
                </props>
            </property>
        </bean>
    
    
    </beans>
    

     6.dao和mapper.xml  我这里只粘了一个dao和mapper的样例

      特别注意:

        1.dao参数类型和Mapper的参数类型严格对称

        2.mapper中的resultMap配置,前面是数据库字段名、后面是对应对象名,要严格一致

        3.不要在Mybtais.xml中引入dao和mapper的位置

    package com.cmos.dao;
    import com.cmos.domain.District;
    import org.apache.ibatis.annotations.Param;
    import org.springframework.stereotype.Repository;
    
    import java.util.List;
    
    @Repository
    public interface DistrictDao {
    
    
        int deleteByPrimaryKey(Integer disId);
    
        int insert(District record);
    
        int updateByExample(@Param("example") District example);
    
        List<District> selectAll();
    
    
    }
    
    
    
    
    Mapper.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.cmos.dao.DistrictDao">
      <resultMap id="BaseResultMap" type="com.cmos.domain.District">
        <id column="dis_id" jdbcType="INTEGER" property="disId" />
        <result column="dis_name" jdbcType="VARCHAR" property="disName" />
      </resultMap>
    
      <select id="selectAll"  resultMap="BaseResultMap">
        select dis_id,dis_name from district
      </select>
    
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
        delete from district
        where dis_id = #{disId,jdbcType=INTEGER}
      </delete>
    
      <insert id="insert" parameterType="com.cmos.domain.District">
        insert into district (dis_id, dis_name)
        values (#{disId,jdbcType=INTEGER}, #{disName,jdbcType=VARCHAR})
      </insert>
    
      <update id="updateByExample" parameterType="com.cmos.domain.District">
        update district
        set dis_name = #{example.disName,jdbcType=VARCHAR}
        where dis_id = #{example.disId,jdbcType=INTEGER}
      </update>
    </mapper>
    

      

     

    我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=y5o4fpq222bt

  • 相关阅读:
    Jedis常用方法 java
    Redis的set、map、list、value、实体类java
    Spring RedisTemplate关闭坏连接
    linux启动vue
    Mybatis实现批量更新sql语句(SSM实现批量更新sql语句)
    mybatis执行批量更新batch update 的方法(oracle,mysql)
    【VM+win7】VM虚拟机安装win7系统教程https://blog.csdn.net/hyhui13/article/details/82682181
    【beyond compare 4】秘钥过期解决办法
    【laravel5】Carbon类
    【Redis+PHP】利用redis的zset实现游戏排行榜功能
  • 原文地址:https://www.cnblogs.com/jin-nuo/p/9643542.html
Copyright © 2011-2022 走看看