专注于技术分享
   工具共享。

使用PageHelper + bootstrap实现分页

阅读(989)

bootstrap框架小编个人感觉很强大,就是Demo有点少,能节省我们很多时间。本次我来讲讲分页的使用吧。使用bootstrap分页不仅美观,各种计算和传值都不用我们去管,很方便的。

先引入依赖

  • 这是Spring Boot的依赖

        com.github.pagehelper
        pagehelper-spring-boot-starter
        1.2.10
  • 这是普通maven项目的依赖

    com.github.pagehelper
    pagehelper
    4.2.0

看下我们的分页查询数据的sql语句:(不需要写limit,PageHelper会帮我们封装好,后面讲)


    SELECT
        * 
    FROM
        imgdata 
        where 
        userid = #{userid} 

这里我就省略了dao层和service层架构了。直接看controller怎么用吧:

    @RequestMapping(value = "/topage.do")
    @ResponseBody
    public String selectByFy(HttpSession session, Integer pageNum, Integer pageSize) {
        JSONObject jsonObject = new JSONObject();
        Integer userid = (Integer) session.getAttribute("userid");
        //使用Pagehelper传入当前页数和页面显示条数会自动为我们的select语句加上limit查询
        //从他的下一条sql开始分页
        PageHelper.startPage(pageNum, pageSize);
        List images = imgService.selectimg(userid);//这是我们的sql
        //使用pageInfo包装查询
        PageInfo rolePageInfo = new PageInfo(images);
        jsonObject.put("total", rolePageInfo.getTotal());
        jsonObject.put("rows", rolePageInfo.getList());
        return jsonObject.toString();
    }

接下来我们再看一下页面如何使用bootstrap的分页:


 // 分页
        var t = $("#table_server").bootstrapTable({
            url: '/admin/topage.do',//请求后台的url
            method: 'get',
            dataType: "json",
            striped: true,//设置为 true 会有隔行变色效果
            undefinedText: "空",//当数据为 undefined 时显示的字符
            pagination: true, //分页
            // paginationLoop:true,//设置为 true 启用分页条无限循环的功能。
            showToggle: "true",//是否显示 切换试图(table/card)按钮
            showColumns: "true",//是否显示 内容列下拉框
            pageNumber: 1,//如果设置了分页,首页页码
            // showPaginationSwitch:true,//是否显示 数据条数选择框
            pageSize: 5,//如果设置了分页,页面数据条数
            pageList: [5, 10, 20, 40],    //如果设置了分页,设置可供选择的页面数据条数。设置为All 则显示所有记录。
            paginationPreText: '‹',//指定分页条中上一页按钮的图标或文字,这里是<
            paginationNextText: '›',//指定分页条中下一页按钮的图标或文字,这里是>
            // singleSelect: false,//设置True 将禁止多选
            search: false, //显示搜索框
            data_local: "zh-US",//表格汉化
            sidePagination: "server", //服务端处理分页
            queryParams: function (params) {//自定义参数,这里的参数是传给后台的,我这是是分页用的
                return {//这里的params是table提供的
                    pageNum: (params.offset / params.limit) + 1,//从数据库第几条记录开始
                    pageSize: params.limit//找多少条

                };
            },
            idField: "链接",//指定主键列
            columns: [
                {
                    title: '#',//表的列名
                    formatter: function (value, row, index) {
                        //return index+1; //序号正序排序从1开始
                        var pageSize = $('#table_server').bootstrapTable('getOptions').pageSize;//通过表的#id 可以得到每页多少条
                        var pageNumber = $('#table_server').bootstrapTable('getOptions').pageNumber;//通过表的#id 可以得到当前第几页
                        return pageSize * (pageNumber - 1) + index + 1;    //返回每条的序号: 每页条数 * (当前页 - 1 )+ 序号
                    },
                    align: 'center'//水平居中
                },
                {
                    title: '链接',
                    field: 'imgurl',
                    align: 'center'
                },
                {
                    title: '日期',
                    field: 'updatetime',
                    align: 'center'
                },
                {
                    //EMAIL
                    title: '大小',
                    field: 'sizes',
                    align: 'center'
                },
                {
                    //部门名字
                    title: '操作',
                    field: '',//可以直接取到属性里面的属性,赞
                    align: 'center'
                }

            ]
        });

这样分页就做完了
image.png

— END —

关于ajax接受java返回值日期显示Object的问题

阅读(541)

前言

小编最近在做项目的时候遇到一个问题,就是前后台做ajax异步查询的时候,返回给ajax的时间在页面显示Object,当时很头疼,在网上查了半天,最后终于解决了。在这大家也可以参考一下。方便以后遇到问题好解决。

首先写一个工具类,用到直接调用即可。

import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;

/**
 * 扩展JsonValueProcessor接口获得相应转换的日期格式
 * 
 * @author Hellohao
 *
 */
