置顶随笔

[置顶]执子之手--与子偕老

 

谁,吻我之眸,遮我半世流离;

谁,抚我之面,慰我半世哀伤;

谁,携我之心,融我半世冰霜;

谁,扶我之肩,驱我一世沉寂。

谁,唤我之心,掩我一生凌轹。

谁,弃我而去,留我一世独殇;

谁,可明我意,使我此生无憾;

谁,可助我臂,纵横万载无双;

谁,可倾我心,寸土恰似虚弥; 

谁,可葬吾怆,笑天地虚妄,吾心狂。

伊,覆我之唇,祛我前世流离; 

伊,揽我之怀,除我前世轻浮。

  

执子之手,陪你痴狂千生;

深吻子眸,伴你万世轮回。

执子之手,共你一世风霜;

吻子之眸,赠你一世深情。

我, 牵尔玉手, 收你此生所有;

我, 抚尔秀颈, 挡你此生风雨。 

予,挽子青丝,挽子一世情思;

予,执子之手,共赴一世情长;

曾,以父之名,免你一生哀愁;

曾,怜子之情,祝你一生平安!

 

posted @ 2011-08-25 17:38 青蛙學堂 阅读(322) | 评论 (1)编辑 收藏

2020年8月19日

nodejs连sqlite3数据库


实例1:
//数据库的名字是"mydatebase.db"
var sqlite3 = require('sqlite3').verbose();
var database;
var database = new sqlite3.Database('mydatebase.db');

//database = new sqlite3.Database("mydatebase.db", function(e){
//
 if (err) throw err;
//
});
//
也可以使用内存型,数据不会永久保存
//
database = new sqlite3.Database(":memory:", function(e){
//
 if (err) throw err;
//
});
 console.log("111111111122222");
 /*
database.run("CREATE TABLE foo7 (id INT,name CHAR(50))", function(e){
 if(e !== null){
 throw e;
}
 //循环生成sql语句,批次插入多条数据
 var sql = "";
 var temp = "";
 for(var i = 0 ; i < 500; i ++){
     temp = "name"+i;
 //sql += 'INSERT INTO foo6(id,name) VALUES(' + i + ' ,'  +temp + ');'
 sql += 'INSERT INTO foo7(id,name) VALUES(' + i + ' ,"boy345");'
}
 database.exec(sql);
 

});
*/
/*
database.run("drop TABLE foo4  ", function(e){
 if(e !== null){
 throw e;
}
  
});

*/
  console.log("222222222222");
//Database#each(' select *  from foo ', [param, ], [callback], [complete]);
//
database.all("select *  from foo  where id=?", idvalue, function (err, row) {});
database.all("select *  from foo7  where id < 10 ",  function (err, rows) {
    console.log(rows);
      
});

database.each(" select *  from foo2 where id < 50  ", function(err, row) {
    //console.log(row.id + ": " + row.name);
  });



 console.log("333333333333333322222");
 
 
 实例2:
//数据库的名是"mydatebase.db"
//
var sqlite3 = require("sqlcipher");
var sqlite3 = require("sqlite3");
//创建数据库
var database = new sqlite3.Database("mydatebase.db", function(err){
 if (err){
 console.log("new database error,",err.message);
    }else{
 console.log("new database success");

 //创建表
 database.run("create table if not exists sharewaf_data(time NUMERIC, domain TEXT, ip TEXT, lon_lat TEXT, address TEXT, url TEXT, type TEXT, agent TEXT)",function(err){
 if(err){
 console.log("create database error,",err.message);
            }else{
 console.log("create database success");

 //插入数据
 database.run("insert into sharewaf_data(time, domain, ip, lon_lat, address, url, type, agent) VALUES(?,?,?,?,?,?,?,?)",["time22", "domain22", "ip22", "lon_lat22", "taiyuan22", "url22", "type", "agent"],function(err){
 if(err){
 console.log("insert data error,",err.message);
                    }else{
 console.log("insert data success");

 //查询
 database.all("select * from sharewaf_data", function(err, rows) {
 if(err){
 console.log("select from sharewaf_data error,",err.message);
                            }else{
 console.log(rows);
                            }
                        });
                    }

                });
            }
        });
    }
});

 
 
 


posted @ 2020-08-19 18:50 青蛙學堂 阅读(38) | 评论 (0)编辑 收藏

nodejs-sqlite3

nodejs与sqlite
//打开数据库
var db = new sqlite3.Database('xx.db');

// 关闭数据库
db.close();

db.run('xx');  // 数据库对象的run函数可以执行任何的SQL语句,该函数一般不用来执行查询
               // create alter 之类的


增:
var stmt = db.prepare("INSERT OR REPLACE INTO note (cdate, content) VALUES (?,?)");
stmt.run(data.cdate, data.content);
stmt.finalize();

