首页 > 代码库 > 第七周

第七周

本周学习了一些新的知识,比如三单架构,sql的注入,jdbc,sql的内外连接

首先什么是三层架构

三层架构即:表现层、业务层、持久层。每一层完成即定的功能,层与层之间用接口做耦合。每一层的组件可以单独测试,当其中一个组件更换或修改后,不会影响别的层的组件。

持久层:用于完成数据库相关的操作。采用DAO模式,创建实体类和数据库表做映射,也就是哪个类对应哪个表,哪个属性对应哪个列。而持久层的目的就是完成对象数据和关系数据的转换。

业务层:用于业务处理。采用事务脚本模式。将一次请求中所有的业务封装成一个方法,保证方法中所有的数据库更新操作同时成功,同时失败。不允许部分成功,部分失败,这样引起数据混乱的情况发生。

表现层:采用MVC模式。M表示模型,就是实体类,用于数据的封装和数据的传输。V表示视图,用于展示数据和接收数据。C表示控制,用于调用业务组件,完成业务流程的控制。

 

2,什么是JDBC

 

   JDBCJAVA连接数据库的一套规范。该规范定义了一系列的接口,由数据库厂商实现,由用户根据接口调用。用户根据接口方法就可以屏蔽不同数据库的差异,无论连接什么数据库都是一套API

 

3,如何删除主表记录?

由于有外键约束存在,如果主表记录有从表记录进行引用,那么无法删除主表记录。

删除主表记录有两种方式:

。级联删除,先删除主表记录对应的所有从表记录,然后再删除主表记录。

外键置空,先将主表记录对应的所有从表记录外键设置为null,然后再删除主表记录。

 

描述SQL查询语句执行顺序

 

第一步:执行FROM

 

第二步:WHERE条件过滤

 

第三步:GROUP BY分组

 

第四步:执行SELECT投影列

 

第五步:HAVING条件过滤

 

第六步:执行ORDER BY 排序

 

 

数据库完整性有哪些?

 

  实体完整性:每条记录都要有所区别,不能存在一模一样的记录。通过主键和唯一约束实现

 

  域完整性:保证每一列的值是有效的。通过默认约束、非空约束和检查约束实现

 

  引用完整性:保证从表的外键必须引用主表的主键。通过外键约束实现

 

  用户自定义完整性:用户自定义的规则

部分代码

 

package com.lovo.netCRM.employee.frame;

 

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

 

import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

 

