- ![这个是一个简单的分包步骤 因为easyui自带了jquery的jar包 所以不用再导入 不过还是要导入class12和g-son文件到web-inf下的lib包中 ]
- 附上具体的src目录下具体的分包的规则
1.用户定义servlet类必须继承sun公司定义的HttpServlet类,该类作用
* 就是用来处理用户的请求和响应的,而类sun公司在定义时遵从了Http协议
*2.重写该类中的doget或者doPost方法,取决于页面表单中的method属性中的参数
*3.在web工程中描述用户定义的servlet类(web.xml)文件中描述,描述的目的
*是让tomcat实例化servlet或者说让容器实例化servlet类,
*该类在实际开发中称为通讯类,同时控制器(MVC)模式
*开发分层
*
*(1)数据访问层(DAO):该层的主要作用就是用来访问数据库,学习技术JDBC
*com.cissst.dao:放置的是数据访问层所有的接口
*com.cissst.daoImpI放置的是接口的实现类
*(2)业务逻辑层:(BO/Service):处理业务对象,同时拼写SQL(DAO)调用数据库访问层的方法
*com.cissst.service:放置的业务逻辑层的接口
*com.cissst.serviceImpI:放置的是业务逻辑层接口的实现类
*(3)数据展现层:(Controller):该层作用展现数据到swing组件或者html页面,同时进行相应的页面跳转,调用业务逻辑处理用户请求和相应,
* 最终返回数据到客户端,servlet技术就在此层中使用
* com.cissst.servlet:放置的是用户定义的所有的servlet类
*(4)底层数据库(oracle,mysql db2)
*
*com.cissst.utils:放置的是公共的连接数据库的类或者日期处理类,或者是文件上传下载的公共类等
*com.cissst.entity:放置的是实体类,业务对象类
*/
3.附上具体包的代码
1>.dao包下分了两个java文件 一个是自定义的接口 另一个是实现接口的方法
在此定义此包的好处是将数据操作直接和数据sql语句的操作的分隔开 尽最大的可维护性操作
在实际操作中感觉在此定义了更新数据和修改数据的接口 可以在后期的操作中添加其他的数据操作而不用在设置其他的方法 只要实现此接口重写方法就好了
package com.cissst.dao;
import java.sql.ResultSet;
public interface BasedDao {
ResultSet getResult(String sql);
int dataCUD(String sql);
}
下面的是将上述的接口实现 其实也只是返回调用的公共包的方法 不过这么做可以讲数据分开 查找错误也方便
package com.cissst.dao;
import java.sql.ResultSet;
import com.cissst.utils.DbUtils;
public class BaseDaoImpI implements BasedDao {
public ResultSet getResult(String sql) {
return DbUtils.getResultData(sql);
}//这个方法是取得公共包下面的数据查询等方法
@Override
public int dataCUD(String sql) {
return DbUtils.cudData(sql);
//返回删除 查询的条数等方法
}
}
2>. 下面是两个表的实体类 一般的原则是一个表对应一个实体类 但是有一点需要注意的是在后台实现各种数据操作的时候 如果需要传递某些参数 那么可以在此实体类中重新带不同参数的构造函数 同时还要注意某一个实体类A中的某项属性在另外的实体类中属于另外一个对象 那么对于这种情况就需要新建一个该实体类的对象来封装该属性 并将其再封装进A中
package com.cissst.entity;
public class Users {
private String username;
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
package com.cissst.entity;
public class Grade {
private Integer id;
private String gradeNumber;
private String gradeName;
private String creatTime;
private String gradeDesc;
private String remark;
public Grade(String gradeNumber, String gradeName,
String creatTime, String gradeDesc, String remark) {
this.gradeNumber = gradeNumber;
this.gradeName = gradeName;
this.creatTime = creatTime;
this.gradeDesc = gradeDesc;
this.remark = remark;
}
public Grade() {
}
public Integer getId() {
return id;
}
public String getGradeNumber() {
return gradeNumber;
}
public void setGradeNumber(String gradeNumber) {
this.gradeNumber = gradeNumber;
}
public void setId(Integer id) {
this.id = id;
}
public String getGradeName() {
return gradeName;
}
public void setGradeName(String gradeName) {
this.gradeName = gradeName;
}
public String getCreatTime() {
return creatTime;
}
public void setCreatTime(String creatTime) {
this.creatTime = creatTime;
}
public String getGradeDesc() {
return gradeDesc;
}
public void setGradeDesc(String gradeDesc) {
this.gradeDesc = gradeDesc;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
3>.service 也就做逻辑层 该层主要自定义了后台取得各种数据所需要的各种接口 该接口实际就是通过调用dao包下的方法从公共类中调用已经写好的SQL的查询 插入 删除等操作的方法 dao包就是起到了相当于隔离层的效果 或许现在还会觉得很是累赘 但是当所需要实现的方法复杂之后 就会越发的觉得这种方法的便利性 所以做好从学习jdbc的最初开始建立起良好的习惯
package com.cissst.service;
import java.util.List;
import com.cissst.entity.Grade;
public interface BaseService {
boolean login(String username,String email);
List<Grade>findGradeAllInfo();
int saveGradeInfo(Grade grade);
int deleteGradeInfo(int id);
int updateGradeInfo(Grade grade);
Grade getGradeInfo(int id);
}
下面实现的接口的方法 注意 在这里适用了ResultSet方法 在sql中的ResultSet方法 中有一个next()方法
该方法类似于iterator遍历方法中的hasNext() 当有下一个值时返回true 还有一个要注意的地方就是删除
查询时需要返回的条数哪里 运用的是executeUpdate()方法 该方法会返回sql语句最终所操作的具体条数
这样就可以写出当sql正确时返回操作的条数 如果不正确 那么返回0 同时前台通过返回的0进行if的条件判断
package com.cissst.service;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.cissst.dao.BaseDaoImpI;
import com.cissst.dao.BasedDao;
import com.cissst.entity.Grade;
public class BaseServiceImpI implements BaseService {
@Override
public Grade getGradeInfo(int id) {
ResultSet rs=basedDao.getResult("select * from tbGrade where id="+id);
Grade grade=new Grade();
try {
if(rs.next()){
grade.setId(rs.getInt("id"));
grade.setCreatTime(rs.getString("G_CREATTIME"));
grade.setGradeDesc(rs.getString("G_DESC"));
grade.setGradeName(rs.getString("G_NAME"));
grade.setRemark(rs.getString("G_REMARK"));
grade.setGradeNumber(rs.getString("G_NUMBER"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return grade;
}
private BasedDao basedDao=new BaseDaoImpI();
public boolean login(String username, String email) {
ResultSet rs=basedDao.getResult("select * from tbUsers where username='"+username+"' and email='"+email+"'");
try {
while(rs.next()){
return true;
}
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return false;
}
public List<Grade> findGradeAllInfo() {
List<Grade> list=new ArrayList<Grade>();
ResultSet rs=basedDao.getResult("select * from tbGrade order by id desc");
try {
while(rs.next()){
Grade grade=new Grade();
grade.setId(rs.getInt("id"));
grade.setCreatTime(rs.getString("G_CREATTIME"));
grade.setGradeDesc(rs.getString("G_DESC"));
grade.setGradeName(rs.getString("G_NAME"));
grade.setRemark(rs.getString("G_REMARK"));
grade.setGradeNumber(rs.getString("G_NUMBER"));
list.add(grade);
}
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
@Override
public int saveGradeInfo(Grade grade) {
try {
String SQL="insert into tbgrade(id,g_name,g_desc,g_creattime,g_remark,g_number)" +
"values(GRADE_SEQ.NEXTVAL,'"+grade.getGradeName()+
"','"+grade.getGradeDesc()+"','"+grade.getCreatTime()+
"','"+grade.getRemark()+"','"+grade.getGradeNumber()+"')";
return basedDao.dataCUD(SQL);
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}
@Override
public int deleteGradeInfo(