Javaweb09-请求跳转项目 分页条件查询 + 增删改 + 邮件登录

1、Jar 包


    UTF-8
    1.7
    1.7

    1.18.12
    4.11
    5.1.47
    1.2.62

      javax.servlet
      javax.servlet-api
      3.1.0
      provided

      javax.servlet.jsp
      jsp-api
      2.2
      provided

      javax.servlet
      jstl
      1.2

      org.projectlombok
      lombok
      ${lombok.version}
      provided

      junit
      junit
      ${junit.version}
      test

      mysql
      mysql-connector-java
      ${mysql.version}

      com.alibaba
      fastjson
      ${fastjson.version}

      javax.mail
      mail
      1.4

      javax.activation
      activation
      1.1

      com.sun.mail
      jakarta.mail
      1.6.7

      commons-lang
      commons-lang
      2.6

                     添加用户

                    用户编码
                    用户名称
                    性别
                    年龄
                    电话
                    用户角色
                    操作

                        ${user.userCode}

                        ${user.userName}

                            ${user.gender == 1 ? "女" : "男"}

                        ${user.birthday}

                        ${user.phone}

                                    ${role.roleName}

主要有三类数据:

1、分页参数

2、回显参数 (条件查询的条件)

3、条件分页查询的数据

public class PageSupport {
    //当前页,显示页码
    private int currPageNo = 1;

    //页面容量
    private int pageSize = 5;

    //总条数(带条件查询的总条数)
    private int totalCount;

    //总页数(根据总条数和页面容量)
    private int totalPage;

    //分页条件查询的数据
    private T data;

    //回显 查询数据
    private List callBackInfo;

    //排序字段
    private  String orderBy = "id";

    //升序 还是 降序
    private String ascOrDesc = "asc";

    //设置总条数的时候  计算总页数
    public void setTotalCount(int totalCount) {
        //当存在总条数,确定总页数
        this.totalCount = totalCount;
        //计算总页数
        this.totalPage = this.totalCount % this.pageSize == 0 ?
                this.totalCount / this.pageSize :
                    this.totalCount / this.pageSize + 1;
    }

    public int getCurrPageNo() {
        return currPageNo;
    }

    public void setCurrPageNo(int currPageNo) {
        //页码特殊处理
        if(currPageNo < 1 || this.totalCount == 0 ){
            currPageNo = 1;
        }else if(currPageNo > this.totalPage){
            currPageNo = this.getTotalPage();
        }
        this.currPageNo = currPageNo;
    }
    .......

}

分页 条件查询用户列表

// 分页 条件查询用户列表
public void userList(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("=============条件 分页 查询用户列表=====================");
    //获取 条件查询 参数
    String queryName = req.getParameter("queryName");
    String queryUserRole = req.getParameter("queryUserRole")  == null ? "0" : req.getParameter("queryUserRole");

    //获取 分页 参数
    //获取显示的当前页码
    Integer pageNo = Integer.parseInt( req.getParameter("pageNo") == null ? "1" : req.getParameter("pageNo") );
    Integer pageSize = Integer.parseInt( req.getParameter("pageSize") == null ? "5" : req.getParameter("pageSize") );

    //排序条件
    String orderBy = req.getParameter("orderBy") == null ? "id" : req.getParameter("orderBy");
    String ascOrDesc = req.getParameter("ascOrDesc") == null ? "asc" : req.getParameter("ascOrDesc");

    //根据条件查询获取用户 总数
    int totalCount = userService.getUserListTotalByQueryNameAndQueryUserRole(queryName,Integer.parseInt(queryUserRole));

    //创建分页对象
    PageSupport> pageSupport = new PageSupport>();
    //先放pageSize
    pageSupport.setPageSize(pageSize);
    //再放totalCount
    pageSupport.setTotalCount(totalCount);

    //创建回显数据
    List callBackInfo = new ArrayList();
    //pageSupport 中放入回显数据
    //查询条件
    callBackInfo.add(queryName);
    callBackInfo.add(queryUserRole);
    pageSupport.setCallBackInfo(callBackInfo);
    //当前页码
    pageSupport.setCurrPageNo(pageNo);
    //页面容量
    pageSupport.setPageSize(pageSize);
    //排序条件
    pageSupport.setOrderBy(orderBy);
    //排序  方式 asc  desc
    pageSupport.setAscOrDesc(ascOrDesc);

    //查询所有的用户详情列表
    List userList = userService.getUserListByQueryNameAndQueryUserRole(queryName,Integer.parseInt(queryUserRole),pageSupport);
    System.out.println("=============条件 分页 查询用户列表 参数=============");
    System.out.println("查询参数==》queryName = " + queryName);
    System.out.println("查询参数==》queryUserRole = " + queryUserRole);
    System.out.println("排序参数==》orderBy = " + orderBy);
    System.out.println("排序参数==》ascOrDesc = " + ascOrDesc);
    System.out.println("分页参数==》pageNo = " + pageNo);
    System.out.println("分页参数==》pageSize = " + pageSize);
    System.out.println(JSON.toJSONStringWithDateFormat(userList,"yyyy-MM-dd"));
    //req.setAttribute("userList",userList);

    //将数据放入分页对象中
    pageSupport.setData(userList);

    //将分页对象放进request域中
    req.setAttribute("pageSupport",pageSupport);

    //查询所有的  用户角色
    List roleList = roleService.findRoleList();
    System.out.println("=============查询所有的用户角色===============");
    System.out.println(JSON.toJSONStringWithDateFormat(roleList,"yyyy-MM-dd"));
    //将roleList 放进session域中,方便其他的地方直接调用,不用再次查询
    req.getSession().setAttribute("roleList",roleList);

    //内部转发到用户列表页面
    req.getRequestDispatcher( "/jsp/userlist.jsp").forward(req,resp);
    //req.getContextPath()+"/jsp/userlist.jsp"  带项目名的时候不能这样会 拼接两次 项目名
    //req.getRequestDispatcher( req.getContextPath()+"/jsp/userlist.jsp").forward(req,resp);

}

