文档章节

Mybatis分页和Spring的集成

miemiedev
 miemiedev
发布于 2013/06/04 14:25
字数 1001
阅读 48777
收藏 115

写了一个Mybatis分页控件,在这记录一下使用方式。

在Maven中加入依赖:

<dependencies>
  ...
    <dependency>
        <groupId>com.github.miemiedev</groupId>
        <artifactId>mybatis-paginator</artifactId>
        <version>1.2.17</version>
    </dependency>
 ...
</dependencies>


Mybatis配置文件添加分页插件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
        "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
    <plugins>
        <plugin interceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">
            <property name="dialectClass" value="com.github.miemiedev.mybatis.paginator.dialect.OracleDialect"/>
        </plugin>
    </plugins>
</configuration>


创建一个查询,内容可以是任何Mybatis表达式,包括foreach和if等:

<select id="findByCity" resultType="map">
    select * from TEST_USER where city = #{city};
</select>


Dao中的方法或许是这样(用接口也是类似):

public List findByCity(String city, PageBounds pageBounds){

    Map<String, Object> params = new HashMap<String, Object>();
    params.put("city",city);

    return getSqlSession().selectList("db.table.user.findByCity", params, pageBounds);
}


调用方式(分页加多列排序):

int page = 1; //页号
int pageSize = 20; //每页数据条数
String sortString = "age.asc,gender.desc";//如果你想排序的话逗号分隔可以排序多列
PageBounds pageBounds = new PageBounds(page, pageSize , Order.formString(sortString));
List list = findByCity("BeiJing",pageBounds);

//获得结果集条总数
PageList pageList = (PageList)list;
System.out.println("totalCount: " + pageList.getPaginator().getTotalCount());

PageList类是继承于ArrayList的,这样Dao中就不用为了专门分页再多写一个方法。

使用PageBounds这个对象来控制结果的输出,常用的使用方式一般都可以通过构造函数来配置。

new PageBounds();//默认构造函数不提供分页,返回ArrayList
new PageBounds(int limit);//取TOPN操作,返回ArrayList
new PageBounds(Order... order);//只排序不分页,返回ArrayList

new PageBounds(int page, int limit);//默认分页,返回PageList
new PageBounds(int page, int limit, Order... order);//分页加排序,返回PageList
new PageBounds(int page, int limit, List<Order> orders, boolean containsTotalCount);//使用containsTotalCount来决定查不查询totalCount,即返回ArrayList还是PageList


========================================= 

如果用的是Spring MVC的话可以把JSON的配置写成这样:

<mvc:annotation-driven>
    <mvc:message-converters register-defaults="true">
        <bean class="org.springframework.http.converter.StringHttpMessageConverter"> 
            <constructor-arg value="UTF-8" />        
        </bean>
        <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
            <property name="objectMapper">
                <bean class="com.github.miemiedev.mybatis.paginator.jackson2.PageListJsonMapper" />
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>


那么在Controller就可以这样用了:

@ResponseBody
@RequestMapping(value = "/findByCity.json")
public List findByCity(@RequestParam String city,
                 @RequestParam(required = false,defaultValue = "1") int page,
                 @RequestParam(required = false,defaultValue = "30") int limit,
                 @RequestParam(required = false) String sort,
                 @RequestParam(required = false) String dir) {
    return userService.findByCity(city, new PageBounds(page, limit, Order.create(sort,dir)));
}


然后序列化后的JSON字符串就会变成这样的:

{
    "items":[
        {"NAME":"xiaoma","AGE":30,"GENDER":1,"ID":3,"CITY":"BeiJing"},
        {"NAME":"xiaoli","AGE":30,"SCORE":85,"GENDER":1,"ID":1,"CITY":"BeiJing"},
        {"NAME":"xiaowang","AGE":30,"SCORE":92,"GENDER":0,"ID":2,"CITY":"BeiJing"},
        {"NAME":"xiaoshao","AGE":30,"SCORE":99,"GENDER":0,"ID":4,"CITY":"BeiJing"}
    ],
    "slider": [1, 2, 3, 4, 5, 6, 7],
    "hasPrePage": false,
    "startRow": 1,
    "offset": 0,
    "lastPage": false,
    "prePage": 1,
    "hasNextPage": true,
    "nextPage": 2,
    "endRow": 30,
    "totalCount": 40351,
    "firstPage": true,
    "totalPages": 1346,
    "limit": 30,
    "page": 1
}