删:
db.prepare("DELETE  from note where cdate =?");  
stmt.run(data.cdate);  
stmt.finalize();

改:
var stmt = db.prepare("UPDATE note set content=? where cdate =?");  
stmt.run(data.content, data.cdate);  
stmt.finalize();  

查:
db.each("SELECT rowid AS id, thing FROM Stuff", function(err, row) {
    console.log(row.id + ": " + row.thing);
  });
});
// or
db.all("SELECT xxx", function (err, res){});

 // 使用

先把库下载到node_modules  npm install sqlite3 --save


 1.引入sqlite3库
var sqlite3 = require('sqlite3');
// or  var sqlite3 = require("sqlite3").verbose();

var db = new sqlite3.Database(file);
db.serialize(function() {
     //Do stuff
     db.run("CREATE TABLE Stuff (thing TEXT)");

     var stmt = db.prepare("INSERT INTO Stuff VALUES (?)");
     for(var i = 0;i<xx;i++){
         stmt.run('xx');
     }     
     stmt.finalize();

});
db.close();

 

posted @ 2020-08-19 11:17 青蛙學堂 阅读(9) | 评论 (0)编辑 收藏

2020年8月13日

WEB页面导出为EXCEL文档的方法js-ie


<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml">  
  
<head>  
    <meta http-equiv="Content-Type" content="text/html; charset=gbk"/>  
    <title>WEB页面导出为EXCEL文档的方法</title>  
</head>  
<body>  
<table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0">  
    <tr>  
        <td colspan="5" align="center">WEB页面导出为EXCEL文档的方法</td>  
    </tr>  
    <tr>  
        <td>列标题1</td>  
        <td>列标题2</td>  
        <td>列标题3</td>  
        <td>列标题4</td>  
        <td>列标题5</td>  
    </tr>  
    <tr>  
        <td>aaa</td>  
        <td>bbb</td>  
        <td>ccc</td>  
        <td>ddd</td>  
        <td>eee</td>  
    </tr>  
    <tr>  
        <td>AAA</td>  
        <td>BBB</td>  
        <td>CCC</td>  
        <td>DDD</td>  
        <td>EEE</td>  
    </tr>  
    <tr>  
        <td>FFF</td>  
        <td>GGG</td>  
        <td>HHH</td>  
        <td>III</td>  
        <td>JJJ</td>  
    </tr>  
</table>  
<input type="button" onclick="javascript: method1('tableExcel');" value="第一种方法导入到EXCEL">  
<input type="button" onclick="javascript: method2('tableExcel');" value="第二种方法导入到EXCEL">  
<input type="button" onclick="javascript: getXlsFromTbl('tableExcel', null);" value="第三种方法导入到EXCEL">  
  
