开发流程
需求分析及实体类设计
实体类对应数据库中的course表进行创建
有些字段还用不到,所以在创建实体类的时候,要确定使用字段
DAO接口的编写
CourseDao是对应的课程管理的Dao,是一个接口
CourseDaoImple是实现类
Service接口及实现类编写
/**
*课程模块 Service层 接口
*/
public interface CourseService {
}
import com.lagou.service.CourseService;
/**
* 课程模块Service层 实现类
*/
public class CourseServiceImpl implements CourseService {
}
CourseServlet编写
@WebServlet("/course")
public class CourseServlet extends BaseServlet {
}
这样就搭建好dao、service、web层的三层结构
搭好再做具体需求
功能1:查询课程列表信息
页面展示的数据有以下这些
预备知识 DbUtils的QueryRunner核心类
QueryRunner中一共有6种方法:
- execute(执行SQL语句)
- batch(批量处理语句)
- insert(执行INSERT语句)
- insertBatch(批量处理INSERT语句)
- query(SQL中 SELECT 语句)
- update(SQL中 INSERT, UPDATE, 或 DELETE 语句)
query方法:
- T query(String sql, ResultSetHandler rsh)
不需要替换参数来执行已给予的SELECT语句
query(sql, new BeanHandler<User>(User.class)
- T query(String sql, ResultSetHandler rsh, Object… params)
需要一个或多个替换参数来执行已给予的SELECT语句,并返回一种对象结果
编写对应的Dao层
对应上面的页面展示数据,我们要在数据库中查询的数据为:
SELECT
id,
course_name,
price,
sort_num,
STATUS
FROM course
注意此数据库中的删除并不是真正的删除,而是给一个字段标记一下
课程列表的查询_dao层的编写
public class CourseDaoImpl implements CourseDao {
@Override
public List<Course> findCourseList() {
try {
//1.创建QueryRunner
QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
//2,编写SQL 取出is_del=0的数据(未删除数据)
String sql = "SELECT\n" +
"\tid,\n" +
"\tcourse_name,\n" +
"\tprice,\n" +
"\tsort_num,\n" +
"\tSTATUS\n" +
"FROM course WHERE is_del = ?";
//3.执行查询
List<Course> courseList = qr.query(sql, new BeanListHandler<Course>(Course.class), 0);
return courseList;
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
}
课程列表的查询_service层的编写
public class CourseServiceImpl implements CourseService {
//创建CourseDao
CourseDao courseDao = new CourseDaoImpl();
@Override
public List<Course> findCourseList() {
List<Course> courseList = courseDao.findCourseList();
return null;
}
}
Servlet编写
接口开发规范
们在做的是一个前后端分离项目、需要通过接口文档对接的项目. 所以开发过程中要仔细查看前端所需的api接口和参数字段
为了严格按照接口进行开发,提高效率,对请求及响应格式进行规范化。
开发规范:
- get请求时,采用key/value格式请求,Servlet中可以使用getParameter()获取
- post请求时有三种数据格式
第一种: Json数据 ,jsonl类型的数据 Servlet中使用 fastjson进行解析
第二种: 提交form表单数据
第三种: 文件等多部件类型(multipart/form-data) - 服务端响应结果统一格式为json
使用JSON前要导入依赖
在接下来的开发中要遵循接口文档进行
例如这里我们对应的servlet
可见路径是正确的
课程列表查询_接口开发(Servlet内容编写)
要求如下:
最终代码如下
@WebServlet("/course")
public class CourseServlet extends BaseServlet {
//查询课程信息列表功能
public void findCourseList(HttpServletRequest request, HttpServletResponse response) {
try {
//1.接收参数
//2.业务处理
CourseService cs = new CourseServiceImpl();
List<Course> courseList = cs.findCourseList();
//3.响应结果
String result = JSON.toJSONString(courseList);
response.getWriter().println(result);
} catch (IOException e) {
e.printStackTrace();
}
}
}
接口测试一下
http://localhost:8080/lagou_edu_home/course?methodName=findCourseList
根据接口文档的要求可知有乱码且多了discount和is_del字段
@WebServlet("/course")
public class CourseServlet extends BaseServlet {
//查询课程信息列表功能
public void findCourseList(HttpServletRequest request, HttpServletResponse response) {
try {
//1.接收参数
//2.业务处理
CourseService cs = new CourseServiceImpl();
List<Course> courseList = cs.findCourseList();
//3.响应结果
//SimplePropertyPreFilter 指定要转换的JSON字段
SimplePropertyPreFilter filter = new SimplePropertyPreFilter(