=========================================

在SpringMVC中使用JSTL的话可以参考一下步骤(懒人用法)

在Spring配置文件中加入拦截器,或则参考拦截器实现定义自己的拦截器

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <bean class="com.github.miemiedev.mybatis.paginator.springmvc.PageListAttrHandlerInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>

然后Controller方法可以这样写

@RequestMapping(value = "/userView.action")
public ModelAndView userView(@RequestParam String city,
                 @RequestParam(required = false,defaultValue = "1") int page,
                 @RequestParam(required = false,defaultValue = "30") int limit,
                 @RequestParam(required = false) String sort,
                 @RequestParam(required = false) String dir) {
    List users = userService.findByCity(city, new PageBounds(page, limit, Order.create(sort,dir)));
    return new ModelAndView("account/user","users", users);
}

JSP中就可以这样用了,拦截器会将PageList分拆添加Paginator属性,默认命名规则为"原属性名称"+"Paginator"

<table>
    <c:forEach items="${users}" var="user">
        <tr>
            <td>${user['ID']}</td>
            <td>${user['NAME']}</td>
            <td>${user['AGE']}</td>
        </tr>
    </c:forEach>
</table>
上一页: ${usersPaginator.prePage} 
当前页: ${usersPaginator.page} 
下一页: ${usersPaginator.nextPage} 
总页数: ${usersPaginator.totalPages} 
总条数: ${usersPaginator.totalCount} 
更多属性参考Paginator类提供的方法

=========================================

如果用如下方法设置pageBounds,当前这个查询就可以用两个线程同时查询list和totalCount

pageBounds.setAsyncTotalCount(true);

如果所有的分页查询都是用异步的方式查询list和totalCount,可以在插件配置加入asyncTotalCount属性

<plugin interceptor="com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor">
    <property name="dialectClass" value="com.github.miemiedev.mybatis.paginator.dialect.OracleDialect"/>
    <property name="asyncTotalCount" value="true"/>
</plugin>

但是你仍然可以用下面代码强制让这个查询不用异步

pageBounds.setAsyncTotalCount(false);

当然需要注意的是,只要你用到了异步查询,由于里面使用了线程池,所以在使用时就要加入清理监听器,以便在停止服务时关闭线程池。需要在web.xml中加入

<listener>
    <listener-class>com.github.miemiedev.mybatis.paginator.CleanupMybatisPaginatorListener</listener-class>
</listener>


完。

© 著作权归作者所有

共有 人打赏支持
miemiedev

miemiedev

粉丝 71
博文 2
码字总数 1543
作品 2
济南
程序员
私信 提问
加载中

评论(108)

周立_ITMuch
周立_ITMuch

引用来自“Biker”的评论

请问下 这个parameterType支持自定义类型entity的吗 还是只支持map,我试了下自定义类型bean参数老是报错

引用来自“miemiedev”的评论

parameterType一般来说不用如输入,如果你指定了类型就得自己拆解它。你说的问题这个插件并不控制,都是mybatis的行为。

引用来自“Biker”的评论

例如 没用插件的时候接口方法:queryUser(User userCon),在xml里select配置的parameterType为“user” 能正常查询。 使用插件后,修改接口方法为queryUser(User userCon,PageBounds pageBounds),查询时提示类型转换出错Ex:User cant cast to String。 但是如果将修改后的接口参数userCon改为自己组装的Map,而非bean类,又能正常查询。 这是为啥呢?

引用来自“miemiedev”的评论

哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来

引用来自“jaseeka”的评论

你好 我这里引用你的插件后报错了。 接口: public PageList selectOr(User object, PageBounds page); 错误: java.lang.ClassCastException: com.idongri.entity.User cannot be cast to java.lang.String 如果把接口参数改成map就可以使用,难道不支持类参数吗? public PageList selectOr(Map object, PageBounds page); 大概是同样的问题,不知道何解?

引用来自“EACDY”的评论

同上, 遇到了相同的问题. "哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来" 具体怎么操作呢? 是使用mybatis的@Param注解吗? 貌似没用. _parameter 这个是什么?