<SCRIPT LANGUAGE="javascript">
    function method1(tableid) {//整个表格拷贝到EXCEL中   
        var curTbl = document.getElementById(tableid);
        var oXL = new ActiveXObject("Excel.Application");
        //创建AX对象excel   
        var oWB = oXL.Workbooks.Add();
        //获取workbook对象   
        var oSheet = oWB.ActiveSheet;
        //激活当前sheet   
        var sel = document.body.createTextRange();
        sel.moveToElementText(curTbl);
        //把表格中的内容移到TextRange中   
        sel.select();
        //全选TextRange中内容   
        sel.execCommand("Copy");
        //复制TextRange中内容    
        oSheet.Paste();
        //粘贴到活动的EXCEL中         
        oXL.Visible = true;
        //设置excel可见属性   
    }

    function method2(tableid) //读取表格中每个单元到EXCEL中   
    {
        var curTbl = document.getElementById(tableid);
        var oXL = new ActiveXObject("Excel.Application");
        //创建AX对象excel   
        var oWB = oXL.Workbooks.Add();
        //获取workbook对象   
        var oSheet = oWB.ActiveSheet;
        //激活当前sheet   
        var Lenr = curTbl.rows.length;
        //取得表格行数   
        for (i = 0; i < Lenr; i++) {
            var Lenc = curTbl.rows(i).cells.length;
            //取得每行的列数   
            for (j = 0; j < Lenc; j++) {
                oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText;
                //赋值   
            }
        }
        oXL.Visible = true;
        //设置excel可见属性   
    }

    function getXlsFromTbl(inTblId, inWindow) {
        try {
            var allStr = "";
            var curStr = "";
            //alert("getXlsFromTbl");   
            if (inTblId != null && inTblId != "" && inTblId != "null") {
                curStr = getTblData(inTblId, inWindow);
            }

            if (curStr != null) {
                allStr += curStr;
            }
            else {
                alert("你要导出的表不存在!");
                return;
            }

            var fileName = getExcelFileName();
            doFileExport(fileName, allStr);
        }
        catch (e) {
            alert("导出发生异常:" + e.name + "->" + e.description + "!");
        }
    }

    function getTblData(inTbl, inWindow) {
        var rows = 0;
        //alert("getTblData is " + inWindow);   
        var tblDocument = document;
        if (!!inWindow && inWindow != "") {
            if (!document.all(inWindow)) {
                return null;
            }
            else {
                tblDocument = eval(inWindow).document;
            }
        }

        var curTbl = tblDocument.getElementById(inTbl);
        var outStr = "";
        if (curTbl != null) {
            for (var j = 0; j < curTbl.rows.length; j++) {
                //alert("j is " + j);   
                for (var i = 0; i < curTbl.rows[j].cells.length; i++) {
                    //alert("i is " + i);   
                    if (i == 0 && rows > 0) {
                        outStr += " \t";
                        rows -= 1;
                    }
                    outStr += curTbl.rows[j].cells[i].innerText + "\t";
                    if (curTbl.rows[j].cells[i].colSpan > 1) {
                        for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) {
                            outStr += " \t";
                        }
                    }
                    if (i == 0) {
                        if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) {
                            rows = curTbl.rows[j].cells[i].rowSpan - 1;
                        }
                    }
                }
                outStr += "\r\n";
            }
        }
        else {
            outStr = null;
            alert(inTbl + "不存在!");
        }
        return outStr;
    }

    function getExcelFileName() {
        var d = new Date();
        var curYear = d.getYear();
        var curMonth = "" + (d.getMonth() + 1);
        var curDate = "" + d.getDate();
        var curHour = "" + d.getHours();
        var curMinute = "" + d.getMinutes();
        var curSecond = "" + d.getSeconds();

        if (curMonth.length == 1) {
            curMonth = "0" + curMonth;
        }
        if (curDate.length == 1) {
            curDate = "0" + curDate;
        }
        if (curHour.length == 1) {
            curHour = "0" + curHour;
        }
        if (curMinute.length == 1) {
            curMinute = "0" + curMinute;
        }
        if (curSecond.length == 1) {
            curSecond = "0" + curSecond;
        }

        var fileName = "leo_zhang" + "_" + curYear + curMonth + curDate + "_" + curHour + curMinute + curSecond + ".csv";
        //alert(fileName);   
        return fileName;
    }

    function doFileExport(inName, inStr) {
        var xlsWin = null;
        if (!!document.all("glbHideFrm")) {
            xlsWin = glbHideFrm;
        }
        else {
            var width = 6;
            var height = 4;
            var openPara = "left=" + (window.screen.width / 2 - width / 2)
                    + ",top=" + (window.screen.height / 2 - height / 2)
                    + ",scrollbars=no,width=" + width + ",height=" + height;
            xlsWin = window.open("", "_blank", openPara);
        }

        xlsWin.document.write(inStr);
        xlsWin.document.close();
        xlsWin.document.execCommand('Saveas', true, inName);
        xlsWin.close();
    }

</SCRIPT>  
</body>  
</html> 

posted @ 2020-08-13 15:59 青蛙學堂 阅读(11) | 评论 (0)编辑 收藏

Javascript操作excel--IE

Js操作Excel常用方法

1.创建一个新Excel表格

    var XLObj = new ActiveXObject("Excel.Application");
    var xlBook = XLObj.Workbooks.Add;                         //新增工作簿
    var ExcelSheet = xlBook.Worksheets(1);                   //创建工作表

2.保存表格
    ExcelSheet.SaveAs("C:\\TEST.XLS");

3.使 Excel 通过Application 对象可见
    ExcelSheet.Application.Visible = true;

4.打印
    xlBook.PrintOut;
    或者:
    ExcelSheet.PrintOut;

5.关闭
    xlBook.Close(savechanges=false);
    或者:
    ExcelSheet.Close(savechanges=false);

6.结束进程
    ExcelSheet.Application.Quit();
    或者:
    XLObj.Quit();
    XLObj=null;

function endXlsObj(){    
    oXL.UserControl = true;   
    oXL=null;   
    oWB=null;   
    activeSheet=null;   
    //结束excel进程,退出完成
    idTmr = window.setInterval("Cleanup();",1);
}
function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();