import com.lovo.netCRM.component.LovoButton;
import com.lovo.netCRM.component.LovoComboBox;
import com.lovo.netCRM.component.LovoDate;
import com.lovo.netCRM.component.LovoFileChooser;
import com.lovo.netCRM.component.LovoRadioButton;
import com.lovo.netCRM.component.LovoTable;
import com.lovo.netCRM.component.LovoTxt;
import com.project.bean.DepartmentBean;
import com.project.bean.EmployeeBean;
import com.project.bean.PositionBean;
import com.project.service.IDepartmentService;
import com.project.service.IEmployeeService;
import com.project.service.IPositionService;
import com.project.service.impl.DepartmentServiceImpl;
import com.project.service.impl.EmployeeServiceImpl;
import com.project.service.impl.PositionServiceImpl;
/**
*
* 四川网脉CRM系统
* @author 张成峰
* @version 1.0
* @see
* @description 添加员工对话框
* 开发日期:2012-10-6
*/
public class EmployeeAddDialog extends JDialog{

 

/**姓名文本框*/
private LovoTxt nameTxt = new LovoTxt("姓 名",40,50,this);
/**性别单选钮*/
private LovoRadioButton sexTxt = new LovoRadioButton("性 别",new String[]{"男","女"},320,50,this);
/**登陆名文本框*/
private LovoTxt loginNameTxt = new LovoTxt("登陆名",40,100,this);
/**出生年月*/
private LovoDate birthdayTxt = new LovoDate("出生年月",40,150,this);
/**文化程度*/
private LovoComboBox<String> eduTxt = new LovoComboBox<String>("文化程度",new String[]{"高中","大专","本科","硕士"},320,100,this);
/**所属专业文本框*/
private LovoTxt specialityTxt = new LovoTxt("所属专业",40,200,this);
/**联系方式文本框*/
private LovoTxt phoneTxt = new LovoTxt("联系方式",320,150,this);
/**家庭住址文本框*/
private LovoTxt addressTxt = new LovoTxt("家庭住址",40,250,this);
/**政治面貌*/
private LovoComboBox<String> polityFaceTxt = new LovoComboBox<String>("政治面貌",new String[]{"团员","党员","民主党派","无党派人士"},320,200,this);
/**所在部门*/
private LovoComboBox deptTxt;
/**工作职位*/
private LovoComboBox jobTxt;
/**头像*/
private LovoFileChooser faceTxt = new LovoFileChooser(this,"face");
/**员工主面板*/
private EmployeePanel emPanel;

public EmployeeAddDialog(JFrame jf,EmployeePanel emPanel){
super(jf,true);
this.emPanel = emPanel;
this.setLayout(null);
this.setTitle("添加新员工");

this.init();

this.setBounds(300, 100, 700, 450);
this.setVisible(true);
}
/**
* 初始化
*
*/
private void init(){
this.initComboBox();

faceTxt.setBounds(580, 70, 100, 150);

LovoButton lbadd = new LovoButton("添加",150,360,this);
lbadd.addActionListener(new ActionListener(){

 

public void actionPerformed(ActionEvent e) {
boolean isOk = addEmployee();
if(isOk){
EmployeeAddDialog.this.dispose();
}
}});

LovoButton lbcancel = new LovoButton("取消",400,360,this);
lbcancel.addActionListener(new ActionListener(){

 

public void actionPerformed(ActionEvent e) {
EmployeeAddDialog.this.dispose();
}});
}

//--------------------------------------------
private IDepartmentService deptService=new DepartmentServiceImpl();

private IPositionService posService=new PositionServiceImpl();

private IEmployeeService emService=new EmployeeServiceImpl();
/**
* 初始化部门和职位下拉框
*
*/
private void initComboBox(){
//添加部门List集合
List<DepartmentBean> deptList=deptService.findAll();
this.deptTxt = new LovoComboBox("所属部门",deptList,40,300,this);
//添加职位List集合
List<PositionBean> posList=posService.findAll();
this.jobTxt = new LovoComboBox("工作职位",posList,320,250,this);

}
/**
* 添加操作
*
*/
private boolean addEmployee(){
String str = "";
//验证数据
if(!this.nameTxt.getText().matches("[a-zA-Z\\u4e00-\\u9fa5]{2,20}")){
str += "姓名必须为二位以上字母或汉字\n";
}
if(!this.loginNameTxt.getText().matches("[a-zA-Z\\u4e00-\\u9fa5]{2,20}"))
{
str += "用户名必须为二位以上字母或汉字\n";
}
if(!this.specialityTxt.getText().matches("[a-zA-Z\\u4e00-\\u9fa5]{2,20}"))
{
str+="所属专业必须为二位以上字母或汉字\n";
}
if(!this.addressTxt.getText().matches("[a-zA-Z\\u4e00-\\u9fa5]{2,20}"))
{
str+="家庭住址必须为二位以上字母或汉字\n";
}
if(!this.phoneTxt.getText().matches("1[3,5,7,8]\\d{9}"))
{
str+="联系方式为13、15、17、19开头的十一位电话";
}
if(!this.birthdayTxt.getText().matches("\\d{4}-\\d{2}-\\d{2}"))
{
str+="生日时间格式为XXXX-XX-XX";
}
//……
if(str.length() != 0){
JOptionPane.showMessageDialog(null, str);
return false;
}
EmployeeBean emBean=new EmployeeBean();
//封装实体
emBean.setEmName(nameTxt.getText());
emBean.setEmAccord(loginNameTxt.getText());
emBean.setEmSpecialty(specialityTxt.getText());
emBean.setEmPhone(phoneTxt.getText());
emBean.setEmAddress(addressTxt.getText());
emBean.setEmSex(sexTxt.getItem());
emBean.setEmGrade(eduTxt.getItem());
emBean.setEmPolitical(polityFaceTxt.getItem());
emBean.setEmBrithday(Date.valueOf(birthdayTxt.getText()));

DepartmentBean deptBean=(DepartmentBean) this.deptTxt.getItem();
emBean.setDeptId(deptBean.getDeptId());
PositionBean posBean=(PositionBean) this.jobTxt.getItem();
emBean.setPosId(posBean.getPosId());

emBean.setAccImage(faceTxt.getFilePath());
//完成添加操作
emService.add(emBean);
// 更新数据,显示添加结果
this.emPanel.initData();
return true;
}
}

 

 

第七周