一、Array内置对象
-
js中如何创建Array对象
(1). javascript:
1)数组对象中是可以添加任何类型元素
2)不存在角标越界,不断的可以给里面添加数据
(2). 初始化:1). 动态初始化 arrayObj = new Array() :不给定长度 arrayObj = new Array([size]):给定数组长度5 2). 静态初始化 arrayObj = new Array([element0[, element1[, ...[, elementN]]]])
(3).
方式1:创建Array对象 不给定长度 var arr = new Array() ; alert(arr.length) ; arr[0] = true ; arr[1] = 100 ; arr[2] = 3.14 ; arr[3] = "hello" ; arr[4] = 'a' ; arr[5] = new Object() ; alert(arr.length) ; 方式2:给定长度 var arr = new Array(3) ; alert(arr.length) ; arr[0] = 10 ; arr[1] = 20 ; arr[2] = 30 ; arr[3] = 40 ; alert(arr.length) ; 方式3:静态初始化 arrayObj = new Array([element0[, element1[, ...[, elementN]]]]) //简化格式 var arr = [10,20,30,40] ; for(var i = 0 ; i < arr.length ; i++){ alert(arr[i] ) ; }
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>内置对象Array</title>
<script>
//内置对象Array常用的功能
//join("连接符号"):将数组中的元素进行拼接----结果是一个String
//reverse():将数组的元素顺序反转
//创建数组对象
var arr = ["JavaEE","Php","Python","C","golang"] ;
document.write("反转前:") ;
for(var i = 0 ; i < arr.length ; i ++){
document.write(arr[i]+" ") ;
}
// var str = arr.join("-") ;
//document.write(str) ;
document.write("<hr/>") ;
//反转
arr = arr.reverse() ;
document.write("反转后:") ;
for(var i = 0 ; i < arr.length ; i ++){
document.write(arr[i]+" ") ;
}
//或者for-in for(var 变量名 in 对象){}
</script>
</head>
<body>
</body>
</html>
- 定义工具对象:ArrayTool
追加两个功能
getMax(arr):参数名为需要从指定的数组对象中获取最大值
search(arr,target):在指定的arr数组中查询指定的元素target,
查询这个元素在数组中出现索引值!
举例:
//定义一个对象
function ArrayTool(){
//追加功能
//求最大值
this.getMax=function(array){
//将第一个作为参照物
var max = array[0] ;
//遍历元素
for(var i = 1 ; i < array.length ; i ++){
if(array[i] > max){
max = array[i] ;
}
}
return max ;
}
//追加search:查询指定元素在指定数组中的角标
this.search = function(array,target){
//假设法
var index = -1 ;
//遍历array数组
for(var i = 0 ; i < array.length ; i++){
if(array[i] == target){
//查到了
index = i ;
break ;
}
}
return index ;
}
}
<!--
设计js对象:
定义工具对象:ArrayTool
追加两个功能
getMax(arr):参数名为需要从指定的数组对象中获取最大值
search(arr,target):在指定的arr数组中查询指定的元素target,
查询这个元素在数组中出现索引值!
当前这个页面导入js文件,进行测试
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--导入-->
<script src="ArrayTool.js"></script>
<script>
//创建数组对象
var arr = [24,69,57,88,15] ;
//创建ArrayTool对象
var at = new ArrayTool() ;
var max = at.getMax(arr) ;
document.write("最大值是:"+max) ;
document.write("<hr/>") ;
var index = at.search(arr,57);
document.write("角标是:"+index) ;
</script>
</head>
<body>
</body>
</html>
-
刚才自定义对象ArrayTool
给自定义对象中追加了两个方法
getMax(arr):参数名为需要从指定的数组对象中获取最大值
search(arr,target):在指定的arr数组中查询指定的元素target,
查询这个元素在数组中出现索引值!
现在不给自定义对追加方法,需要将两个方法追加:内置对象Array里面//Array---js提供的内置对象 方案1: function Array(){ this.join = function(){...}:将数组的元素进行拼接 this.reverse = function(){...}:将数组的元素逆序反转 错误的! this.max = function(){} this.search=fucntion(){} } 没有办法改变js的原码:Array内置对象 方式2: js引擎中: js中每一个内置对象都具备有原型属性:prototype 作用就是给内置对象中追加功能的! 特点: 只要你给原型属性中添加一个方法,它会自动将这个方法追加内置对象中 原理: //原型对象:Prototype function Prototype(){ this.max = function(){} } 数组对象 function Array(){ var proptype = new Prototype() ; //创建原型对象 this.max = function(){} //自动追加 } 书写格式 内置对象.prototype //直接方法即可
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>原型属性</title>
<script>
//给内置对象Array
//追加一个max方法
this.Array.prototype.max = function(){
var max = this[0] ;
//遍历元素
for(var i = 1 ; i < this.length ; i ++){
if(this[i] > max){
max = this[i] ;
}
}
return max ;
}
//追加查询方法
this.Array.prototype.search=function(target){
//假设法
var index = -1 ;
//遍历array数组
for(var i = 0 ; i < this.length ; i++){
if(this[i] == target){
//查到了
index = i ;
break ;
}
}
return index ;
}
// //创建数组对象
var arr = [24,69,57,88,15] ;
var max = arr.max() ;
document.write("最大值是:"+max) ;
document.write("<hr/>") ;
var index = arr.search(15) ;
document.write("角标是:"+index) ;
</script>
</head>
<body>
</body>
</html>
二、javascript的DOM操作
- 1). all属性:获取当前页面中的所有标签对象
var nodeList = document.all ;
2). links属性:获取的是当前页面所有的超链接标签对象(href属性)以及area域标签集合
var nodeList = document.links; //获取所有a标签对象
3). forms属性:获取的是当前页面中所有的form标签对象集合:返回节点列表
var nodeList = document.forms ;
4). images属性;获取所有的img标签对象
var nodeList = document.images ;
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>document集合属性</title>
</head>
<body>
<a href="#">超链接</a>
<form>
<img src="#" />
</form>
<a href="#">点我试试</a>
<img src="#" />
</body>
<script>
var nodeList = document.images ;
alert(nodeList.length) ;
//遍历出来
for(var i = 0 ; i < nodeList.length ; i ++){
//每一个标签对象(节点对象)都有一个属性:nodeName:节点名称
alert(nodeList[i].nodeName) ;
}
</script>
</html>
- parentNode:父节点
childNodes:子节点
firstChild:第一个子节点
lastChild:最后一个子节点
nextSibling:下一个兄弟节点
previousSibling:上一个兄弟节点
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body><a href="#">超链接</a><input type="button" value="按钮" /><!--html注释--><a href="#">链接</a><img src="#" />
<script>
//要获取第一个a节点标签对象
var aNode = document.links[0];
alert(aNode.nodeName) ;
//通过aNode获取它的父节点标签对象:
var bodyNode = aNode.parentNode;
alert(bodyNode.nodeName) ;
//通过bodyNode获取它的所有的子节点
/* var childNodes = bodyNode.childNodes;
for (var i=0; i <childNodes.length; i ++){
if(childNodes[i].nodeType ==1){
//指向获取标签对象?不需要#text(空格以及换行) #commont:html注释
//每一个标签对象有属性:nodeName节点名称
//nodeType:节点类型 :标签节点类型:1
document.write(childNodes[i].nodeName+"----"+childNodes[i].nodeType+" ") ;
}
}*/
//获取bodyNode节点的第一个标签对象
var firNode = bodyNode.firstChild;
alert(firNode.nodeName) ;
//lastChild:最后一个子节点
//firNode获取下一个兄弟节点
var nextNode = firNode.nextSibling;
alert(nextNode.nodeName) ;
//nextNode获取上一个兄弟节点
var previous = nextNode.previousSibling;
alert(previous.nodeName) ;
</script>
</body>
</html>
- 1)通过getElementById(“id属性值”) ; (推荐)
前提条件:同一个html标签上的id属性必须唯一,否则如果重名,获取不到标签对象!
2)通过getElementsByClassName(“同一类的class属性值”)
class属性值是可以重复,获取的是标签列表(节点列表)
3)通过getElementsByName(“同名的name属性值”) :获取的标签列表对象
4)通过标签名称获取标签对象:getElementsByTagName(“标签名称”):获取的标签列表对象
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>document对象的方法获取标签对象</title>
</head>
<body>
用户名:<input type="text" onblur="getUsername()" /><!--<input type="button" value="点击获取" />-->
<script>
//通过失去焦点事件:获取用户输入的内容
function getUsername(){
//通过id="username"获取标签对象
// var inputObj = document.getElementById("username");
//var inputObj = document.getElementsByClassName("username_class")[0] ;
// var inputObj = document.getElementsByName("uname")[0] ;
var inputObj = document.getElementsByTagName("input")[0] ;
//获取输入的内容:value属性获取
var username = inputObj.value;
alert(username) ;
}
</script>
</body>
</html>
三、js的事件编程: 了解事件编程三要素以及常用事件编程分类
- 事件编程三要素
1)事件源 :就是在哪个html标签上的触发的事件
2)编写事件监听器:编写一个函数,里面完成这个事件的业务逻辑
3)绑定事件监听器:在事件源上通过onxxx属性来和编写的函数进行绑定
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js事件编程</title>
</head>
<body>
<!--html标签:input 就是事件源-->
<input type="button" value="点我试试" onclick="myClick()" /> <!--绑定事件监听器-->
<script>
2)编写事件监听器
function myClick(){
alert("点你了...") ;
}
</script>
</body>
</html>
-
事件分类
1). 和鼠标点击相关的事件:
点击点击 click事件
双击点击 dbclick事件2). 和焦点相关的事件 获取焦点 focus 时期焦点 blur 3). 和选项卡发生变化的事件(当某个内部被改变的时候) change事件 4). 和鼠标移上和鼠标移出实际:mouseover mouseout 5). 页面载入事件:load 6). 按键按下:keydown 7). 给标签添加的事件属性onxxx onclick ondbclick onfocus onblur onchange onmouseover onmouseout onload onkeydown
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>事件分类</title>
<style>
#mydiv{
border:1px solid #000;
background-color: red;
width: 150px;
height: 150px;
}
</style>
<script>
/* function testClick(){
alert("单击点击事件触发") ;
}
*/
function testDbClick(){
alert("触发双击点击事件") ;
}
function testFocus(){
//获取id="username"所在的标签对象
var inputObj = document.getElementById("username");
//将它的value属性清空掉
inputObj.value = "" ;
}
function testBlur(){
//获取用户输入的内容
var username = document.getElementById("username").value ;
alert(username) ;
}
function testChange() {
//通过id="jigugan"获取select标签对象
//当选项内容变化了就会触发change事件
var selectObj = document.getElementById("jiguan");
//alert(selectObj.value) ;
//获取选择选项的内容
var jiguan = selectObj.value ;
//选项变化之前:获取id="city"所在的select标签对象
var selectCity = document.getElementById("city") ;
//选项发生变化之前:将之前的内容清空掉
selectCity.innerHTML = "" ;
if(jiguan =="陕西省"){
//创建一个数组
var arr = ["西安市","咸阳市","宝鸡市","渭南市"] ;
//遍历数组获取到每一个
for(var i = 0 ; i < arr.length ; i ++){
//<option value="城市">城市</option>
//设置selectCity标签对象的innerHTML属性
selectCity.innerHTML += "<option value='"+arr[i]+"'>"+arr[i]+"</option>" ;
}
}
if(jiguan =="山西省"){
//创建一个数组
var arr = ["太原市","晋中市","运城市","大同市"] ;
//遍历数组获取到每一个
for(var i = 0 ; i < arr.length ; i ++){
//<option value="城市">城市</option>
//设置selectCity标签对象的innerHTML属性
selectCity.innerHTML += "<option value='"+arr[i]+"'>"+arr[i]+"</option>" ;
}
}
if(jiguan =="广东省"){
//创建一个数组
var arr = ["深圳市","东莞市","惠州市","广州市"] ;
//遍历数组获取到每一个
for(var i = 0 ; i < arr.length ; i ++){
//<option value="城市">城市</option>
//设置selectCity标签对象的innerHTML属性
selectCity.innerHTML += "<option value='"+arr[i]+"'>"+arr[i]+"</option>" ;
}
}
}
function testMouseOver() {
alert("mousrvoer事件触发了") ;
}
function testMouseOut() {
alert("mouserOut事件触发了") ;
}
function testLoad() {
alert("触发页面载入事件") ;
//获取id="myClick"的标签对象
//给对象添加点击事件
var inputObj = document.getElementById("myClick");
//设置一个属性:onclick
inputObj.onclick = function(){ //匿名函数
alert("触发点击事件") ;
}
// inputObj.click() ;*/
//类型 监听器
// inputObj.addEventListener("click","函数名称")
}
</script>
</head>
<!--load事件:一般用在body中
将body内容加载完毕之后,触发这个事件
-->
<body onload="testLoad()">
<input type="button" value="单击点击" id="myClick" /><br/>
<input type="button" value="双击点击" ondblclick="testDbClick()" /><br/>
<!--获取焦点-->
<!--失去焦点-->
用户名:<input type="text" id="username" onblur="testBlur()" value="请输入用户名" onfocus="testFocus()" />
<br/>
籍贯
<select id="jiguan" onchange="testChange()">
<option value="请选择">请选择</option>
<option value="陕西省" selected>陕西省</option>
<option value="山西省">山西省</option>
<option value="广东省">广东省</option>
</select>
<select id="city">
<!---->
</select>
<br/>
<!--鼠标移出和鼠标经过事件-->
<div id="mydiv" onmouseover="testMouseOver()" onmouseout="testMouseOut()">
</div>
</body>
</html>
- 正则规则:
用户:8-14位的数字或者字母组成
密码:6-10位的数字或者字母组成
确认密码:和密码一致
邮箱:符号邮箱
919081924@qq.com
zhangsan@163.com
lisi@hsbc.com.cn(.net)…企业邮箱 .符号出现多次的
submit事件:表单是否能够提交成功
返回值true,提交成功
否则,提交失败
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="js/jquery-1.11.3.min.js"></script>
</head>
<body>
<!--checked:选中状态-->
<!--<input type="checkbox" name="del" value="足球" checked="checked" />足球-->
<form action="servet.html" method="get" onsubmit="return checkAll() ">
用户  名:<input type="text" onblur="checkUserName()" value="杨德财" id="username" /><span id="user_Tip"></span><br/>
密    码<input type="password" onblur="checkPassword()" id="password" /><span id="pwd_tip"></span><br/>
确认密码:<input type="password" id="repassword" onblur="checkRePassword()" /><span id="repwd_tip"></span><br/>
邮   箱<input type="text" onblur="checkEmail()" id="email" /><span id="email_tip"></span><br/>
<input type="submit" value="注册" />
<input type="reset" value="重置" />
<input type="button" value="返回" />
</form>
</body>
<script>
//页面载入事件
/*$(function(){
//获取用户名的内容:
var username = $("#username").val(); //相等获取到id="username"所在的标签对象 document.getElementById("username")alert(username) ;
alert(username) ;
});*/
//校验用户名
function checkUserName(){
//获取用户输入的内容
var username = document.getElementById("username").value;
//定义正则规则
// 用户:8-14位的数字或者字母组成
var reg = /^[A-Za-z0-9_]{8,14}$/ ;
//获取id="user_Tip"的span标签对象
var userTip = document.getElementById("user_Tip") ;
//校验
if(reg.test(username)){
//一致
//设置span标签对象的innerHTML属性
userTip.innerHTML = "<strong>恭喜您,用户名可用</strong>".fontcolor("green") ;
return true ;
}else{
userTip.innerHTML = "<strong>用户名太受欢迎了,请更换</strong>".fontcolor("deepinred") ;
return false ;
}
}
//密码
function checkPassword(){
//获取的内容
var password = document.getElementById("password").value;
//定义正则规则
// 密码:6-10位的数字或者字母组成
var reg = /^[A-Za-z0-9_]{6,10}$/ ;
//获取id="pwd_tip"的span标签对象
var pwdTip = document.getElementById("pwd_tip") ;
//校验
if(reg.test(password)){
//一致
//设置span标签对象的innerHTML属性
pwdTip.innerHTML = "<strong>恭喜您,密码可用</strong>".fontcolor("green") ;
return true ;
}else{
pwdTip.innerHTML = "<strong>对不起,不符合规则重写输入</strong>".fontcolor("deepinred") ;
return false ;
}
}
//确认密码和密码内容一致
function checkRePassword(){
//获取的内容
var password = document.getElementById("password").value;
//获取现在输入的密码
var repassword = document.getElementById("repassword").value;
//获取id="repwd_tip"的span标签对象
var repwdTip = document.getElementById("repwd_tip") ;
//校验
if(password.valueOf()==repassword.valueOf()){
//一致
//设置span标签对象的innerHTML属性
repwdTip.innerHTML = "<strong>密码一致</strong>".fontcolor("green") ;
return true ;
}else{
repwdTip.innerHTML = "<strong>两次密码不一致</strong>".fontcolor("deepinred") ;
return false ;
}
}
function checkEmail(){
//获取邮箱内容
var email = document.getElementById("email").value ;
//获取id="email_tip"的标签对象
var emailTip = document.getElementById("email_tip");
//正则规则:
//数字或者字母@数字或者字母.com.cn(.net)...
var reg = /^[A-Za-z0-9_]+@[A-Za-z0-9_]+(\.[A-Za-z]{2,3}){1,2}$/;
//校验
if(reg.test(email)){
//一致
emailTip.innerHTML = "<strong>邮箱可用</strong>".fontcolor("green") ;
return true ;
}else{
emailTip.innerHTML = "<strong>邮箱不可用</strong>".fontcolor("red") ;
return false ;
}
}
//每一个表单项必须通过正则验证,才能提交,否则不能提交!
function checkAll() {
if(checkUserName() && checkPassword() && checkRePassword() && checkEmail()){
return true ;
}else{
return false ;
}
}
</script>
</html>
四、js的正则表达式以及原生js表单校验
-
Js的正则表达式:描述字符的文字模式;
* \ 任意字符进行转移 \n \r -
语法:
基本正则语法:
1). 匹配的数字字符[0-9] \d
2). 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’ \w
3). 邮箱中.符号:需要.转义
数量词:
X+: 匹配X字符出现一次或者多次
X*:匹配X字符出现0次或者多次
X?:匹配X字符出现0次或者1次
基本邮箱:
[A-Za-z0-9_]+@[A-Za-z0-9_]+.([a-z]{1,2}) -
范围:
X{n}:匹配的X字符恰好出现n次
X{n,}:匹配的X字符至少出现n次
X{n,m}:匹配的X字符至少出现n次,但是不超过m次 -
定义正则表达式:
var 正则对象 = /正则语法/ ;
正则对象 内置的方法test(传入字符串内容) 返回值true:校验通过;false 匹配失败
var 正则对象 = /正则语法/ ; 属于不精确匹配,主要用户输入的内容被正则语法包含在内
就匹配成功! -
为了像Java语言的这种精确匹配,必须加入边界匹配符号!
^:行的开头 以指定的xxx开头
$:行的结尾 以指定的xxx结尾
举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js正则表达式</title>
<script>
var str = "abc12mn" ; //数字字符串
//定义一个正则表达式
var reg = /^[0-9]{2}$/ ;
if(reg.test(str)){
alert("条件成立") ;
}else{
alert("条件不成立") ;
}
</script>
</head>
<body>
</body>
</html>
五、项目中:修改和删除操作
- Maven项目导包:
在这里插入代码片
<!--导入依赖的jar包-->
<dependencies>
<!--alt+ins键-->
<!--mysql驱动包-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
<!--druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--dbutils工具类-->
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
<version>1.6</version>
</dependency>
<!--
最终导入的servlet-api.jar
jsp-api.jar
仅仅作为 "提供者使用"
以后maven项目通过tomcat部署
tomcat本身里面lib
servlet-api.jar
jsp-api.jar
-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<!--
依赖范围:仅仅作为编译前 提供给当前项目,这个jar包不参与部署,
因为tomcat本身内置的有jar包
scope: 大部分的jar包 默认值:compile 编译时使用
servler和jsp 依赖范围:provided
junit的jar包 仅仅是测试环境使用 依赖范围:test
-->
<scope>provided</scope>
</dependency>
<!--jsp的jar包-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<!--junit单元测试的jar包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.1</version>
<!--依赖范围:测试环境使用-->
<scope>test</scope>
</dependency>
<!--jsp的核心标签库-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--标准库包-->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<!--beanutils工具类-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
</dependency>
</dependencies>
</project>
2. 连接池配置文件:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/myee_2104
username=root
password=123456
initialSize=5
maxActive=10
maxWait=3000
3. servlet:
import com.qf.convert.MyConvert;
import com.qf.entity.User;
import com.qf.service.AdminService;
import com.qf.service.impl.AdminServiceImpl;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConvertUtils;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;
import java.util.Map;
@WebServlet("/updateUser")
public class UpdateUserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//接收前台的所有提交的参数
Map<String, String[]> map = request.getParameterMap();
//封装User对象
User user = new User() ;
//String birthday = request.getParameter("birthday");
//日期处理:Beanutils的日期转换器
//ConvertUtils:自带的转换工具类
/*
* public static void register(Converter converter, Class clazz) {
* //参数1:转换器:MyConvert
* 参数2:转换的最终类型:Date类型
* */
ConvertUtils.register(new MyConvert(), Date.class); ;
//提供apache工具:beanutils工具库
try {
BeanUtils.populate(user,map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
System.out.println(user);
//调用service
AdminService adminService = new AdminServiceImpl() ;
adminService.update(user);
//请求转发到
request.getRequestDispatcher("/ulist").forward(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
4. 自定义类实现接口Convert接口(BeanUtils)
重写convert方法
日期转换
import org.apache.commons.beanutils.Converter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MyConvert implements Converter {
@Override
public Object convert(Class clazz, Object source) {
//将String的日期文本转换成Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd") ;
try {
Date date = sdf.parse((String) source);
return date ;
} catch (ParseException e) {
e.printStackTrace();
}
return null;
}
}
5. service:
import com.qf.entity.User;
import java.util.List;
/* 针对管理员操作业务接口层
*/
public interface AdminService {
//定义功能
//根据用户名查询用户
boolean isLogin(String username, String password) ;
/**
* 查询用户列表
* @return
*/
List<User> findUserList() ;
/**
* 通过用户id获取用户
* @param uid
* @return
*/
User getUser(String uid) ;
/**
* 更新用户
* @param user
*/
void update(User user) ;
}
接口子实现类
import com.qf.dao.AdminDao;
import com.qf.dao.impl.AdminDaoImpl;
import com.qf.entity.AdminUser;
import com.qf.entity.User;
import com.qf.service.AdminService;
import java.util.List;
/* 针对管理员用户业务接口实现层
*/
public class AdminServiceImpl implements AdminService {
@Override
public boolean isLogin(String username,String password) {
//调用dao层:完成数据的查询
AdminDao ad = new AdminDaoImpl() ;
AdminUser adminUser = ad.selectUserByName(username);
//逻辑判断
//获取查询到的用户的密码
if(adminUser.getAdminPassword().equals(password)){
//一致
return true ;
}
return false ;
}
/**
* 查询用户列表
* @return
*/
@Override
public List<User> findUserList() {
//调用AdminDao
AdminDao ad = new AdminDaoImpl() ;
List<User> list = ad.selectAllUser();
//可以加入逻辑:防止NullPointerException
if(list!=null){
return list ;
}
return null ;
}
/**
* 通过用户id获取用户
* @param uid 用户的uid
* @return 返回需要查询的用户
*/
@Override
public User getUser(String uid) {
//创建Dao层对象
AdminDao adminDao = new AdminDaoImpl() ;
User user = adminDao.selectUserByUid(uid);
if(user!=null){
return user ;
}
return null;
}
//更新用户
@Override
public void update(User user) {
//调用Dao
AdminDao adminDao = new AdminDaoImpl() ;
adminDao.updateCostmUser(user) ;
}
}
6. import com.qf.entity.AdminUser;
import com.qf.entity.User;
import java.util.List;
/* 针对管理员操作的数据库访问接口层
*/
public interface AdminDao {
//根据用户名查询用户
AdminUser selectUserByName(String username) ;
/*
* 查询用户列表
* */
List<User> selectAllUser() ;
//查询用户
User selectUserByUid(String uid);
//更新用户
int updateCostmUser(User user);
}
import com.qf.dao.AdminDao;
import com.qf.entity.AdminUser;
import com.qf.entity.User;
import com.qf.utils.MyJdbcUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
/* 针对管理用户的数据库访问接口实现层
*/
public class AdminDaoImpl implements AdminDao {
/**
* 根据用户名查询用户
* @param username
* @return
*/
@Override
public AdminUser selectUserByName(String username){
//common-dbutils工具类
//创建QueryRunner对象
try {
QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
//准备sql
String sql = "select * from admin_user where adminName= ? " ;
//执行查询
AdminUser adminUser = qr.query(sql, new BeanHandler<AdminUser>(AdminUser.class), username);
System.out.println(adminUser);
return adminUser;
} catch (SQLException e) {
e.printStackTrace();
}
return null ;
}
/**
* 查询用户列表
* @return
*/
@Override
public List<User> selectAllUser() {
//创建QueryRunner
try {
QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
//准备sql
String sql = "select * from user" ; //开发中*(不要出现,全表字段)
List<User> list = qr.query(sql, new BeanListHandler<User>(User.class));
return list ;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//根据uid查询用户
@Override
public User selectUserByUid(String uid) {
try {
QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
String sql = "select * from user where uid = ?" ;
User user = qr.query(sql, new BeanHandler<User>(User.class), uid);
return user ;
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//更新用户
@Override
public int updateCostmUser(User user) {
QueryRunner qr = new QueryRunner(MyJdbcUtils.getDataSource()) ;
String sql = "update user set username = ?,password = ?, name = ? ,sex=?,state=? where uid = ? " ;
try {
int count = qr.update(sql, user.getUsername(), user.getPassword(), user.getName(), user.getSex(), user.getState(), user.getUid());
System.out.println(count);
return count ;
} catch (SQLException e) {
e.printStackTrace();
}
return 0 ;
}
}