7.页面设置

    ExcelSheet.ActiveSheet.PageSetup.Orientation = 2;
    ExcelSheet.ActiveSheet.PageSetup.LeftMargin= 2/0.035;         //页边距 左2厘米
    ExcelSheet.ActiveSheet.PageSetup.RightMargin = 3/0.035;      //页边距 右3厘米,
    ExcelSheet.ActiveSheet.PageSetup.TopMargin = 4/0.035;        //页边距 上4厘米,
    ExcelSheet.ActiveSheet.PageSetup.BottomMargin = 5/0.035;   //页边距 下5厘米
    ExcelSheet.ActiveSheet.PageSetup.HeaderMargin = 1/0.035;   //页边距 页眉1厘米
    ExcelSheet.ActiveSheet.PageSetup.FooterMargin = 2/0.035;    //页边距 页脚2厘米
    ExcelSheet.ActiveSheet.PageSetup.CenterHeader = "页眉中部内容";
    ExcelSheet.ActiveSheet.PageSetup.LeftHeader = "页眉左部内容";
    ExcelSheet.ActiveSheet.PageSetup.RightHeader = "页眉右部内容";
    ExcelSheet.ActiveSheet.PageSetup.LeftFooter = "页脚左部内容";
    ExcelSheet.ActiveSheet.PageSetup.RightFooter = "页脚右部内容";            ExcelSheet.ActiveSheet.PageSetup.CenterHeader = "&\"宋体,加粗\"&18长天公司" + date1 + "至" + date2 + "(施工图)项目进度检查表";
    ExcelSheet.ActiveSheet.PageSetup.RightHeader = "&D";
    ExcelSheet.ActiveSheet.PageSetup.PrintGridlines = true;
    ExcelSheet.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1";
    ExcelSheet.ActiveSheet.PageSetup.Zoom = 75;

8.对单元格操作,带*部分对于行,列,区域都有相应属性
    ExcelSheet.ActiveSheet.Cells(row,col).Value = "内容";                //设置单元格内容
    ExcelSheet.ActiveSheet.Cells(row,col).Borders.Weight = 1;        //设置单元格边框*()
    ExcelSheet.ActiveSheet.Cells(row,col).Interior.ColorIndex = 1;    //设置单元格底色*(1-黑色,
        2-白色,3-红色,4-绿色,5-蓝色,6-黄色,7-粉红色,8-天蓝色,9-酱土色..可以多做尝试)
    ExcelSheet.ActiveSheet.Cells(row,col).Interior.Pattern = 1;         //设置单元格背景样式*(1-无,
                                                     2-细网格,3-粗网格,4-斑点,5-横线,6-竖线..可以多做尝试)
    ExcelSheet.ActiveSheet.Cells(row,col).Font.ColorIndex = 1;        //设置字体颜色*(与上相同)
    ExcelSheet.ActiveSheet.Cells(row,col).Font.Size = 10;                //设置为10号字*
    ExcelSheet.ActiveSheet.Cells(row,col).Font.Name = "黑体";        //设置为黑体*
    ExcelSheet.ActiveSheet.Cells(row,col).Font.Italic = true;             //设置为斜体*
    ExcelSheet.ActiveSheet.Cells(row,col).Font.Bold = true;             //设置为粗体*
    ExcelSheet.ActiveSheet.Cells(row,col).ClearContents;                //清除内容*
    ExcelSheet.ActiveSheet.Cells(row,col).WrapText=true;               //设置为自动换行*
    ExcelSheet.ActiveSheet.Cells(row,col).HorizontalAlignment = 3; //水平对齐方式枚举* (1-常规,
                                    2-靠左,3-居中,4-靠右,5-填充 6-两端对齐,7-跨列居中,8-分散对齐)
    ExcelSheet.ActiveSheet.Cells(row,col).VerticalAlignment = 2;      //垂直对齐方式枚举*(1-靠上,
                                                                                  2-居中,3-靠下,4-两端对齐,5-分散对齐)
    //行,列有相应操作:
    ExcelSheet.ActiveSheet.Rows(row).
    ExcelSheet.ActiveSheet.Columns(col).
    ExcelSheet.ActiveSheet.Rows(startrow+":"+endrow).                  //如Rows("1:5")即1到5行
    ExcelSheet.ActiveSheet.Columns(startcol+":"+endcol).               //如Columns("1:5")即1到5列
    //区域有相应操作:
    XLObj.Range(startcell+":"+endcell).Select;
        //如Range("A2:H8")即A列第2格至H列第8格的整个区域
    XLObj.Selection.
    //合并单元格
    XLObj.Range(startcell+":"+endcell).MergeCells = true;
        //如Range("A2:H8")即将A列第2格至H列第8格的整个区域合并为一个单元格
    或者:
    XLObj.Range("A2",XLObj.Cells(8, 8)).MergeCells = true;

9.设置行高与列宽
    ExcelSheet.ActiveSheet.Columns(startcol+":"+endcol).ColumnWidth = 22;
        //设置从firstcol到stopcol列的宽度为22
    ExcelSheet.ActiveSheet.Rows(startrow+":"+endrow).RowHeight = 22;
        //设置从firstrow到stoprow行的宽度为22

