实训
从客户需求出发,对客户需求进行开发
Java基础
技巧与资源总结
alt + /
集合
实质就是通过ArrayList对其进行增删改查
ArrayList list = new ArrayList<>()
for(String s:list){}
面向对象
继承
多态
方法:表明类的作用
行为: 动作
事件
- java 反射
1.获取类描述类
Class<?> cls = Class.forName(“text_1.text”);
Class<?> cls = Class.forName(“text_1.text”);//字符串,通过文件进行更改
Class<?>cls_1 = text.class;
Class<?> cls_2 = t.getClass();
2.创建对象
Constructor<?>constructor = cls.getDeclaredConstructor(int.class);//获取构造方法数组
constructor.setAccessible(true);//忽略权限检验
object = constructor.newInstance(300);
Object object = cls.newInstance();
3.处理属性
Field f = cls.getField(“sum”);
f.getType();
f.set(object, 200);//o为对象实例
4.执行方法
Method method = cls.getMethod(“add”);
method.invoke(object);
执行过程都是获取对象然后执行
数据库
id
状态列
外键列
SQL语句
- 添加一行记录
insert into 表名(若干列…)values(值…) 列省略问题(自动编号,省略有默认值,可为空的) - 单表删除
delete from 表明 [where 简单条件]
子查询方式进行解决 - 更改
update 表名 set 列=值,…[where 简单条件],不加where的话,会直接更改整个表 - 选择
select [distinct] [when判断,聚合函数,*,列, 别名,…]from 表名 别名[逻辑视图,…][inner[left,right] join 表名 on 关系条件] [where 多表条件,子查询][group by 表名][having聚合条件][order by 表别名][limit 5,10]
例子:
班级(名称) 学生(性别,姓名,年龄) 专业(名称)
把一班中性别为王的男生罗列出来
把专业A中的女同学最多的班级列出来
把专业二同性别且同名的人罗列出来
select class.* from (slect count(1),class.id from user inner join class on class.id =user,classid where sex =1 group by class.id)
select count(1),classid from user group by user.classid;分组-语句错误
select count(1),classid from user group by user.classid
insert into
select count(1).classid from user where sex=1 group by classid
select * from class,(select count(1) count ,calssid from user where sex=1 group by classid order by count desc limit 1) a where class.id=a.classid
JAVA EE环境
- tomcat web服务器,应用容器
应用容器
- jdk
JAVA EE和 JAVA SE - eclipse的配置
设置server 菜单windows/proance/server/runtime/join tomcat
发布路径 view/server 创建发布,自动添加server项目
创建webproject
JAVAEE错误原因
启动页面中有界面编译失败
多个tomcat对应一个8080端口
端口冲突
html,xml伪标准
<html>
<head> 存放的是非显示的那一部分,类似于加载头文件
<body>逐行显示
<a>
从左向右排列的标签 行内元素
自动换行的叫做 块元素
录入部件特征:都有内部属性 如input
javascript最基本的作用是交互
BOM称之为浏览器对象模板,获取值,获取属性
DOM称之为文档对象模板
action 目标处理程序 method请求方法主要有两种 get和post
get请求速度比较块 但是get不是无限大的,表现形式受限(数字和图片)
只是要是form表单进行处理一律使用post请求
<div>面板 批量布局 块状元素
<span> 行内元素
<ul> 控制标签
<li>
<tr>列
<td>行
CSS
用法 | 作用 |
---|---|
行内用法 | 专门 |
业内使用 | 页面特例 |
页外定义 | 创建CSS文件,html中引用 |
2.选择器:选择部分标签设置CSS
选择器分类 | 格式 | 样例 |
---|---|---|
标签选择器 | a{} | <a> |
id选择器 | #aaa{} | <a id=“aaaa”> |
类选择器 | .font{color:red;} | <a class=“fort back font”> |
属性选择器 | [aa=“11”]{} | |
或关系 | diva,a,.aaaa} |
BOX+定位
库模型概述
元素 | 作用 |
---|---|
border | 边框 |
margin | 外边框 |
padding | 内边框 |
element | 元素 |
left light top bottom position
position:fixed:超级定位
相对定位 relative
绝对定位 absolutee相对定位|自身标签未定位前的位置
状态号
状态号 | 含义 |
---|---|
200 | 从网络上获得的信息,网络成功 |
304 | 从浏览器缓存中获取 |
404 | 目标地址错误 |
406 | 中途转移导致中断 |
500 | 服务端错误(JAVA异常) |
JAVA EE
前端发出请求
由web服务接受
选择相应的应用进行处理
具体应用部件---->根据具体的处理请求得到
浏览器接收回应内容 静态脚本
1.前端发出请求
url 重定向请求:url修改回车。<a>点击,location,href属性 GET
form 表单请求,type=“summit” submit() GET POST
ajax请求 : js jquery GET POST
2.web服务接受(tomcat,端口监听,应用容器,http数据解析)
3.应用程序(网站),根据url找到目标处理代码
4.通过请求信息,处理业务,回应结果
回应方式:
1.直接写入回映对象
response.setContentType(“html/text;charset=utf-8”);
response.getWriter().write(“sssss”);
2.地址转发,url重定向
response.sendRedirect(“index.jsp”);
3.请求重定向
request.setAttribute(“info”, new String[] {“AAA”,“BBB”});//定义局部全局变量
request.getRequestDispatcher(“index.jsp”).forward(request,response);
4.写入回应(json),ajax处理
5.浏览器收到结果解析结果
服务器变量:
request,session,application
MVC开发模式
M 业务模板
V 视图
jsp 已经淘汰了
JSTL+EL表达式
freemark渲染引擎
ajax js渲染
C 控制器
jstl:java通用标签库
1.导入jar包
SSM
SSM = spring+springMVC+mybatish
spring:脚手架
springMVC:转发,接收再转发 前端发请求,后台收请求,在业务模板通过mybatish,查询对象,通过视图获取其,自动加入
mybatish:对象关系映射
JDBC:游标方式读取,将查询结果自动转换为结果对象
web.xml:服务启动开始文件,设置应用中的一些文件,TOMCAT是应用容器,应用容器中会创建一些对象容器。
这个文件的主要作用是构建容器
bean
javabean,由javaee进行构建
springbean,由spring进行构建
关于applicationcontext.xml文件的部分
根据视图自动加入.jsp
编程的方法是靠动手而不是记忆。
数据库链接
1.xml导入
2.创建数据库
3.创建pojo对象(entity,pojo,model)
名称+属性+getters,setters
4.创建dao包,dao接口
public interface UserDao {
@Select("select * from user")
public List<User> select() ;
}
5.使用dao包
6.扫描dao包,根据接口创建类
dao定义
XML设置模式
注解模式
ORM
注解为对象
SSM工程基本配置过程
- 导入基本的工程项目(本文所有的资源均已经上传github)
- 安装数据库,数据库要求版本是5.0版本,对于8.0系列由于接口配置,导致项目工程中的部分代码需要更改。因此尽管加入jar包但是仍然会导致mysql的链接失败,之后闲下来在配置一些吧
- 创建com.situ.entity包,创建user.java包
- user.java解释:
- <context:component-scan base-package=“com.situ.cotroller”></context:component-scan>
<context:component-scan base-package=“com.situ.dao”></context:component-scan>
自动扫描dao包,交dao包加入容器,数据库操作的相关内容 - dao的处理
- dao的创建 。创建com.situ.dao,userdao.java内容展示
package com.situ.dao;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import com.situ.entity.User;
@Repository
public interface
{
@Select("select * from user")//修饰器表明所有的select语句选择所有的from
public List<User> select();
//获取一个user对象列表
@Select("select * from user where id =#{id}")
public User getById(int id);
//从user库中选择以id选择具体的某一条数据
@Delete("delete from user where id=#{id}")
public void delete(int id);//只认一个参数,多个参数时创建对象,只针对基本类型
//重点是一定要另id=#{id}其中记得加{},这个SQL语句代表删除以id位索引的表号
@Insert("insert into user (name) values(#{name})")
public void insert(User u);
@Insert("update user set name=#{name} where id=#{id}")//
public void update(User u);
}
以上文件属于开发之前就开始写的,userdao.java是一个接口,提前规划中写好的。
- 控制器开发 usercontroller.java文件
转发路由,得到url请求,根据Url请求转发到相关的具体控制器里面去。
package com.situ.cotroller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import com.situ.dao.UserDao;
import com.situ.entity.User;
@Controller
public class UserController {
@Autowired
UserDao dao;
//定义了一个dao对象,自动注入,找一找有没有这种语句,必须自造容器中获取
@RequestMapping("index")
public String index(ModelMap m) {
m.put("list", dao.select());
return "index";
}
@RequestMapping("delete")
public String delete(int id,ModelMap m) {
dao.delete(id);
return index(m);
}
@RequestMapping("insert")
public String insert(User u,ModelMap m) {//string name= User u
dao.insert(u);
return index(m);
}
@RequestMapping("update")
public String update(User u,ModelMap m) {//string name= User u
dao.update(u);
return index(m);
}
@RequestMapping("edit")
public String edit(int id,ModelMap m) {//string name= User u
m.put("info", dao.getById(id));
return "edit";
}
}
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" isELIgnored="false"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
<script type="text/javascript">
function del(id){
if(confirm("是否删除?"))
{
location.href="delete?id="+id;
}
}
</script>
</head>
<body>
<button onclick="location.href='edit.jsp'">新增</button>
<table>
<tr><td>名称</td></td>性别</td></td>classid</td><td>操作</td><td></tr>
<c:forEach items="${list}" var="r">
<tr><td>${r.name}</td><td>${r.sexname}</td><td>${r.classid}</td>
<td>
<a href="delete?id=${r.id}">删除</a>
<a href="javascript:del(${r.id})">删除_1</a>
<a href="edit?id=${r.id}">修改</a>
</td></tr>
</c:forEach>
</table>
</body>
</html>
增删按查
这个可以说是在做一个网页功能的最基础的部分了,这一部分并不是很难,但是比较繁琐,总体上来说就看你是否真正的理解了MVC的开发模式,以及他们之间如何相互配合,才能对数据库进行增删改查,首先,在我们新建一个maven工程,里面有个文件叫做
applicationContext.xml和applicationContext-dao.xml这两个文件中分别代表当前文件工程所依赖的包环境,会自动去下载,其次对于applicationContext.xml文件来说,则代表一些处理的操作,和包的自动扫描等相关功能。
因此当我们进行增删改查以及进行JAVAee的开发之前,我们应该首先对这两个文件保证绝对的正确。
当我们完成以上操作之后,我们需要对db.properties文件做出相应的配置,值得一提的是,mysql5和mysql8版本对应的无论是相关的依赖包环境还是具体获得索引的方式都发生了比较大的变更,因此,对于普通开发人员,建议优先使用mysql5的相关环境,原因,简单。
这里补充一个小知识点,在一台电脑上是可以同时安装多个数据库软件的,只要给出不同的端口号就行,是的端口号的一个比较重要的作用就是区分不同的服务,因此,只要是不同功能数据库对应的端口号不同,我们就可以让多个数据库并发运行。
完成以上操作之后,我们建议非常快速的方式完成增删改查。
增
关于增加的方式,我们首先需要有一个edit.jsp界面,如上文所示。
接下来大家需要深刻理解明白
user.class usercontroller.class 以及userDao.class之间的关系