引用来自“miemiedev”的评论

1.2.16 版将解决这个问题
您好,使用: mybatis3.2.8; 插件版本:1.2.17,发现该问题已经解决了. 不过又有了新的问题: /** * 按照条件,分页查询 * @param contentSearchVo 查询条件 * @param pageBounds 分页对象 * @return 文章列表 */ List selectByConditionPaged(ContentSearchVo contentSearchVo, PageBounds pageBounds); ======== select from f_content channel_id in #{item} ============== 也就是说, 当参数实体内存有数组时, 会报错: ### Cause: java.lang.reflect.UndeclaredThrowableException] with root cause org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_item_0' in 'class com.itmuch.icms.content.vo.ContentSearchVo' at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:377) at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:167) at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:149) at org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:45) at com.github.miemiedev.mybatis.paginator.dialect.Dialect.init(Dialect.java:65) at com.github.miemiedev.mybatis.paginator.dialect.Dialect.(Dialect.java:42) at com.github.miemiedev.mybatis.paginator.dialect.MySQLDialect.(MySQLDialect.java:13) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:526) at com.github.miemiedev.mybatis.paginator.OffsetLimitInterceptor.intercept(OffsetLimitInterceptor.java:73) at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:57) at com.sun.proxy.$Proxy47.query(Unknown Source) at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358) at com.sun.proxy.$Proxy28.selectList(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:205) at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:112) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:58) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:43) at com.sun.proxy.$Proxy33.selectByConditionPaged(Unknown Source) at com.itmuch.icms.content.service.impl.ContentServiceImpl.selectByConditionPaged(ContentServiceImpl.java:57) at com.itmuch.icms.content.service.impl.ContentServiceImpl$$FastClassBySpringCGLIB$$51870017.invoke() at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:717) ====================== 问题定位在: com.github.miemiedev.mybatis.paginator.dialect.Dialect类里面的: pageParameters.put(parameterMapping.getProperty(),wrapper.get(prop));这行; wrapper.get(prop)会抛出异常. 如果改成pageParameters.put(parameterMapping.getProperty(),parameterObject);就正常了. === 请问这是不是该版本的BUG?
后zhi后jue
楼主你好,这个问题怎么解决啊,我用的是sqlserver org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.miemiedev.mybatis.paginator.domain.PageList
后zhi后jue

引用来自“miemiedev”的评论

引用来自“唐文韬”的评论

您好,我在PageList pageList = (PageList)list; 强制转换这里报错了,我有点不解,为啥这里来个强转,就能取到Paginator对象? 我debug了下,list就是一个普通的List对象,如何能变出一个Paginator对象?

区别在于containsTotalCount参数是否为true。有时候只想取TopN就可以不查询记录总数了。

引用来自“xingeryue”的评论

您好, 我在用 List users = testlist(pageForm); PageList pageList = (PageList)users; 时 始终报错,类型转换错误,我也检查了很多次,是不是哪里的配置有问题?
你好,你这个问题解决了吗?
后zhi后jue

引用来自“未来还没来”的评论

HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.miemiedev.mybatis.paginator.domain.PageList数据库是SQLSERVER
我用的也是sqlserver也报这个错,你解决了吗?
miemiedev
miemiedev

引用来自“Biker”的评论

请问下 这个parameterType支持自定义类型entity的吗 还是只支持map,我试了下自定义类型bean参数老是报错

引用来自“miemiedev”的评论

parameterType一般来说不用如输入,如果你指定了类型就得自己拆解它。你说的问题这个插件并不控制,都是mybatis的行为。

引用来自“Biker”的评论

例如 没用插件的时候接口方法:queryUser(User userCon),在xml里select配置的parameterType为“user” 能正常查询。 使用插件后,修改接口方法为queryUser(User userCon,PageBounds pageBounds),查询时提示类型转换出错Ex:User cant cast to String。 但是如果将修改后的接口参数userCon改为自己组装的Map,而非bean类,又能正常查询。 这是为啥呢?

引用来自“miemiedev”的评论

哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来

引用来自“jaseeka”的评论