posted @ 2020-08-13 15:21 青蛙學堂 阅读(12) | 评论 (0)编辑 收藏

springmvc后台获取表单提交的参数数据

1、通过注解ModelAttribute直接映射表单中的参数到POJO。在from中的action写提交的路径,在input的name写参数的名称。


复制代码
package com.demo.model;

public class user {
    private String username;
    private String password;
    private  int nsex;


    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


    public void setNsex(int nsex) {
        this.nsex = nsex;
    }

    public int getNsex() {return nsex;}
}
复制代码

复制代码
<%--
  Created by IntelliJ IDEA.
  User: wym
  Date: 2019/10/8
  Time: 23:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Login</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/login" method="post">
    用户名:<input type="text" name="username"/> <br><br>
    密码:<input type="password" name="password"/> <br><br>
    <input type="submit" value="提交"/>
</form>
</body>
</html>
复制代码

复制代码
package com.demo.controller;


import com.demo.model.user;
import com.demo.service.Userservice;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import javax.servlet.http.HttpSession;

@Controller
public class LoginController {
    @Autowired
    private Userservice userService;

    @RequestMapping(value="/login", method= RequestMethod.POST)
      public String hello(@ModelAttribute user u, HttpSession session){

            session.setAttribute("user", u);
        user user = userService.findbyname(u.getUsername());
        if(user == null)
            return "loginfail";
        else if(!user.getPassword().equals(u.getPassword()))
            return "falsepaswd";
        else
        return "helloworld";
    }


}
复制代码
注意!!这里只有input的参数name名称和pojo中的成员域名称完全相同才可以通过@ModelAttribute进行直接映射,否则无法被赋值的参数将会以默认值的方式呈现。

2.显然不可能form获取的内容总是某个pojo的属性,完全有可能是单独出现的。这时可以使用@RequestParam获取参数。

复制代码
 1     public String hello(@RequestParam(value="username") String A, @RequestParam(value="password") String B, HttpSession session){
 2         session.setAttribute("a", A);
 3         session.setAttribute("b", B);
 4         user user = userService.findbyname(A);
 5         if(user == null)
 6             return "loginfail";
 7         else if(!user.getPassword().equals(B))
 8             return "falsepaswd";
 9         else
10             return "helloworld";
11 
12     }
复制代码
这时候只需跟在@RequestParam后的参数和form的name一致即可,String的名称可以随便取。

 

3.可以直接啥注解都不加,只需保证参数名称和form的name即可

复制代码
    public String hello( String username, String password, HttpSession session){
        session.setAttribute("a", username);
        session.setAttribute("b", password);
        user user = userService.findbyname(username);
        if(user == null)
            return "loginfail";
        else if(!user.getPassword().equals(password))
            return "falsepaswd";
        else
            return "helloworld";

    }
复制代码
 

4.通过HttpServletRequest接收

复制代码
    public String hello( HttpServletRequest req, HttpSession session){
        username=req.getParameter("username");
        password=req.getParameter("password");
        session.setAttribute("a", username);
        session.setAttribute("b", password);
        user user = userService.findbyname(username);
        if(user == null)
            return "loginfail";
        else if(!user.getPassword().equals(password))
            return "falsepaswd";
        else
            return "helloworld";

    }
    
复制代码
 

 

此外,还有一些其他的方式接受数据,例如通过@RequestBody等方式传递json数据。

posted @ 2020-08-13 08:50 青蛙學堂 阅读(8) | 评论 (0)编辑 收藏

使用@RequestMapping+@Pathvariable获取url中携带的参数


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import top.huashengshu.springsecuritydemoimooc.entity.User;
 
@Controller
public class UserController {
    
    @RequestMapping(value = "/user/{id}")
    public User queryWhenId(@PathVariable(name = "id") Integer id){
        User user=new User();
        /*
        假设经过service获得到了一个User对象
         
*/
        user.setId(id);
        user.setName("张三");
        user.setAge(18);
        user.setSex(1);
        
        return user;
    }
}
当我们使用Restful风格的代码并且想要获取url中携带的参数时,

比如/user/id  获取其中的id 参数就可以使用 @PathVariable注解

@PathVariable(name = "id") Integer id    来获取其中的id数据,如果不加name="xxx"则默认使用变量名来获取

比如上面的案例可以直接使用@PathVariable Integer id

其中的name作用是获取别名参数

也可以通过@PathVariable(name = "id") Integer keyname

将url中的id数据赋值给keyname变量

 

另外还可以加一个require=true表示这个参数必须要有不能为null

@PathVariable(required = true,name = "id") Integer id
 