条件查询用户列表 总数

//条件查询用户列表  总数
@Override
public int selectUserListTotalByQueryNameAndQueryUserRole(String queryName, Integer QueryUserRole) {

    int total = 0;

    //SQl
    String executeSql = "select count(1) as 'total' \n"
                        + "from smbms_user where 1=1 ";

    //params
    List params = new ArrayList();

    //拼接参数 和 sql
    if(null != queryName  && !"".equals(queryName)){
        executeSql += " and userName  like concat('%',?,'%') ";
        params.add(queryName);
    }

    if(null != QueryUserRole  &&  0 != QueryUserRole){
        executeSql += " and userRole = ? ";
        params.add(QueryUserRole);
    }

    try {
        //执行
        executeSelect(executeSql, params.toArray());

        //处理数据
        while (rs.next()) {
            total = rs.getInt("total");
        }
    }catch(Exception e){
        e.printStackTrace();
    }finally {
        releaseResource(conn,pstmt,rs);
    }

    return total;
}

条件 分页 查询用户列表

1、定义 返回的参数

2、定义sql

3、动态拼接查询条件

3、动态拼接查询参数(List paramList)

4、动态拼接分页条件

5、动态拼接分页参数(List paramList)

6、执行sql

7、处理数据

其中 timestampdiff(year,birthday, now()) 计算年龄的函数,最后说明;

//条件  分页 查询用户列表
@Override
public List SelectUserListByQueryNameAndQueryUserRole(String queryName, Integer QueryUserRole, PageSupport pageSupport) {

    List userList = new ArrayList();

    //SQl
    String executeSql = "select id,userCode,userName,userPassword,gender,birthday,timestampdiff(year,birthday, now()) as userAge ,phone,address,userRole,createdBy,creationDate,modifyBy,modifyDate\n"
        + "from smbms_user where 1=1 ";

    //params
    List paramList = new ArrayList();

    //拼接参数 和 sql
    if(null != queryName  && !"".equals(queryName)){
        executeSql += " and userName  like concat('%',?,'%') ";
        paramList.add(queryName);
    }

    if(null != QueryUserRole  &&  0 != QueryUserRole){
        executeSql += " and userRole = ? ";
        paramList.add(QueryUserRole);
    }

    //增加分页SQL语句
    executeSql += " order by "+pageSupport.getOrderBy()+ " " +pageSupport.getAscOrDesc()+" limit ?,?";
    paramList.add((pageSupport.getCurrPageNo() - 1) * pageSupport.getPageSize());
    paramList.add(pageSupport.getPageSize());

    try {
        //执行
        executeSelect(executeSql, paramList.toArray());

        //处理数据
        while (rs.next()) {
            User user = new User();
            user.setId(rs.getInt("id"));
            user.setUserCode(rs.getString("userCode"));
            user.setUserName(rs.getString("userName"));
            user.setUserPassword(rs.getString("userPassword"));
            user.setGender(rs.getInt("gender"));
            user.setBirthday(rs.getDate("birthday"));
            user.setUserAge(rs.getInt("userAge"));
            user.setPhone(rs.getString("phone"));
            user.setAddress(rs.getString("address"));
            user.setUserRole(rs.getInt("userRole"));
            user.setCreatedBy(rs.getInt("createdBy"));
            user.setCreationDate(rs.getDate("creationDate"));
            user.setModifyBy(rs.getInt("modifyBy"));
            user.setModifyDate(rs.getDate("modifyDate"));

            userList.add(user);
        }
    }catch(Exception e){
        e.printStackTrace();
    }finally {
        releaseResource(conn,pstmt,rs);
    }

    return userList;
}