你好 我这里引用你的插件后报错了。 接口: public PageList selectOr(User object, PageBounds page); 错误: java.lang.ClassCastException: com.idongri.entity.User cannot be cast to java.lang.String 如果把接口参数改成map就可以使用,难道不支持类参数吗? public PageList selectOr(Map object, PageBounds page); 大概是同样的问题,不知道何解?

引用来自“EACDY”的评论

同上, 遇到了相同的问题. "哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来" 具体怎么操作呢? 是使用mybatis的@Param注解吗? 貌似没用. _parameter 这个是什么?
1.2.16 版将解决这个问题
miemiedev
miemiedev

引用来自“Biker”的评论

请问下 这个parameterType支持自定义类型entity的吗 还是只支持map,我试了下自定义类型bean参数老是报错

引用来自“miemiedev”的评论

parameterType一般来说不用如输入,如果你指定了类型就得自己拆解它。你说的问题这个插件并不控制,都是mybatis的行为。

引用来自“Biker”的评论

例如 没用插件的时候接口方法:queryUser(User userCon),在xml里select配置的parameterType为“user” 能正常查询。 使用插件后,修改接口方法为queryUser(User userCon,PageBounds pageBounds),查询时提示类型转换出错Ex:User cant cast to String。 但是如果将修改后的接口参数userCon改为自己组装的Map,而非bean类,又能正常查询。 这是为啥呢?

引用来自“miemiedev”的评论

哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来

引用来自“jaseeka”的评论

你好 我这里引用你的插件后报错了。 接口: public PageList selectOr(User object, PageBounds page); 错误: java.lang.ClassCastException: com.idongri.entity.User cannot be cast to java.lang.String 如果把接口参数改成map就可以使用,难道不支持类参数吗? public PageList selectOr(Map object, PageBounds page); 大概是同样的问题,不知道何解?

引用来自“EACDY”的评论

同上, 遇到了相同的问题. "哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来" 具体怎么操作呢? 是使用mybatis的@Param注解吗? 貌似没用. _parameter 这个是什么?
用@Param注解的意思是说不传POJO,而是SQL中需要什么参数就在方法中传什么参数,_parameter是mybatis内置的一个参数,可以用它来代表参数对象,具体你可以参考一下文档
周立_ITMuch
周立_ITMuch

引用来自“Biker”的评论

请问下 这个parameterType支持自定义类型entity的吗 还是只支持map,我试了下自定义类型bean参数老是报错

引用来自“miemiedev”的评论

parameterType一般来说不用如输入,如果你指定了类型就得自己拆解它。你说的问题这个插件并不控制,都是mybatis的行为。

引用来自“Biker”的评论

例如 没用插件的时候接口方法:queryUser(User userCon),在xml里select配置的parameterType为“user” 能正常查询。 使用插件后,修改接口方法为queryUser(User userCon,PageBounds pageBounds),查询时提示类型转换出错Ex:User cant cast to String。 但是如果将修改后的接口参数userCon改为自己组装的Map,而非bean类,又能正常查询。 这是为啥呢?

引用来自“miemiedev”的评论

哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来

引用来自“jaseeka”的评论

你好 我这里引用你的插件后报错了。 接口: public PageList selectOr(User object, PageBounds page); 错误: java.lang.ClassCastException: com.idongri.entity.User cannot be cast to java.lang.String 如果把接口参数改成map就可以使用,难道不支持类参数吗? public PageList selectOr(Map object, PageBounds page); 大概是同样的问题,不知道何解?
同上, 遇到了相同的问题. "哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来" 具体怎么操作呢? 是使用mybatis的@Param注解吗? 貌似没用. _parameter 这个是什么?
jaseeka
jaseeka

引用来自“Biker”的评论

请问下 这个parameterType支持自定义类型entity的吗 还是只支持map,我试了下自定义类型bean参数老是报错

引用来自“miemiedev”的评论

parameterType一般来说不用如输入,如果你指定了类型就得自己拆解它。你说的问题这个插件并不控制,都是mybatis的行为。

引用来自“Biker”的评论

例如 没用插件的时候接口方法:queryUser(User userCon),在xml里select配置的parameterType为“user” 能正常查询。 使用插件后,修改接口方法为queryUser(User userCon,PageBounds pageBounds),查询时提示类型转换出错Ex:User cant cast to String。 但是如果将修改后的接口参数userCon改为自己组装的Map,而非bean类,又能正常查询。 这是为啥呢?