另外在@RequestMapping注解可以在url中使用正则表达式以上面的controller为例子,我们想要获取的id是数字类型的我们可以这样做,在@RequestMapping注解中这样使用加入正则 通过  冒号 “ : ”加入正则来限制输入的参数

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import top.huashengshu.springsecuritydemoimooc.entity.User;
 
@Controller
public class UserController {
 
    @RequestMapping(value = "/user/{id:\\d+}")
    public User queryWhenId(@PathVariable(required = true,name = "id") Integer id){
        User user=new User();
        /*
        假设经过service获得到了一个User对象
         
*/
        user.setId(id);
        user.setName("张三");
        user.setAge(18);
        user.setSex(1);
 
        return user;
    }
}
@RequestMapping还可以指定RESTful所使用的http方法,通过method=RequestMethod.GET  或者DELETE或POST或PUT

分别代码查询请求GET、删除请求DELETE、增加请求POST、修改请求PUT 来指定Restful中的4中http方法

@Controller
public class UserController {
 
    @RequestMapping(value = "/user/{id:\\d+}",method = RequestMethod.GET)
    public User queryWhenId(@PathVariable(required = true,name = "id") Integer id){
        User user=new User();
        /*这里写逻辑
        假设经过service获得到了一个User对象
         
*/
        return user;
    }
}
 

 

 

posted @ 2020-08-13 08:31 青蛙學堂 阅读(65) | 评论 (0)编辑 收藏

Spring 获取URL中的数据(@PathVariable)和请求的参数(@RequestParam)



SpringBoot获取URL中的数据和请求的参数,有两种方式,

一种是:@PathVariable,获取URL中的参数
另一种是:@RequestParam,获取请求参数值

@PathVariable和@RequestParam


@PathVariable是从路径里面去获取变量,也就是把路径当做变量。

 

@RequestParam是从请求里面获取参数。 

 

如:url:http://localhost:8080/test_mobile/test?a=777&b=888&c=999

 

如果你要得到?后面的参数(a、b、c)的值,则需要使用@RequestParam进行方法里参数的注解,当然springmvc默认的参数注解就是它。

 

例: @RequestMapping(value = "/test_mobile/test", method = RequestMethod.GET)
    public String list(Model model,@RequestParam String a) {  //当然可以不加,springmvc默认的
        System.out.println(a);
    }

 

如果“test_mobile”这个字符串需要后台获取到,使用@PathVariable

 

例:

@RequestMapping(value = "/{qqqqq}/test", method = RequestMethod.GET)
    public String list(Model model,@PathVariable("qqqqq") String aaaa) { 

 //这里只要满足value中的路径结构正确,注解后面保证名称一致,就可以得到{qqqqq}占位符所占的值。
        System.out.println(aaaa);
   }

第一种:@PathVariable
package com.hua.myfirst;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

//@Controller + @Responsebody =@ RestController
@RestController
@RequestMapping("/test")
public class HelloConteoller {

    @Autowired
    private WomanConfig womanConfig;

    //不同的链接访问同一个接口
    @GetMapping("/hello/{id}")
    public String hello(@PathVariable("id") Integer id) {
        return "id:" + id ;
    }

}


启动成功,
打开链接:http://127.0.0.1:8080/v1/test/hello/100

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

//@Controller + @Responsebody =@ RestController
@RestController
@RequestMapping("/test")
public class HelloConteoller {

    @Autowired
    private WomanConfig womanConfig;

    //不同的链接访问同一个接口
    @GetMapping("/hello")
    public String hello(@RequestParam("id") Integer id) {
        return "id:" + id ;
    }

}

启动成功,
打开链接:http://127.0.0.1:8080/v1/test/hello?id=100