public class JsonValueProcessorImpl implements JsonValueProcessor {
    private String format = &quot;yyyy-MM-dd&quot;;

    public String getFormat() {
        return format;
    }

    public void setFormat(String format) {
        this.format = format;
    }

    public JsonValueProcessorImpl() {
        super();
    }

    public JsonValueProcessorImpl(String format) {
        super();
        this.format = format;
    }

    public Object processArrayValue(Object value, JsonConfig jsonConfig) {
        String[] obj = {};
        if (value instanceof Date[]) {
            SimpleDateFormat sf = new SimpleDateFormat(format);
            Date[] dates = (Date[]) value;
            obj = new String[dates.length];
            for (int i = 0; i &lt; dates.length; i++) {
                obj[i] = sf.format(dates[i]);
            }
        }
        return obj;
    }

    public Object processObjectValue(String key, Object value, JsonConfig jsonConfig) {
        String val = &quot;&quot;;

        if (value instanceof java.util.Date) {
            String str = new SimpleDateFormat(format).format((Date) value);
            return str;
        }
        if (value != null) {
            val = value.toString();
        }
        return val;
    }
}

然后大家直接调用使用就可以。

//json 与 bean 之间的date转换,解决json接受日期在页面上显示object
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.registerJsonValueProcessor(java.util.Date.class,new JsonValueProcessorImpl());
JSONObject JsonObject = JSONObject.fromObject(newWorkPlan, jsonConfig); //使用JSONObject类型变量JsonObject接收json值即可

JDBC通过java实现查询数据库表【基础】

阅读(677)

我们通过java简单的运用JDBC连接一下数据库。实现java查询数据库的表,并且显示出来。

话不多说,大家直接卡代码吧!

一,加载JDBC驱动(驱动我会在下方放链接,有的就用自己 的就可以)

// 加载驱动
Class.forName("com.mysql.jdbc.Driver");

二,与数据仓库建立连接

//链接到对象
Connection conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/school","root","root");

三,执行SQL查询语句”select * from grade”。

//建立查询
Statement stat=conn.createStatement();
String sql="select * from grade";
ResultSet re=stat.executeQuery(sql);

四,显示返回结果

//返回处理结果
int id =0;
String name=null;
System.out.println("年级编号\t年级名称");
while(re.next())
{
id =re.getInt(1);
name=re.getString(2);
//System.out.println(id+"\t"+name);
}
conn.close();
stat.close();
re.close();

注意:如果是查询操作,返回的结果集类型为ResultSet类型的。

数据库驱动下载链接:点我下载 密码:iiag

java实现发送短信验证码

阅读(634)

在网站开发中的注册模块中,短信接收验证码是大部分网站必不可少的功能。这里我就简单总结了一下实现发送短信验证码的功能。

这里用的是秒滴短信服务平台。新用户注册给200条短信,测试够用了。

下面直接上实现代码吧,我这里主要是用作记录笔记大家也可以参考一下。

用到的pom文件:


      4.0.0
      com.hxkj.com
      hellohao01
      0.0.1-SNAPSHOT
      war
      hellohao01

        UTF-8

        commons-beanutils
        commons-beanutils
        1.8.0

        commons-logging
        commons-logging
        1.1.1

        commons-collections
        commons-collections
        3.2

        commons-lang
        commons-lang
        2.4

        net.sf.ezmorph
        ezmorph
        1.0.6

        net.sf.json-lib
        json-lib
        2.4
        jdk15

          javax
          javaee-api
          7.0
          provided

          org.glassfish.web
          javax.servlet.jsp.jstl
          1.2.2

            maven-compiler-plugin
            2.3.2

              1.7
              1.7

            maven-war-plugin
            2.2

              3.1
              false

创建一个RandUtil类,用于生成验证码:

    package org.hellohao.ustil;

    import java.util.Random;

    public class RandUtil {
         public static String getRandNum() {
                String randNum = new Random().nextInt(1000000)+&quot;&quot;;
                System.out.println(&quot;生成&quot;+randNum);
                if (randNum.length()!=6) {   //如果生成的不是6位数随机数则返回该方法继续生成
                    return getRandNum();
                }
                return randNum;
            }

    }