角色列表查询省略;

不过如果 角色列表有更改需要重置session域中的角色列表集合数据


        共 ${pageSupport.totalCount} 条记录
             ${pageSupport.currPageNo} 
            /
             ${pageSupport.totalPage} 页  
        首页
        上一页
        下一页
        最后一页
            每页
         selected >3
     selected >5
 selected >10
条
根据
     selected >         id
 selected >创建时间

     selected >升序
 selected >降序
查询

跳转至
    页
    GO

首页,上一页,下一页,尾页,及 上一页和下一页隐藏

//分页跳转
//首页
$(".page-num-ul  a:eq(0)").click(function(){
    //获取id为pageNo的input标签,并给value属性赋值
    // $("#pageNo").val(1);
    //获取表单,并给表单name为pageNo的input标签赋值
    document.forms[0].pageNo.value = 1;
    $("#searchForm").submit();
});

// 上一页
$(".page-num-ul  a:eq(1)").click(function(){
    // $("#pageNo").val(parseInt($("#currPageNo").text()) - 1);
    document.forms[0].pageNo.value = parseInt($("#currPageNo").text()) - 1;
    $("#searchForm").submit();
});

// 下一页
$(".page-num-ul  a:eq(2)").click(function(){
    // $("#pageNo").val(parseInt($("#currPageNo").text()) + 1);
    document.forms[0].pageNo.value = parseInt($("#currPageNo").text()) + 1;
    $("#searchForm").submit();
});

// 尾页
$(".page-num-ul  a:eq(3)").click(function(){
    // $("#pageNo").val(parseInt($("#totalPage").text()));
    document.forms[0].pageNo.value = parseInt($("#totalPage").text());
    $("#searchForm").submit();
});

//上一页,下一页隐藏处理
//上一页
if($("#currPageNo").text() == "1"){
    //alert($("#currPageNo").text());
    $(".page-num-ul  a:eq(1)").hide();
}else {
    $(".page-num-ul  a:eq(2)").show();
}

//下一页
if($("#currPageNo").text() == $("#totalPage").text()){
    //alert($("#currPageNo").text());
    $(".page-num-ul  a:eq(2)").hide();
                            //.css("display","none");
}else {
    //alert($("#currPageNo").text());
    $(".page-num-ul  a:eq(2)").show();
                            //.css("display","inline");
}

//跳到指定页数
$(".page-btn").click(function () {
    var $inputPage = $("#inputPage");
    if($inputPage.val() < 0  || $inputPage.val() > parseInt($("#totalPage").text())){
        alert("请输入正确的页数!!!");
    }else{
        //修改表单中的当前页
        // $("#pageNo").val($inputPage.val());
        document.forms[0].pageNo.value = $inputPage.val();
        $("#searchForm").submit();
    }
});