@RequestParam进阶:
使用@RequestParam(value = “id”, required = false, defaultValue = "0"设置非必填参数,以及默认值

//不同的链接访问同一个接口
    @GetMapping("/hello")
    public String hello(@RequestParam(value = "id", required = false, defaultValue = "0") Integer myID) {
        return "id:" + myID ;
    }

启动成功,
打开链接:http://127.0.0.1:8080/v1/test/hello 默认值为0

posted @ 2020-08-13 08:21 青蛙學堂 阅读(14) | 评论 (0)编辑 收藏

2020年8月5日

Layui table 示例


Layui table 示例

 <link rel="stylesheet" href="lib/layui/css/layui.css" media="all">

 
    
<table id="demo" lay-filter="test"></table>
 
<script src="lib/layui/layui.js"></script>
<script>
    layui.use('table', function () {
        var table = layui.table;

        //第一个实例
        table.render({
            elem: '#demo'
          , height: 312
        //  , url: '/demo/table/user/' //数据接口
          ,  url: 'common/Getdatatwo.ashx' 
          , page: true //开启分页

            , edit: true

          , cols: [[ //表头
               { checkbox: true },
              //  { checkbox: true,type: 'checkbox', width: 100, title: '选择' },
            //  { type: 'checkbox', width: 100, title: '选择' },
           // { field: 'ID', title: 'ID', width: 80, sort: true, fixed: 'left' }
            , {  field: 'yuefen',   title:'月份', width: 80 }
            , { field: "state", title: "状态", width: 80, sort: true }
            , { field: "state2", title: "状态2", width: 80, event: 'setSign', style: 'cursor: pointer;' }
            , {  field: "empname",   title: "操作员" , width: 177 ,edit:true }
            , { field: "createdate", title: "时间", width: 180, sort: true }
           
              
             , { fixed: 'right', width: 250, align: 'center', toolbar: '#barDemo' } //这里的toolbar值是模板元素的选择器
           
          ]]

//*********************************
 , page: { theme: '#409eff', prev: '上一页', groups: 8, next: '下一页', layout: ['count', 'prev', 'page', 'next'] }
       
         

//********************************
        });

        //*******************************

        //监听行单击事件
        table.on('row(test)', function (obj) {
         //   console.log(obj.tr) //得到当前行元素对象
          //  console.log(obj.data) //得到当前行数据

           // alert(obj.data.yuefen);
          
            //obj.del(); //删除当前行
            //obj.update(fields) //修改当前行数据
        });

        //监听行双击事件
        table.on('rowDouble(test)', function (obj) {
            //obj 同上
        });
        //监听复选框选择
        table.on('checkbox(test)', function (obj) {
            alert(obj.checked);
            alert(obj.data.ID);
            console.log(obj.checked); //当前是否选中状态
          //  console.log(obj.data); //选中行的相关数据
            console.log(obj.type); //如果触发的是全选,则为:all,如果触发的是单选,则为:one
        });

        //编辑
        table.on('edit(test)', function (obj) { //注:edit是固定事件名,test是table原始容器的属性 lay-filter="对应的值"
            alert("1122" + obj.value);
            console.log(obj.value); //得到修改后的值
            console.log(obj.field); //当前编辑的字段名
            console.log(obj.data); //所在行的所有相关数据  
        });

        //监听单元格事件
        table.on('tool(test)', function (obj) {

          

            var data = obj.data;
            if (obj.event === 'setSign') {

                alert("eeeeeee:" );
                //同步更新表格和缓存对应的值
                obj.update({
                    state2: '7777777'
                });
                /*
                layer.prompt({
                    formType: 2
                  , title: '修改 ID 为 [' + data.id + '] 的用户签名'
                  , value: data.sign
                }, function (value, index) {
                    layer.close(index);

                    //这里一般是发送修改的Ajax请求

                    //同步更新表格和缓存对应的值
                    obj.update({
                        sign: value
                    });
                });
                
*/
            }
        });


        //监听工具条 
        /*
        table.on('tool(test)', function (obj) { //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"
            var data = obj.data; //获得当前行数据
            var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)
            var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)

            if (layEvent === 'detail') { //查看
                //do somehing
            } else if (layEvent === 'del') { //删除
                layer.confirm('真的删除行么', function (index) {
                    obj.del(); //删除对应行(tr)的DOM结构,并更新缓存
                    layer.close(index);
                    //向服务端发送删除指令
                });
            } else if (layEvent === 'edit') { //编辑
                //do something

                //同步更新缓存对应的值
                obj.update({
                    state2: '123'
                  , empname: 'xxx'
                });
            } else if (layEvent === 'LAYTABLE_TIPS') {
                layer.alert('Hi,头部工具栏扩展的右侧图标。');
            }
        });
        
*/

    });
</script>

    <script type="text/html" id="barDemo">
  <a class="layui-btn layui-btn-xs" lay-event="detail">查看</a>
  <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
  
  <!-- 这里同样支持 laytpl 语法,如: -->
  {{#  if(d.auth > 2){ }}
    <a class="layui-btn layui-btn-xs" lay-event="check">审核</a>
  {{#  } }}
</script>

posted @ 2020-08-05 10:35 青蛙學堂 阅读(14) | 评论 (0)编辑 收藏

2020年7月28日

Lambda表达式


一、简介  
  Lambda表达式来源于数学家Alonzo Church等人在1920~1930期间发明的Lambad积分。Lambda积分是用于表示函数的一套系统,它使用希腊字母Lambda( λ )来表示无名函数。

  C# 3.0引入了Lambda表达式,它是一种简化的匿名函数,可用于创建委托或表达式目录树。你也可以将 Lambda 表达式作为参数进行传递,或者将它作用于函数调用值调用后返回的一个函数来使用。

 

二、基础
  它的语法形式是: 输入参数 => 表达式或语句块  即运算符的左边是输入参数(如果有),右边是表达式或语句块。 ( “ => ” 读作 “ goes to ” )

  

  2.1 表达式Lambda
        表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。 表达式 Lambda 会返回表达式的结果,并采用以下基本形式:

    (input parameters) => expression

delegate int myDel(int x,int y);    //声明委托

class Program
    {
        static void Main(string[] args)
        {
            myDel del = (x,y) =>  x+y;    //返回x+y的结果
       Console.WriteLine("values {0}",del(5,8)); //输出13        Console.ReadKey();      }   }


有关Lambda表达式的参数列表要点如下:

♥ Lambda表达式参数列表中的参数必须在参数数量、类型和位置上与委托相匹配

♥    表达式参数列表中的参数不一定需要包含类型(隐式类型),除非委托有ref或out参数----此时必须注明类型(显式类型)

♥    如果只有一个参数,并且是隐式类型的,周围的圆括号可以被省略,否则必须有括号

♥    如果没有参数,必须使用一组空的圆括号

2.2  语句Lambda
    当lambda表达式中,有多个语句时,写成如下形式:

    (input parameters) => {  statement; }

delegate int myDel(string str);

    class Program
    {
        static void Main(string[] args)
        {
            myDel del = (str) =>
            {
                Console.WriteLine("hello {0}",str);
                return 123;
            };
            Console.WriteLine("values {0}",del("world"));
            Console.ReadKey();
        }
    }

    在C#的语法中有一种比较特殊的写法,叫做Lambda表达式,这种表达式的写法在于你查询数据的时候直接是使用以下箭头的形式来表示查询语句的:=>。例如,我们要查找学生的List<Student>集合中班级编号为1001的所有学生数据,我们即可用Studentlist.Where(t=>t.ClassCode=‘1001’)语句来直接完成,无需再写繁琐的foreach语句或者for循环。Lambda表达式的运算符即为=>。

一、Lambda表达式定义

        Lambda表达式实际上是一种匿名函数,在Lambda表达式中可以包含语句以及运算等操作。并且可用于创建委托或表达式目录树类型,支持带有可绑定到委托或表达式树的输入参数的内联表达式。使用Lambda表达式可大大减少代码量,使得代码更加的优美、简洁,更有可观性。

 

二、Lambda表达式的表现形式

       表达式形式:(Input Param)=>Expression。在表达式左侧的表示输入参数,右侧的为相应的运算语句或者判断语句等,可包含函数调用等复杂方式。运算符=>读作为goes to,例如下面这个表达t=>t.ClassCode='1001',多做goes to ClassCode equal 1001。

       在上述的表达式中,仅仅只有当参数只有一个的时候,括号是可选择的,例如下面这种含有两个参数时候的情况应该是这样子的写法

1
(a,b)=>a==b

  当表达式中的多个参数编译器无法自动判断类型的时候,则需要显式指定类型。

1
(int firstIndex, string str) => str.IndexOf('Hello') > firstIndex

 (1)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储

1
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’);

 (2)查询班级编号为1001的班级下面的所有学生实体并返回到list1001中存储,并按照学生的出生日期从小到大排列。

1
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’).OrderBy(t=>t.BirthDay);

   在此说一下,OrderBy是从小到大排序,需要从大到小排列则用OrderByDescending。

 (3)查询班级编号为1001的班级下面的姓氏为【李】的同学的所有集合,并按照学生的出生日期从小到大排列。

1
var list1001=Studentlist.Where(t=>t.ClassCode==‘1001’&&t.StudentName.StartWith(“李”)).OrderBy(t=>t.BirthDay);

posted @ 2020-07-28 08:25 青蛙學堂 阅读(272) | 评论 (0)编辑 收藏

2020年7月27日

c# Mvc常用特性2


1.[Required] : 必须输入

[Required(ErrorMessage = "请输入用户名")]  
 

2.[StringLength] : 限制字符串长度

[StringLength(10, ErrorMessage = "长度不能超过10个字符")]  

3.[Range] : 限制取值范围

[Range(0, 120, ErrorMessage = "年龄范围在0到120岁之间")]  
 

4.[RegularExpression] : 必须符合某个正则表达式(1)直接使用RegularExpression来写表达式:

01.[RegularExpression(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$", ErrorMessage = "请输入Email格式")]  
02.public String RegualarExpressionField { getset; } 

posted @ 2020-07-27 13:49 青蛙學堂 阅读(11) | 评论 (0)编辑 收藏

仅列出标题  下一页
<2020年9月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

导航

统计

常用链接

留言簿(7)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