创建QueryUtil类:


    package org.hellohao.ustil;

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class QueryUtil {

    public static String queryArguments(String ACCOUNT_SID,String AUTH_TOKEN, String smsContent,String to) {

        String timestamp = getTimestamp(); //时间戳
        String sig =  MD5(ACCOUNT_SID,AUTH_TOKEN,timestamp);//签名认证

        String str = &quot;accountSid=&quot;+ACCOUNT_SID+&quot;&amp;smsContent=&quot;+
                smsContent+&quot;&amp;to=&quot;+to+&quot;&amp;timestamp=&quot;+timestamp+&quot;&amp;sig=&quot;+sig;
        return str;
    }
    /**
     * MD5加密
     * @param args
     * @return
     */
    public static String MD5(String... args){ //动态参数
        StringBuffer result = new StringBuffer();
        if (args == null || args.length == 0) {
            return &quot;&quot;;
        } else {
            StringBuffer str = new StringBuffer();
            for (String string : args) {
                str.append(string);
            }
            System.out.println(&quot;加密前:\t&quot;+str.toString());

            try {
                MessageDigest digest = MessageDigest.getInstance(&quot;MD5&quot;);
                byte[] bytes = digest.digest(str.toString().getBytes());
                for (byte b : bytes) {
                    String hex = Integer.toHexString(b&amp;0xff);  //转化十六进制
                    if (hex.length() == 1) {
                        result.append(&quot;0&quot;+hex);
                    }else{
                        result.append(hex);
                    }
                }

            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
        }
        System.out.println(&quot;加密后:\t&quot;+result.toString());
        return result.toString();
    }
    /*
     * 获取时间戳
     */
    public static String getTimestamp(){
        SimpleDateFormat sdf = new SimpleDateFormat(&quot;yyyyMMddHHmmss&quot;);
        Date date = new Date();
        return sdf.format(date);
    }

}

创建实现发送短信的类GetMessage:

    package org.hellohao.ustil;

    import net.sf.json.JSONObject;

    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.URL;
    import java.net.URLConnection;

    public class GetMessage {
        static String user=&quot;张三&quot;;

    /**
     * 用户ID
     */
    public static final String ACCOUNT_SID = &quot;xxxxxx&quot;;//这里填写你在平台里的ACOUNT_SID

    /**
     * 密钥
     */
    public static final String AUTH_TOKEN = &quot;xxxxxx&quot;;

    /**
     * 请求地址前半部分
     */
    public static final String BASE_URL = &quot;https://api.miaodiyun.com/20150822/industrySMS/sendSMS&quot;;//请求地址是固定的不用改

    public static  String randNum = RandUtil.getRandNum();

    public  static String smsContent = &quot;【世豪有限公司】亲爱的&quot;+user+&quot;,您的验证码为&quot;+randNum+&quot;,请于&quot;+2+&quot;分钟内正确输入,如非本人操作,请忽略此短信。&quot;;
    /**
     * (获取短信验证码)
     * @param to
     * @return String
     */
    public static String getResult(String to) {
        randNum = RandUtil.getRandNum();
        String smsContent = &quot;【世豪有限公司】亲爱的&quot;+user+&quot;,您的验证码为&quot;+randNum+&quot;,请于&quot;+2+&quot;分钟内正确输入,如非本人操作,请忽略此短信。&quot;;            //这里的randNum 和 smsContent和上面的静态变量是一样的,可删除可保留
        String args = QueryUtil.queryArguments(ACCOUNT_SID, AUTH_TOKEN, smsContent, to);
        OutputStreamWriter out = null;
        InputStream in = null;
        BufferedReader br = null;
        StringBuffer sb = new StringBuffer();

        try {
            URL url = new URL(BASE_URL);
            URLConnection connection = url.openConnection(); //打开链接
            connection.setDoOutput(true);
            connection.setDoInput(true);
            connection.setConnectTimeout(5000);  //设置链接超时
            connection.setReadTimeout(10000);    //设置读取超时

            //提交数据
            out = new OutputStreamWriter(connection.getOutputStream(),&quot;utf-8&quot;);
            out.write(args);
            out.flush();

            //读取返回数据
            br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
            String line = &quot;&quot;;
            while((line = br.readLine())!=null){
                sb.append(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            try {
                if (br!=null) {
                    br.close();
                }
                if (out!=null) {
                    out.close();
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }
        JSONObject jsonObject = JSONObject.fromObject(sb.toString());
        System.out.println(jsonObject);
        Object object = jsonObject.get(&quot;respCode&quot;);
        System.out.println(&quot;状态码:&quot;+object+&quot;验证码:&quot;+randNum);
        System.out.println(!object.equals(&quot;00000&quot;));
        if (!object.equals(&quot;00000&quot;)) {
            return object.toString();
        }else{

            return randNum;
        }
    }
    //  测试功能
      public static void main(String[] args) {
      String result = getResult(&quot;15555555555&quot;);  //这里填写要接受验证码的手机号
      System.out.println(&quot;验证码:&quot;+randNum+&quot;\t&quot;+result);   
      }
    }

–END–

java实现发邮件邮箱验证

阅读(527)

在用户注册时我们经常会发现需要填写邮箱,然后客户需要接受验证码或者给用户发送激活链接,可以说是部分网站必备的功能了。这里我分享一种简单实现邮箱验证功能的方法。

(更多…)