select的$(“#selected”).change(function(){});

切换select选项触发change事件

&#x4FEE;&#x6539;&#x6BCF;&#x9875;&#x9875;&#x9762;&#x5927;&#x5C0F;

//修改每页页面大小 重新查询
$("#currentPageSize").change(function(){
    //获取修改后的 currentPageSize
    var currentPageSize = $(this).children('option:selected').val();
    //alert(currentPageSize);
    //修改提交表单的pageSize
    // $("#pageSize").val(currentPageSize);
    document.forms[0].pageSize.value = currentPageSize;
    //修改页面大小后,再主动查询一次动漫数据
    //将当前页数,重置为1
    // $("#pageNo").val(1);
    document.forms[0].pageNo = 1;
    $("#searchForm").submit();
});

&#x4FEE;&#x6539;&#x67E5;&#x8BE2;&#x6761;&#x4EF6;

//修改查询条件
$("#currentOrderBy").change(function(){
    //获取修改后的 currentOrderBy
    var currentOrderBy = $(this).children('option:selected').val();
    //修改提交表单的orderBy
    // $("#orderBy").val(currentOrderBy);
    document.forms[0].orderBy.value =  currentOrderBy;
    //修改页面大小后,再主动查询一次动漫数据
    //将当前页数,重置为1
    // $("#pageNo").val(1);
    document.forms[0].pageNo.value = 1;
    $("#searchForm").submit();
});

&#x4FEE;&#x6539;&#x5347;&#x5E8F;&#x6216;&#x964D;&#x5E8F;

//升序或降序
$("#currentAscOrDesc").change(function(){
    //获取修改后的 currentAscOrDesc
    var currentAscOrDesc = $(this).children('option:selected').val();
    //修改提交表单的orderBy
    // $("#ascOrDesc").val(currentAscOrDesc);
    document.forms[0].ascOrDesc.value = currentAscOrDesc;
    //修改页面大小后,再主动查询一次动漫数据
    //将当前页数,重置为1
    // $("#pageNo").val(1);
    document.forms[0].pageNo.value = 1;
    $("#searchForm").submit();
});

4、查看详情

&#x67E5;&#x770B;&#x8BE6;&#x60C5;a&#x6807;&#x7B7E;

 查看用户详情

5、修改用户

&#x7528;&#x6237;&#x4FEE;&#x6539;a&#x6807;&#x7B7E;

修改用户

&#x7528;&#x6237;&#x4FEE;&#x6539;&#x9875;&#x9762;&#x7684;form&#x8868;&#x5355;&#x8BF7;&#x6C42;


6、删除用户

7、增加用户

&#x6DFB;&#x52A0;&#x7528;&#x6237;a&#x6807;&#x7B7E;

 添加用户

&#x7528;&#x6237;&#x6DFB;&#x52A0;&#x9875;&#x9762;&#x7684;&#x7528;&#x6237;&#x6DFB;&#x52A0;&#x8BF7;&#x6C42;&#x8868;&#x5355;


8、修改用户密码

9、注意点

注意看路径映射是否有问题;(有没有少写 “/”)

报错信息:Resource interpreted as Stylesheet but transferred with MIME type text/html

字符编码拦截器单独对css文件的解析类型进行处理

 @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    //设置post请求字符集  encoding为设置映射路径时,设置的初始化字符编码
    servletRequest.setCharacterEncoding(encoding);

    HttpServletRequest request = (HttpServletRequest) servletRequest;

    //静态资源放行
    //获取资源名
    String url=request.getRequestURI();
    //如果资源名包含css样式表、js样式表就特殊处理然后放行
    if(url.contains(".css")) {
        servletResponse.setContentType("text/css; charset=UTF-8");
        servletResponse.setCharacterEncoding(this.encoding);
        System.out.println("css放行");
        //放行请求
        filterChain.doFilter(servletRequest,servletResponse);
    }else {
        //设置响应字符集
        servletResponse.setContentType("text/html; charset=UTF-8");
        servletResponse.setCharacterEncoding(this.encoding);

        //放行请求
        filterChain.doFilter(servletRequest,servletResponse);
    }

}

有时候 自动导包导致 不是自己想要的包直接用全类名即可

主要会再使用@WebServlet 和 @WebFilter 注解后会出现这个问题

javax.servlet.http.HttpServlet

@WebServlet(name = "userServlet",urlPatterns = "/userServlet")
public class UserServlet extends javax.servlet.http.HttpServlet{......}

javax.servlet.Filter

@WebFilter(filterName = "characterEncodingFilter",urlPatterns = "/*",initParams = {
        @WebInitParam(name = "encoding",value = "utf-8")
})
//
public class CharacterEncodingFilter implements javax.servlet.Filter {......}

form表单的 action拼接路径,注意再 get提交方式不能拼接参数,在 post提交方式可以

form表单提交方式 action是否可以拼接参数 get 不可以(实在要使用get就在input中隐藏,这样get和post都可以) post 可以

get&#x63D0;&#x4EA4;

get提交由于 不能拼接参数,所以将method参数隐藏在表单中;

action=”${pageContext.request.contextPath }/billServlet”


   ......

post&#x63D0;&#x4EA4;

post提交可以 直接拼接参数,也可以将method参数隐藏在表单中;

action=”${pageContext.request.contextPath }/billServlet?method=billList”


   ......

首先要知道 req.getContextPath() 获取到的是什么内容?

