一. 要分页我们必须要有数据库,所以我们先准备下数据库,其数据库脚步如下:

  • --以下是创建数据库和数据库表以及向数据库插入数据  use master  

    Go  

    if exists(select * from sysdatabases where name='pagination')  

    drop database pagination  

    Go  

    create database pagination  

    Go  

    use pagination  

    Go  

    create table userInfo (  

        [userID] int identity(1,1) primary key not null,  

        [userName] nvarchar(50) not null,  

        [userPassword] nvarchar(50) not null,  

    )  

    Go  

    insert userInfo  values('xuyesheng','8888')  

    insert userInfo  values('jiaojiao','8888')  

    insert userInfo  values('administrator','888')  

    insert userInfo  values('xuyesheng1','123')  

    insert userInfo  values('xuyesheng2','123')  

    insert userInfo  values('xuyesheng3','123')  

    insert userInfo  values('xuyesheng4','123')  

    insert userInfo  values('xuyesheng5','123')  

    insert userInfo  values('xuyesheng6','123')  

    Go  

    select * from userInfo

    二: 通用分页的存储过程,如下:

    ---------------创建存储过程--------------  

        Go  

        set ANSI_NULLS ON  

        set QUOTED_IDENTIFIER ON  

        go  

        ------------------------------------  

        --  

        --用途:用于需要分页显示的数据  

        --时间:2009年08月22日  

        --描述:通用的存储过程分页程序  

        --  

        -------------------------------------  

        create PROCEDURE [dbo].[GetData]  

        @tblName varchar(255), -- 表名  

        @fldName varchar(255), -- 字段名  

        @OrderfldName varchar(255), -- 排序字段名  

        @PageSize int = 10, -- 页尺寸  

        @PageIndex int = 1, -- 页码  

        @IsCount bit = 0, -- 返回记录总数, 非 0 值则返回  

        @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序  

        @strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)  

        AS  

        declare @strSQL varchar(6000) -- 主语句  

        declare @strTmp varchar(500) -- 临时变量  

        declare @strOrder varchar(400) -- 排序类型  

        if @OrderType != 0  

        begin  

          set @strTmp = '<(select min'  

          set @strOrder = ' order by [' + @OrderfldName +'] desc'  

        end  

        else  

        begin  

          set @strTmp = '>(select max'  

          set @strOrder = ' order by [' + @OrderfldName +'] asc'  

        end  

          set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['  

          + @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '(['  

          + @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['  

          + @OrderfldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'  

          + @strOrder  

          if @strWhere != ''  

          set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['  

          + @tblName + '] where [' + @OrderfldName + ']' + @strTmp + '(['  

          + @OrderfldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['  

          + @OrderfldName + '] from [' + @tblName + '] where ' + @strWhere + ' '  

          + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder  

          if @PageIndex = 1  

          begin  

           set @strTmp = ''  

           if @strWhere != ''  

              set @strTmp = ' where ' + @strWhere  

              set @strSQL = 'select top ' + str(@PageSize) + ' ' + @fldName + ' from ['  

              + @tblName + ']' + @strTmp + ' ' + @strOrder  

          end  

          if @IsCount != 0  

          begin  

               if @strWhere != ''  

                set @strSQL = 'select count(' + @OrderfldName + ') as Total from [' + @tblName + ']'+ ' where ' + @strWhere    

                else  

                set @strSQL = 'select count(' + @OrderfldName + ') as Total from [' + @tblName + ']'      

          end  

        exec (@strSQL)  

        --测试下  

        Go  

        ----参数说明exec [GetData] '表明','查找的列名* 表示查找所有信息','主键',页大小,第几页,非  

        --表示返回记录数,[排序类型,非则降序排列],条件  

        --得到分页的数据  

        exec [GetData] 'userInfo','*','userID',5,1,0,0,null  

        --得到总共的条数  

        exec [GetData] 'userInfo','*','userID',5,1,1,0,null  

        --根据条件查询  

        exec [GetData] 'userInfo','*','userID',5,1,0,0,' userID like ''%2%'' '

    存储过程我们有了我们只要给一下几个参数就OK了

    @tblName varchar  -- 表名

    @fldName varchar  -- 字段名

    @OrderfldName     -- 排序字段名

    @PageSize int     -- 页尺寸

    @PageIndex int    -- 页码

    @IsCount bit      -- 返回记录总数, 非 0 值则返回

    @OrderType bit    -- 设置排序类型, 非 0 值则降序

    @strWhere varchar -- 查询条件 (注意: 不要加 where)

    三 通用包

    到这里我们先不用急,先将一下三个Java类(Pagination.java Call.java AutoSetData.java)封装一下,然后打成JAR包,以后我们直接导入JAR包即可

    Pagination.java

    存储过程我们有了我们只要给一下几个参数就OK了

    @tblName varchar  -- 表名

    @fldName varchar  -- 字段名

    @OrderfldName     -- 排序字段名

    @PageSize int     -- 页尺寸

    @PageIndex int    -- 页码

    @IsCount bit      -- 返回记录总数, 非 0 值则返回

    @OrderType bit    -- 设置排序类型, 非 0 值则降序

    @strWhere varchar -- 查询条件 (注意: 不要加 where)

    到这里我们先不用急,先将一下三个Java类(Pagination.java Call.java AutoSetData.java)封装一下,然后打成JAR包,以后我们直接导入JAR包即可

    Pagination.java

    1. import java.util.List;
    2. public class Pagination {
    3. // 总共的数据量
    4. private int totle;
    5. // 每页显示多少条
    6. private int pageSize;
    7. // 共有多少页
    8. private int totlePage;
    9. // 当前是第几页
    10. private int index;
    11. // 数据
    12. private List data;
    13. // 连接路径
    14. private String path;
    15. public void setTotle(int totle) {
    16. this.totle = totle;
    17. }
    18. public void setPageSize(int pageSize) {
    19. this.pageSize = pageSize;
    20. }
    21. public void setIndex(int index) {
    22. this.index = index;
    23. }
    24. public void setPath(String path) {
    25. this.path = path;
    26. }
    27. public int getTotle() {
    28. return totle;
    29. }
    30. public int getPageSize() {
    31. return pageSize;
    32. }
    33. public int getTotlePage() {
    34. return (this.totle + this.pageSize - 1) / this.pageSize;
    35. }
    36. public int getIndex() {
    37. return index;
    38. }
    39. public List getData() {
    40. return data;
    41. }
    42. public void setData(List data) {
    43. this.data = data;
    44. }
    45. public String getPageDisplay() {
    46. StringBuffer displayInfo = new StringBuffer();
    47. if (index == 0 || pageSize == 0) {
    48. displayInfo.append("没有分页的信息!");
    49. } else {
    50. displayInfo.append("<div class='pager'>");
    51. displayInfo.append("共" + totle + "条记录每页<span style="color:#FF0000" mce_style="color:#FF0000">" + pageSize
    52. + "</span>条");
    53. displayInfo.append("第<span style="color:#FF0000" mce_style="color:#FF0000">" + index
    54. + "</span>页/共"
    55. + this.getTotlePage() + "页");
    56. // 判断如果当前是第一页 则“首页”和“第一页”失去链接
    57. if (index == 1) {
    58. displayInfo.append("  首页 ");
    59. displayInfo.append("上一页 ");
    60. } else {
    61. displayInfo.append("  <a href="" + path
    62. + "index=1" mce_href="" + path
    63. + "index=1">首页</a> ");
    64. displayInfo.append("<a href="" + path + "index=" + (index - 1)
    65. + "" mce_href="" + path + "index=" + (index - 1)
    66. + "">上一页</a> ");
    67. }
    68. if (index >= this.getTotlePage()) {
    69. displayInfo.append("下一页 ");
    70. displayInfo.append("最后一页 ");
    71. } else {
    72. displayInfo.append("<a href="" + path + "index=" + (index + 1)
    73. + "" mce_href="" + path + "index=" + (index + 1)
    74. + "">下一页</a> ");
    75. displayInfo.append("<a href="" + path + "index="
    76. + this.getTotlePage() + "" mce_href="" + path + "index="
    77. + this.getTotlePage() + "">最后一页</a> ");
    78. }
    79. displayInfo.append("</div>");
    80. }
    81. return displayInfo.toString();
    82. }
    83. }

    Pagination.java文件源码我们有了,下面的是Call.java类的源码

    1. import java.sql.Connection;
    2. import java.sql.DriverManager;
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.util.ArrayList;
    6. import java.util.Collection;
    7. import java.util.Iterator;
    8. import java.util.List;
    9. public class Call {
    10. private AutoSetData auto = new AutoSetData();
    11. public List execProcedure(String driver, String url, String userName,
    12. String pwd, Object[] ob, Class c) {
    13. try {
    14. Class.forName(driver);
    15. Connection conn = DriverManager.getConnection(url, userName, pwd);
    16. String sql = "exec GetData ?,?,?,?,?,?,?,null";
    17. List list = new ArrayList();
    18. // Ltest是我测试用类,实际操作请注入相关对象,支持set,get,is,read,writer为前缀数据对,更多请继续添加。
    19. Collection collection = auto.get(conn, c.newInstance().getClass(),
    20. sql, ob);
    21. for (Iterator it = collection.iterator(); it.hasNext();) {
    22. Object obj = c.newInstance();
    23. list.add(it.next());
    24. }
    25. return list;
    26. } catch (Exception e) {
    27. e.printStackTrace();
    28. }
    29. return null;
    30. }
    31. }

    AutoSetData.java 自动将数据封装到实体类中

    1. import java.lang.reflect.Method;
    2. import java.lang.reflect.Modifier;
    3. import java.sql.CallableStatement;
    4. import java.sql.Connection;
    5. import java.sql.ResultSet;
    6. import java.sql.ResultSetMetaData;
    7. import java.sql.SQLException;
    8. import java.util.ArrayList;
    9. import java.util.Collection;
    10. public class AutoSetData {
    11. private Object[] beanMatch(Class clazz, String beanProperty) {
    12. Object[] result = new Object[2];
    13. char beanPropertyChars[] = beanProperty.toCharArray();
    14. beanPropertyChars[0] = Character.toUpperCase(beanPropertyChars[0]);
    15. String s = new String(beanPropertyChars);
    16. String names[] = { ("set" + s).intern(), ("get" + s).intern(),
    17. ("is" + s).intern(), ("write" + s).intern(),
    18. ("read" + s).intern() };
    19. Method getter = null;
    20. Method setter = null;
    21. Method methods[] = clazz.getMethods();
    22. for (int i = 0; i < methods.length; i++) {
    23. Method method = methods[i];
    24. // 只取公共字段
    25. if (!Modifier.isPublic(method.getModifiers()))
    26. continue;
    27. String methodName = method.getName().intern();
    28. for (int j = 0; j < names.length; j++) {
    29. String name = names[j];
    30. if (!name.equals(methodName))
    31. continue;
    32. if (methodName.startsWith("set")
    33. || methodName.startsWith("read"))
    34. setter = method;
    35. else
    36. getter = method;
    37. }
    38. }
    39. result[0] = getter;
    40. result[1] = setter;
    41. return result;
    42. }
    43. private void beanRegister(Object object, String beanProperty, String value) {
    44. Object[] beanObject = beanMatch(object.getClass(), beanProperty);
    45. Object[] cache = new Object[1];
    46. Method getter = (Method) beanObject[0];
    47. Method setter = (Method) beanObject[1];
    48. try {
    49. // 通过get获得方法类型
    50. String methodType = getter.getReturnType().getName();
    51. if (methodType.equalsIgnoreCase("long")) {
    52. cache[0] = new Long(value);
    53. setter.invoke(object, cache);
    54. } else if (methodType.equalsIgnoreCase("int")
    55. || methodType.equalsIgnoreCase("integer")) {
    56. cache[0] = new Integer(value);
    57. setter.invoke(object, cache);
    58. } else if (methodType.equalsIgnoreCase("short")) {
    59. cache[0] = new Short(value);
    60. setter.invoke(object, cache);
    61. } else if (methodType.equalsIgnoreCase("float")) {
    62. cache[0] = new Float(value);
    63. setter.invoke(object, cache);
    64. } else if (methodType.equalsIgnoreCase("double")) {
    65. cache[0] = new Double(value);
    66. setter.invoke(object, cache);
    67. } else if (methodType.equalsIgnoreCase("boolean")) {
    68. cache[0] = new Boolean(value);
    69. setter.invoke(object, cache);
    70. } else if (methodType.equalsIgnoreCase("java.lang.String")) {
    71. cache[0] = value;
    72. setter.invoke(object, cache);
    73. } else if (methodType.equalsIgnoreCase("java.io.InputStream")) {
    74. } else if (methodType.equalsIgnoreCase("char")) {
    75. cache[0] = (Character.valueOf(value.charAt(0)));
    76. setter.invoke(object, cache);
    77. }
    78. } catch (Exception e) {
    79. e.printStackTrace();
    80. }
    81. }
    82. public Collection get(final Connection connection, final Class clazz,
    83. String sql,Object[] obj) {
    84. // 创建PreparedStatement
    85. CallableStatement  ptmt = null;
    86. // 创建resultset
    87. ResultSet rset = null;
    88. // 创建collection
    89. Collection collection = null;
    90. try {
    91. // 赋予实例
    92. ptmt = connection.prepareCall(sql);
    93. for (int i = 1; i <= obj.length; i++) {
    94. ptmt.setObject(i,obj[i-1]);
    95. }
    96. rset = ptmt.executeQuery();
    97. collection = get(rset, clazz);
    98. } catch (SQLException e) {
    99. System.err.println(e.getMessage());
    100. } finally {
    101. try {
    102. // 关闭rs并释放资源
    103. if (rset != null) {
    104. rset.close();
    105. rset = null;
    106. }
    107. // 关闭ps并释放资源
    108. if (ptmt != null) {
    109. ptmt.close();
    110. ptmt = null;
    111. }
    112. } catch (SQLException e) {
    113. System.err.println(e.getMessage());
    114. }
    115. }
    116. return collection;
    117. }
    118. public Collection get(final ResultSet result, final Class clazz) {
    119. // 创建collection
    120. Collection collection = null;
    121. try {
    122. ResultSetMetaData rsmd = result.getMetaData();
    123. // 获得数据列数
    124. int cols = rsmd.getColumnCount();
    125. // 创建等同数据列数的arraylist类型collection实例
    126. collection = new ArrayList(cols);
    127. // 遍历结果集
    128. while (result.next()) {
    129. // 创建对象
    130. Object object = null;
    131. try {
    132. // 从class获得对象实体
    133. object = clazz.newInstance();
    134. } catch (Exception e) {
    135. }
    136. // 循环每条记录
    137. for (int i = 1; i <= cols; i++) {
    138. beanRegister(object, rsmd.getColumnName(i), result
    139. .getString(i));
    140. }
    141. // 将数据插入collection
    142. collection.add(object);
    143. }
    144. } catch (SQLException e) {
    145. System.err.println(e.getMessage());
    146. } finally {
    147. }
    148. return collection;
    149. }
    150. }

    看这里我们引入了jstl.jar standard.jar sqljdbc.jar pagination.jar四个jar包 缺一不可奥。

    下面我们创建一个实体类,代码如下: 

    1. public class UserInfo {
    2. private int userID;
    3. private String userName;
    4. private String userPassword;
    5. public int getUserID() {
    6. return userID;
    7. }
    8. public void setUserID(int userID) {
    9. this.userID = userID;
    10. }
    11. public String getUserName() {
    12. return userName;
    13. }
    14. public void setUserName(String userName) {
    15. this.userName = userName;
    16. }
    17. public String getUserPassword() {
    18. return userPassword;
    19. }
    20. public void setUserPassword(String userPassword) {
    21. this.userPassword = userPassword;
    22. }
    23. }

    实体类我们创建完毕,现在我们创建servlet:

    1. import java.io.IOException;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. import javax.servlet.ServletException;
    5. import javax.servlet.http.HttpServlet;
    6. import javax.servlet.http.HttpServletRequest;
    7. import javax.servlet.http.HttpServletResponse;
    8. import com.ant.util.Call;
    9. import com.ant.util.Pagination;
    10. import com.xuyesheng.entity.UserInfo;
    11. public class PageServlet extends HttpServlet {
    12. public void doGet(HttpServletRequest request, HttpServletResponse response)
    13. throws ServletException, IOException {
    14. this.doPost(request, response);
    15. }
    16. public void doPost(HttpServletRequest request, HttpServletResponse response)
    17. throws ServletException, IOException {
    18. //取得jsp页面传递来的页数,参数名 index 不可更改
    19. String index = request.getParameter("index");
    20. int num = 0;
    21. if (index == null) {
    22. num = 1;
    23. } else {
    24. num = Integer.parseInt(index);
    25. }
    26. //创建封装数据类的对象 call
    27. Call call = new Call();
    28. //创建数组存储 存储过程的参数
    29. Object obj[] = { "userInfo", "*", "userID", 5, num+"", 0+"", 0+"" };
    30. //调用执行存储过程的方法
    31. List li = call.execProcedure(
    32. "com.microsoft.sqlserver.jdbc.SQLServerDriver",
    33. "jdbc:sqlserver://localhost:1433;databaseName=pagination",
    34. "sa", "as", obj, UserInfo.class);
    35. //保存用户名
    36. List<String> list = new ArrayList<String>();
    37. //便利集合
    38. for (int i = 0; i < li.size(); i++) {
    39. UserInfo ui = (UserInfo) li.get(i);
    40. list.add(ui.getUserName());
    41. list.add(ui.getUserPassword());
    42. }
    43. //创建 分页对象
    44. Pagination p = new Pagination();
    45. //设置页数
    46. p.setIndex(num);
    47. //设置页大小
    48. p.setPageSize(Integer.parseInt(obj[3].toString()));
    49. //设置总共的条数
    50. p.setTotle(call.getTotle());
    51. //设置数据
    52. p.setData(list);
    53. //跳转的路径
    54. p.setPath("page.do?");
    55. request.setAttribute("page", p);
    56. request.getRequestDispatcher("index.jsp").forward(request, response);
    57. }
    58. }

    到这里我们就差一个页面了:

    页面代码如下: 

    1. <%@ page language="java"  pageEncoding="GBK"%>
    2. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    3. <html>
    4. <head>
    5. <title>java通用分页显示数据</title>
    6. </head>
    7. <body>
    8. <table width="507" height="160" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#999900">
    9. <tr>
    10. <td  height="40" align="center" valign="middle" bgcolor="#FF9999"><h2>许业生用java实现通用分页功能</h2></td>
    11. </tr>
    12. <tr>
    13. <td  height="35" align="center" valign="middle" bgcolor="#FF9999"><h3>用户名</h3></td>
    14. </tr>
    15. <c:forEach items="${requestScope.page.data}" var="li" >
    16. <tr>
    17. <td height="35" align="center" valign="middle" bgcolor="#CC99CC" >
    18. <c:out value="${li}"/>
    19. </td>
    20. </tr>
    21. </c:forEach>
    22. <tr>
    23. <td height="40"  align="center" valign="middle" ><c:out value="${requestScope.page.pageDisplay}" escapeXml="false"/></td>
    24. </tr>
    25. </table>
    26. </body>
    27. </html>

    其中web.xml文件中的servlet的路径配置如下:

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app version="2.4"
    3. xmlns="http://java.sun.com/xml/ns/j2ee"
    4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    6. http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    7. <servlet>
    8. <description>通用分页Servlet</description>
    9. <servlet-name>PageServlet</servlet-name>
    10. <servlet-class>com.xuyesheng.servlet.PageServlet</servlet-class>
    11. </servlet>
    12. <servlet-mapping>
    13. <servlet-name>PageServlet</servlet-name>
    14. <url-pattern>/page.do</url-pattern>
    15. </servlet-mapping>
    16. <welcome-file-list>
    17. <welcome-file>index.jsp</welcome-file>
    18. </welcome-file-list>
    19. </web-app>

    到这里我们的通用分页已经结束了,该怎么访问呢?

    呵呵  大家肯定比我知道啦!http://localhost:8080/pagination/page.do

    大功告成!谢谢给位光临!

    然后我们将刚才的三个.java文件打成JAR包,下次我们用的时候直接导入这个jar包就行了

    四:项目使用

    现在我们新建一个项目测试一下如何使用:

    在我们创建项目的时候给项目添加jstl标签支持,我们在页面会用到,项目框架如下:

  • Java通用分页的更多相关文章

    1. 用Java实现异构数据库的高效通用分页查询功能

      不同数据库的分页查询语句有着较大区别,其中MySQL数据的limit offset语法最为简单,而SQL Server数据库和Oracle数据库的分页就比较复杂了. 网上常见的SQL Server和O ...

    2. 通用分页jsp页面显示

      注:本章内容都是在上一篇文章 通用分页后台显示:https://www.cnblogs.com/ly-0919/p/11058942.html  的基础上进行改进,所以有许多的类都在上一篇, 带来不便 ...

    3. 【转】java通用URL接口地址调用方式GET和POST方式

      java通用URL接口地址调用方式GET和POST方式,包括建立请求和设置请求头部信息等等......... import java.io.ByteArrayOutputStream; import ...

    4. PHP通用分页(Pager)类

      三种不同展示方式 附上style~ 1. 效果图1 2.效果图2    3. 效果图3 4. 分页类主体 <?php /** * PHP通用分页类 * show(2) 1 ... 62 63 6 ...

    5. ReactJS实现的通用分页组件

      大家多少都自己写过各种版本的分页工具条吧,像纯服务版的,纯jsWeb板的,Angular版的,因为这个基础得不能再基础的功能太多地方都会用到,下面我给出以个用ReactJS实现的版本,首先上图看下效果 ...

    6. SQL Server 2008 通用分页存储过程

      1.alert USE [数据库名称] GO /****** Object: StoredProcedure [dbo].[dbTab_PagerHelper] Script Date: 08/22/ ...

    7. SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程(支持单表或多表结查集分页)

      SQL Server利用RowNumber()内置函数与Over关键字实现通用分页存储过程,支持单表或多表结查集分页,存储过程如下: /******************/ --Author:梦在旅 ...

    8. 支持DISTINCT的通用分页存储过程(SQL2005)

      /****** 对象: StoredProcedure [dbo].[P_CommonPagination] 脚本日期: 07/22/2009 10:22:01 ******/ SET ANSI_NU ...

    9. ibernate学习笔记5---实体类或属性名与数据库关键字冲突、hql命名参数、hql实现通用分页

      一.实体类或属性名与数据库关键字冲突问题1.实体类名与数据库中的关键字冲突比如:实体表User与oracle中的系统表冲突解决方式1:在xml中添加table属性,指定表名,使其不与name默认相等 ...

    10. MySql通用分页存储过程

      MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...

    随机推荐

    1. 一个开源、跨平台的.NET UI框架 - Avalonia UI

      前言 今天大姚给大家分享一个开源.免费(MIT License).跨平台的.NET UI框架:Avalonia UI. Avalonia是一个成熟稳定的平台,用于构建桌面.嵌入式.移动的和Web应用程 ...

    2. Unocss使用

      目录: 安装 简单使用 自定义规则 安装 { "dependencies": { "unocss": "^0.55.6", "vu ...

    3. sql转JSON为表

      创建方法 : /****** Object: UserDefinedFunction [dbo].[parseJSON] Script Date: 2017/7/11 18:27:28 ******/ ...

    4. 英文短语和单词备忘 - as well as

      English phrases and vocabulary notes: as well as "as well as" 是一个连接词组,通常用于连接两个相似的元素,以强调两者都 ...

    5. CSS & JS Effect – Button Hover Bling Bling Effect

      效果 原理 一眼看上去, background 有渐变颜色 linear-gradient. 当 hover in 的时候有一束白光, 从右边移动到左边. hover out 则是反过来. 它其实是通 ...

    6. SQL Server STRING_AGG

      参考: How To Use STRING_AGG – Concat Multiple Row Values In SQL Server 如果你想做 string.join(',', collecti ...

    7. ubuntu22.04安装DBeaver

      要在 Ubuntu22.04 上安装 DBeaver,可以选择使用 Ubuntu 软件中心的图形界面方法或使用命令行方法通过官方 DBeaver 仓库或 Snap 包安装. 方法一:从官方仓库安装 D ...

    8. 【HFSS】HFSS绘制梯形走线的5种方法

      使用HFSS仿真PCB走线,需要对走线进行建模,但是由于PCB制造过程中的蚀刻导致走线截面不是理想的矩形,而是接近梯形.为了使仿真尽量精确,需要将PCB走线截面绘制成梯形.下面介绍几种绘制梯形走线的方 ...

    9. 利用AutoGpt将任何模型支持o1模型的推理实现

      利用AutoGpt将任何模型支持o1模型的推理实现 相信大家都对于OpenAI最新出的o1模型都非常关注,它已经能通过推理让回复的效果更加理想, 但是目前o1的限制太大,而且使用o1至少也是需要购买O ...

    10. 1 月 25 日见|Flutter Forward 活动日程表正式发布!

      2023 年 1 月 25 日 (正月初四),我们将在肯尼亚首都内罗毕举办 Flutter Forward 大会,并同时开启线上直播.本次活动将展示最新的 Flutter 技术更新,包括一个主题演讲以 ...