• 技术文章 >Java >java教程

    详解如何整合SpringMVC和mybatis

    Y2JY2J2017-05-08 13:57:39原创506
    这篇文章主要介绍了springmvc与mybatis实例详解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。

    一、逆向工程生成基础信息

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE generatorConfiguration
    PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
    "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
    <generatorConfiguration>
    <context id="testTables" targetRuntime="MyBatis3">
    <commentGenerator>
    <!-- 是否去除自动生成的注释 true:是 : false:否 -->
    <property name="suppressAllComments" value="true" />
    </commentGenerator>
    <!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost:3307/mybatis" userId="root"
    passaspku.com/pc/softtech/office/word/" target="_blank"><u>word</u>="jalja">
    </jdbcConnection>
    <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 和 
    NUMERIC 类型解析为java.math.BigDecimal -->
    <javaTypeResolver>
    <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>
    <!-- targetProject:生成PO类的位置 -->
    <javaModelGenerator targetPackage="com.jalja.springmvc_mybatis.model.pojo"
    targetProject=".\src">
    <!-- enableSubPackages:是否让schema作为包的后缀 -->
    <property name="enableSubPackages" value="false" />
    <!-- 从数据库返回的值被清理前后的空格 -->
    <property name="trimStrings" value="true" />
    </javaModelGenerator>
    <!-- targetProject:mapper映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="com.jalja.springmvc_mybatis.mapper"
    targetProject=".\src">
    <!-- enableSubPackages:是否让schema作为包的后缀 -->
    <property name="enableSubPackages" value="false" />
    </sqlMapGenerator>
    <!-- targetPackage:mapper接口生成的位置 -->
    <javaClientGenerator type="XMLMAPPER"
    targetPackage="com.jalja.springmvc_mybatis.mapper"
    targetProject=".\src">
    <!-- enableSubPackages:是否让schema作为包的后缀 -->
    <property name="enableSubPackages" value="false" />
    </javaClientGenerator>
    <!-- 指定数据库表 -->
    <table tableName="items"></table>
    <table tableName="orders"></table>
    <table tableName="orderdetail"></table>
    <table tableName="user"></table>
    </context>
    </generatorConfiguration> 
    public static void main(String[] arhs) throws Exception{
    List<String> warnings = new ArrayList<String>();
    boolean overwrite = true;
    File configFile = new File("src.main.resources/generator.xml");
    ConfigurationParser cp = new ConfigurationParser(warnings);
    Configuration config = cp.parseConfiguration(configFile);
    DefaultShellCallback callback = new DefaultShellCallback(overwrite);
    MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
    myBatisGenerator.generate(null);
    }

    二、springMVC与Mybatis整合 各个配置文件

    1.项目结构

    2、各个文件的核心代码

    a.web.xml

    <?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value> classpath:spring/applicationContext-*.xml </param-value>
    </context-param>
    <listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 
    <context-param> 
    <param-name>log4jConfigLocation</param-name> 
    <param-value>classpath:log4j.properties</param-value> 
    </context-param> 
    <context-param> 
    <param-name>log4jRefreshInterval</param-name> 
    <param-value>3000</param-value> 
    </context-param> 
    <listener> 
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> 
    </listener> 
    <!-- post请求乱码 -->
    <filter>
    <filter-name>SpringEncodingFilter</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>SpringEncodingFilter</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping> 
    <!-- springMvc前端控制器 --> 
    <servlet> 
    <servlet-name>springMvc</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
    <!-- 
    contextConfigLocation加载 springMvc的配置文件(处理器适配器 ,映射器) 
    如果不配置默认加载的是 /WEB-INF/servlet名称-servlet.xml(springMvc-servlet.xml)
    -->
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:spring/springmvc.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>springMvc</servlet-name> 
    <!--
    1、*.do :DispatcherServlet 解析所有 *.do 结尾的访问
    2、 / :DispatcherServlet解析所有请求(包括静态资源) 这种配置可以实现restful风格的url
    3、/*: 这种配置最终要转发到一个jsp页面 
    -->
    <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 
    <!-- springMvc前端控制器 RestFul 
    <servlet> 
    <servlet-name>springMvc_rest</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:spring/applicationContext-springmvc.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>springMvc_rest</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    -->
    <session-config>
    <session-timeout>30</session-timeout>
    </session-config>
    </web-app>

    b、config/mybatis/applicationContext-mybatis.xml

    <?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
    <configuration> 
    <!-- 
    各个属性
    properties:
    setting(全局配置参数配置):mybatis运行时可以调整一些运行参数 例如:开启二级缓存、开启延迟加载 
    typeAliases(类型别名): 在mapper.xml中定义parameterType 参数类型 resultType 返回类型时 
    需要指定类型的路径 不方便开发,我们开一针对 这些类型给其指定别名
    typeHandler(类型处理器):在mybatis 中是通过typeHandler 完成 jdbc类型与java类型的转化 ,mybatis 提供的处理器已可满足 开发需求 
    objectFactory(对象工厂):
    plugins(插件):
    environments(环境集合属性对象):
    environment(环境子属性对象):
    transactionManager(事务管理):
    dataSource(数据源):
    mappers(映射器): 
    -->
    <!-- 对事务的管理和连接池的配置 --> 
    <!-- 延迟加载 -->
    <settings>
    <!-- 打开延迟加载 -->
    <setting name="lazyLoadingEnabled" value="true"/>
    <!-- 积极加载改为消极加载 -->
    <setting name="aggressiveLazyLoading" value="false"/>
    <!-- 开启二级缓存 -->
    <setting name="cacheEnabled" value="true"/>
    </settings>
    <typeAliases>
    <!-- 针对单个别名定义 -->
    <!-- <typeAlias type="com.jalja.myBatis.model.User" alias="user"/> -->
    <!--批量别名的定义 mybatis 自动扫描包中的类 别名就是类名(首字母大小写都可以) -->
    <package name="com.jalja.springmvc_mybatis.model.pojo"/>
    <package name="com.jalja.springmvc_mybatis.model.custom"/>
    <package name="com.jalja.springmvc_mybatis.model.vo"/>
    </typeAliases>
    <!--加载映射文件 -->
    <!-- <mappers> <mapper resource="com/jalja/spring_mybatis/mapper/UserMapper.xml"/> -->
    <!-- 和spring整合后 可以去掉 
    <package name="com.jalja.spring_mybatis.mapper"/> </mappers>-->
    </configuration>

    c、config/spring/applicationContext-dao.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:cache="http://www.springframework.org/schema/cache"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
    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 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/cache 
    http://www.springframework.org/schema/cache/spring-cache-3.2.xsd">
    <!-- 引入jdbc配置文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/> 
    <!-- 对JDBC配置进行解密 
    <bean id="propertyConfigurer" class="cn.com.sinobpo.project.wfjb.utils.EncryptablePropertyPlaceholderConfigurer"> 
    <property name="locations">
    <list>
    <value>classpath:resources/config/jdbc.properties</value>
    </list>
    </property>
    </bean> -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName">
    <value>${jdbc_driverClassName}</value>
    </property>
    <property name="url">
    <value>${jdbc_url}</value>
    </property>
    <property name="username">
    <value>${jdbc_username}</value>
    </property>
    <property name="password">
    <value>${jdbc_password}</value>
    </property>
    <!-- 连接池最大使用连接数 -->
    <property name="maxActive">
    <value>20</value>
    </property>
    <!-- 初始化连接大小 -->
    <property name="initialSize">
    <value>1</value>
    </property>
    <!-- 获取连接最大等待时间 -->
    <property name="maxWait">
    <value>60000</value>
    </property>
    <!-- 连接池最大空闲 -->
    <property name="maxIdle">
    <value>20</value>
    </property>
    <!-- 连接池最小空闲 -->
    <property name="minIdle">
    <value>3</value>
    </property>
    <!-- 自动清除无用连接 -->
    <property name="removeAbandoned">
    <value>true</value>
    </property>
    <!-- 清除无用连接的等待时间 -->
    <property name="removeAbandonedTimeout">
    <value>180</value>
    </property>
    <!-- 连接属性 -->
    <property name="connectionProperties">
    <value>clientEncoding=UTF-8</value>
    </property>
    </bean>
    <!-- spring和MyBatis完美整合 --> 
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="configLocation" value="classpath:mybatis/applicationContext-mybatis.xml"/>
    </bean> 
    <!--使用 mapper 代理 的方式 mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
    <!-- 扫描包路径 如果需要扫描多个包 ,中间使用半角逗号隔开 -->
    <property name="basePackage" value="com.jalja.springmvc_mybatis.mapper"/> 
    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> 
    </bean> 
    <!--声明式 事务管理 使用jdbc的事务管理 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!-- 配置事务通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
    <tx:method name="update*" propagation="REQUIRED"/>
    <tx:method name="save*" propagation="REQUIRED"/>
    <tx:method name="delete*" propagation="REQUIRED"/>
    <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> 
    <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> 
    </tx:attributes>
    </tx:advice>
    <!-- 配置事务的切点,并把事务切点和事务属性不关联起来AOP -->
    <aop:config>
    <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.jalja.springmvc_mybatis.service.impl.*.*(..))"/>
    </aop:config>
    </beans>

    d、config/spring/applicationContext-service.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:cache="http://www.springframework.org/schema/cache"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
    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 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
    http://www.springframework.org/schema/cache 
    http://www.springframework.org/schema/cache/spring-cache-3.2.xsd">
    <bean id="itemsService" class="com.jalja.springmvc_mybatis.service.impl.ItemsServiceImpl"></bean>
    </beans>

    e、config/spring/springmvc.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:cache="http://www.springframework.org/schema/cache"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
    http://www.springframework.org/schema/cache 
    http://www.springframework.org/schema/cache/spring-cache-3.2.xsd">
    <!--注解 处理器 映射器 -->
    <!-- 映射器 org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping springmvc3.1以前--> 
    <!-- 映射器 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping springmvc3.1以后 -->
    <!-- 适配器 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter springmvc3.1以前--> 
    <!-- 适配器 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter springmvc3.1以后 -->
    <!--配置映射器和 适配器 
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->
    <!-- 开启注解 映射器和 适配器 这种方式默认加载了很多参数绑定的方法 例如 json转换解析器-->
    <mvc:annotation-driven/>
    <!-- 配置 Handler
    <bean class="com.jalja.springmvc_mybatis.controller.UserController"/>-->
    <!-- 注解 配置 基于组建扫描的方式 -->
    <context:component-scan base-package="com.jalja.springmvc_mybatis.controller" />
    <!-- 配置自定义参数解析器 -->
    <mvc:annotation-driven conversion-service="conversionService"/>
    <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
    <property name="converters">
    <list>
    <!-- 日期类型转换 -->
    <bean class="com.jalja.springmvc_mybatis.converter.CustomDateConverter"></bean>
    </list>
    </property>
    </bean>
    <!-- 全局异常处理器 -->
    <bean class="com.jalja.springmvc_mybatis.exception.CustomExceptionResolver"/>
    <!-- 文件上传 -->
    <!-- 支持上传文件 --> 
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 文件大小 5M -->
    <property name="maxUploadSize" value="5242880"/>
    </bean> 
    <!-- 使用 restFul 风格 编程 照成 的 静态资源 访问 问题 -->
    <!-- <mvc:resources mapping="/js/**" location="/resources/js/"/> -->
    <!-- springMVC拦截器的配置 -->
    <mvc:interceptors>
    <mvc:interceptor>
    <mvc:mapping path="/**" />
    <bean class="com.jalja.springmvc_mybatis.interceptor.LoginInterceptor" />
    </mvc:interceptor>
    </mvc:interceptors>
    <!-- 视图映射 jsp解析 默认使用jstl-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 默认使用 -->
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
    </bean> 
    </beans>

    f、config/jdbc.properties

    jdbc_driverClassName=com.mysql.jdbc.Driver
    jdbc_url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=UTF-8
    jdbc_username=root
    jdbc_password=111111

    g、config/log4j.properties

    #在开发环境下的日志级别 要设置成debug,生成环境设置成info 或error
    log4j.rootLogger=debug, stdout
    log4j.logger.org.apache.ibatis=debug
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

    h、com/jalja/springmvc_mybatis/controller/ItemsController.java

    package com.jalja.springmvc_mybatis.controller;
    import java.io.File;
    import java.util.List;
    import java.util.UUID;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    import com.jalja.springmvc_mybatis.exception.CustomException;
    import com.jalja.springmvc_mybatis.model.custom.ItemsCustom;
    import com.jalja.springmvc_mybatis.service.ItemsService;
    /**
    * 商品 
    * @author PC003
    *conterver参数转换器 springMvc提供了很多参数转换器
    */
    @Controller
    @RequestMapping("/items") //窄化请求映射
    public class ItemsController {
    @Autowired ItemsService itemsService;
    @RequestMapping(value="/findItemsList")
    public String findItemsList(Model model) throws Exception{
    List<ItemsCustom> itemsList=itemsService.findItemsList(null);
    System.out.println(itemsList);
    model.addAttribute("itemsList", itemsList);
    return "itemsList";
    }
    @RequestMapping(value="/editItems", method={RequestMethod.POST,RequestMethod.GET}) //限制Http请求方式
    //@RequestParam 将请求参数 与 形式参数进行绑定 required:指定属性必须传入值 defaultValue:设置默认值
    public String editItems(Model model, @RequestParam(value="id",required=true,defaultValue="0") Integer itemsId) throws Exception{
    ItemsCustom itemsCustom=itemsService.findItemsById(itemsId);
    if(itemsCustom==null){
    throw new CustomException("商品不存在");
    }
    model.addAttribute("itemsCustom", itemsCustom);
    return "editItems";
    }
    @RequestMapping(value="/updateItems")
    public String editItemsSubmit(Integer id,ItemsCustom itemsCustom,MultipartFile itemsPic) throws Exception{
    String uploadFileName=itemsPic.getOriginalFilename();//获取上传的文件名
    if(itemsPic!=null && uploadFileName!=null && !uploadFileName.equals("")){
    String imagesPath="E:\\develop\\upload\\images\\";
    String newFileName=UUID.randomUUID()+uploadFileName.substring(uploadFileName.lastIndexOf("."),uploadFileName.length());
    File newFile=new File(imagesPath+newFileName);
    itemsPic.transferTo(newFile);//将内存中的数据写入磁盘
    itemsCustom.setPic(newFileName);
    }
    itemsService.updateItemsById(id, itemsCustom);
    return "redirect:findItemsList.do"; //重定向
    }
    //JSON的使用 @ResponseBody:将对像转json输出 @RequestBody:将请求参数转 java对象
    @RequestMapping(value="/jsonRequest")
    public @ResponseBody ItemsCustom jsonRequest(@RequestBody ItemsCustom itemsCustom) throws Exception{
    return itemsCustom;
    }
    //RestFul 风格 编程 /restFulRequest/{id}:表示将这个位置的参数传到 @PathVariable 指定的名称中
    @RequestMapping(value="/restFulRequest/{id}")
    public @ResponseBody ItemsCustom restFulRequest(@PathVariable("id") Integer id) throws Exception{
    ItemsCustom itemsCustom=itemsService.findItemsById(id);
    return itemsCustom;
    }
    }

    【相关推荐】

    1.Java免费视频教程

    2.全面解析Java注解

    3.FastJson教程手册

    以上就是详解如何整合SpringMVC和mybatis的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:SpringMVC,mybatis java
    上一篇:简述多线程实现及同步互斥通讯 下一篇:关于网络编程socket的详解
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• java的10种排序算法实例• 归纳整理Java线程面试题• Java归纳整理之IO流原理及流的分类• 实例介绍Java基于quasar实现协程池• 一文带你认识Java栈和队列
    1/1

    PHP中文网