&#x5982;&#x679C;&#x53D1;&#x5E03;&#x7684;&#x9879;&#x76EE;&#x8DEF;&#x5F84;&#x4E3A;&#xFF1A;/kh96_smbms

System.out.println(" req.getContextPath()==》"+req.getContextPath());
// req.getContextPath()==》 /kh96_smbms         注意它前面有 /,这个是重点

&#x5982;&#x679C;&#x53D1;&#x5E03;&#x7684;&#x9879;&#x76EE;&#x540D;&#x4E3A;&#xFF1A;/

System.out.println(" req.getContextPath()==》"+req.getContextPath());
// req.getContextPath()==》         什么都没有,包括我们之前写发布名时的 / 也没有

知道 req.getContextPath() 获取的是什么我们就 恍然大悟了;

转发和重定向的路径区别

  • 重定向路径中如果有 “/”,只会获取到 站点,然后拼接上我们写的路径;
  • 转发路径中如果有 “/”,会先获取到 站点 + 项目名,再拼接上我们写的路径;

所以重定向:(前提自己写的路径前有 /)

  • 如果 有项目名,我们 一定要 加上 req.getContextPath(), 获取到项目名,再拼接跳转的路径;
  • 如果 没有项目名,我们 加上或不加上,都可以

转发:(前提自己写的路径前有 /)

  • 如果 有项目名,我们不能 加上 req.getContextPath(),如果加上会多拼接上一个项目名,而找不到路径;
  • 如果 没有项目名,我们 加上或不加上,都可以

总结:(前提自己写的路径前有 /)

  • 没有项目名, 加不加 req.getContextPath() 都可以, 不过建议加上
  • 有项目名:
  • 重定向 一定要加req.getContextPath() ;
  • 转发 一定不能加req.getContextPath() ;

10、sql的时间差函数

用来计算时间的差距,年龄,距上一次登录多少天等等;

只比较日期

DATEDIFF() 函数返回两个日期之间的天数。
date1 和 date2 参数是合法的日期或日期/时间表达式。 只有值的日期部分参与计算。

测试一下MySQL:

 SELECT DATEDIFF('2018-05-09 08:00:00','2018-05-09') AS DiffDate;
 //结果 0 ; 表示 2018-05-09 与 2018-05-09之间没有日期差。这里是不比较时分秒的。下面验证带上时分秒有没有差别。
 SELECT DATEDIFF('2018-05-09 00:00:00','2018-05-09 23:59:59') AS DiffDate;
 //结果 0 ;
 SELECT DATEDIFF('2018-05-08 23:59:59','2018-05-09 00:00:00') AS DiffDate;
 //结果 -1;
 SELECT DATEDIFF('2018-05-09 00:00:00','2018-05-08 23:59:59') AS DiffDate;
//结果 1;

可以计算,年,月,日的差距;

select timestampdiff(YEAR,"2018-01-01 15:15:16","2019-08-23 15:15:16") as timestamodiff;
//结果1。相差一年。
select timestampdiff(YEAR,"2019-08-22 15:15:19","2018-12-23 15:15:16") as timestamodiff;
//结果 -1,也是相差一年。
select timestampdiff(YEAR,"2019-08-22 15:15:19","2018-08-22 15:15:16") as timestamodiff;
//结果0,相差不到一年

select timestampdiff(MONTH,"2018-08-22 15:15:16","2018-07-23 15:15:16") as timestamodiff;
// 结果 0 相差不到一个月
select timestampdiff(MONTH,"2018-08-22 15:15:16","2018-07-01 15:15:16") as timestamodiff;
// 结果 -1 相差一个月
select timestampdiff(MONTH,"2018-08-22 15:15:19","2018-09-23 15:15:16") as timestamodiff;
// 结果 1 想差一个月

select timestampdiff(DAY,"2018-08-22 15:15:16","2018-08-23 15:15:16") as timestamodiff;
// 结果 1 想差一天
select timestampdiff(DAY,"2018-08-22 15:15:19","2018-08-23 15:15:16") as timestamodiff;
// 结果 0 想差不到一天
select timestampdiff(DAY,"2018-08-23 15:15:19","2018-08-22 15:15:16") as timestamodiff;
// 结果 -1 想差一天