引用来自“miemiedev”的评论

哦我明白你的意思了,现在的版本由于分页时加了参数所以用POJO传递时会有两个或者以上的额外参数,直接引用参数名称时mybatis就无法自行拆解了,你可以使用_parameter或者使用接口的@Param来让它运作起来
你好 我这里引用你的插件后报错了。 接口: public PageList selectOr(User object, PageBounds page); 错误: java.lang.ClassCastException: com.idongri.entity.User cannot be cast to java.lang.String 如果把接口参数改成map就可以使用,难道不支持类参数吗? public PageList selectOr(Map object, PageBounds page); 大概是同样的问题,不知道何解?
jaseeka
jaseeka
你好 我这里引用你的插件后报错了。
接口:
public PageList<User> selectOr(User object, PageBounds page);
错误:
java.lang.ClassCastException: com.idongri.entity.User cannot be cast to java.lang.String
如果把接口参数改成map就可以使用,难道不支持类参数吗?
public PageList<User> selectOr(Map object, PageBounds page);
修改性别
修改性别
HTTP Status 500 - Request processing failed; nested exception is java.lang.ClassCastException: java.util.ArrayList cannot be cast to com.github.miemiedev.mybatis.paginator.domain.PageList数据库是SQLSERVER
SpringBoot | 第三十章:Spring-data-jpa的集成和使用

前言 在前面的第九章:Mybatis-plus的集成和使用章节中,介绍了使用框架进行数据库的访问。今天,我们来简单学习下如何使用进行数据库的访问。由于本人未使用过,也是趁着写博文的机会查阅了...

oKong
10/31
0
0
Mybatis 数据库物理分页插件 PageHelper

以前使用ibatis/mybatis,都是自己手写sql语句进行物理分页,虽然稍微有点麻烦,但是都习惯了。最近试用了下mybatis的分页插件 PageHelper,感觉还不错吧。记录下其使用方法。 1. 引入依赖jar...

xiaomin0322
昨天
0
0
ShenzhenMirren/Spring-generator

基本介绍 官方QQ交流群号:519714660; Spring-generator是基于javafx8开发的图形界面Spring代码生成器,使用 Apache FreeMarker 作为代码文件的模板,用户可以一键将数据库中的表生成为任意风格...

ShenzhenMirren
06/19
0
0
web开发后端常用技术汇总!!!

     web开发常用技术汇总      技术   名称 官网   Spring Framework   Spring容器 http://projects.spring.io/spring-framework/   SpringMVC   Spring MVC框架 http:/...

web开发
2017/09/04
0
0
SpringBoot 整合JPA | PageHelper 的分页最简实现

JPA又自己的Pageable来帮助我们实现分页,Mybatis有PageHelper帮我们实现分页,下面直接贴代码。 1. 用JPA实现分页 1.1 pom添加依赖 其实就是JPA的依赖。 1.2 核心实现 更多详细的请看sprin...

FantJ
06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基于Kafka构建事件溯源模式的微服务

概要 本文中我们将讨论如何借助Kafka实现分布式消息管理,使用事件溯源(Event Sourcing)模式实现原子化数据处理,使用CQRS模式(Command-Query Responsibility Segregation )实现查询职责...

架构师springboot
昨天
4
0
git上传项目步骤

https://blog.csdn.net/m0_37725003/article/details/80904824

fame_yao
昨天
2
0
Laravel 5.5 打印日志

use Illuminate\Support\Facades\Log; Log::debug($error_info);

七木网络科技
昨天
4
0
通过GlusterFS黏合多节点SSD剩余空间

固态盘(SSD)的速度比机械硬盘快很多(400MB/s~1.7GB/s),但是价格昂贵,所以往往容量比较小。通过GlusterFS可以把多节点SSD黏合为一块大的网络SSD,可以在局域网上任意节点上连接使用,从...

openthings
昨天
3
0
Apache和PHP结合,Apache默认虚拟主机

11月14日任务 11.14/11.15 Apache和PHP结合 11.16/11.17 Apache默认虚拟主机 1.Apache和PHP结合 iptables -I INPUT -p tcp --dport 80 -j ACCEPT 临时打开80端口,便于下面我们做测试 httpd主...

hhpuppy
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部