Original: https://www.cnblogs.com/xiaoqigui/p/16594687.html
Author: 化羽羽
Title: Javaweb09-请求跳转项目 分页条件查询 + 增删改 + 邮件登录

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/620382/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 分布式事务解决方案

    分布式事务解决方案 花开堪折直须折,莫待无花空折枝。 分布式事务是指事务的操作位于不同的节点上,需要保证事务的ACID特性。在分布式架构下,每个节点只知晓自身操作的成功与失败,无法…

    数据库 2023年6月14日
    097
  • 【运维】– Docker基础必知必会(1)

    1.Docker简介 Docker的出现简单地说就是为了解决运行环境和软件配置相关的不一致性问题,采用Docker镜像的方式将软件所需要的运行环境打包。通过Docker build…

    数据库 2023年6月6日
    0116
  • 刚入职没多久,连夜手写了一个代码生成器,项目开发速度瞬间屌炸了!

    一、简介 最近刚入职一个新团队,还没来得及熟悉业务,甲方爸爸就要求项目要在2个月内完成开发并上线! 本想着往后推迟1个月在交付,但是甲方爸爸不同意,只能赶鸭子上架了! 然后根据业务…

    数据库 2023年6月14日
    0111
  • EXCLE中SUMIF和SUMIFS的用法

    一、函数的含义 1、SUMIF函数在EXCLE中是用来对指定条件对若干单元格求和; 2、SUMIFIS函数在EXCLE中是用来对一个区域内满足多重条件的单元格求和(两个条件以上);…

    数据库 2023年6月11日
    091
  • ShardingSphere 云上实践:开箱即用的 ShardingSphere-Proxy 集群

    本次 Apache ShardingSphere 5.1.2 版本更新为大家带来了三大全新功能,其中之一即为使用 ShardingSphere-Proxy chart 在云环境中快…

    数据库 2023年6月16日
    089
  • MySQL知识点大全!!

    使用PreStatement对象: public int execUpdate(String sql, Object[] parms) { int count = 0; try {…

    数据库 2023年5月24日
    085
  • Minio的安装与使用

    Minio的安装与使用 一、Minio介绍 MinIO 是在 Apache License v2.0 下发布的高性能对象存储. 就是说是个存东西的玩意,比较方便配好启动就能访问,也…

    数据库 2023年6月6日
    0110
  • InnoDB数据存储结构

    MySQL服务器上 &#x5B58;&#x50A8;&#x5F15;&#x64CE;负责对表中数据的读取和写入工作,不同存储引擎中 &#x5…

    数据库 2023年5月24日
    070
  • Mybatis-Spring源码分析

    Mybatis-Spring 博主技术有限,本文难免有错误的地方,如果您发现了欢迎评论私信指出,谢谢JAVA技术交流群:737698533 当我们使用mybatis和spring整…

    数据库 2023年6月16日
    098
  • 21粤比武

    先进行密码绕过,在这个界面迅速按下方向键,然后按下e进入编辑模式 找到linux16这一行,将lang编码后面的全部删掉,加上 <span class=”ne-text”&g…

    数据库 2023年6月11日
    0105
  • 什么是前缀索引?

    一、什么是前缀索引? 所谓前缀索引,说白了就是对文本的前几个字符建立索引( 具体是几个字符在建立索引时去指定),比如以产品名称的前 10 位来建索引,这样建立起来的索引更小,查询效…

    数据库 2023年6月14日
    0114
  • MySQL中 VARCHAR 可设置的最大长度是多少?

    在使用MySQL的过程中,在存储字符串时,大家或许都有过这样或那样的困惑,譬如: 对于固定长度的字符串,为什么推荐使用 CHAR 来存储? VARCHAR 可设置的最大长度是多少?…

    数据库 2023年6月11日
    0101
  • JAVA中如何取得一个数组中最大值和最小值呢?

    数组是日常开发中,常用的数据结构, 它可用于存储同一类型的数据,如:(基础类型,引用类型) 那么我们如何获取一个数组中的最大值和最小值呢? 对一些基础类型,我们可以直接使用比较, …

    数据库 2023年6月11日
    093
  • 大连交通大学课程共享

    如本页面访问适配不佳,阅读体验不好可访问公众号页面(适配更好)。公众号页面:https://mp.weixin.qq.com/s/5g2-Izrygm6WhKiT3z1yow 设立…

    数据库 2023年6月11日
    084
  • MySQL事务提交流程

    有binlog的CR方式(重点核心!!):有binlog情况下,commit动作开始时,会有一个Redo XID 的动作记录写到redo,然后写data到binlog,binlog…

    数据库 2023年6月16日
    096
  • git 烂笔头

    &#x89E6;&#x7C7B;&#x65C1;&#x901A;, &#x4E3E;&#x4E00;&#x53CD;&amp…

    数据库 2023年6月9日
    088
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球