1.创建Maven项目
2.IDEA中配置数据库
3.创建表
4.导入jar包
5.创建包
6.文件内容
7.获取数据库连接
8.实现dao层调用数据库
9.Service层
10.Cotroller层(Servlet)
11.前端工程
1.创建Maven项目
2.配置数据库
右侧Dtatabase --》点击左上角的+ --》 选择DataSource
注意:可能报告时区错误,填写Asia/Shanghai
3.创建表
- student:id,name,age,birth,emailjk
- school:id,name,phone,proid(省id),cityid(市id),areaid(区id),info(详细地址)
- locations:id,name,ltype(省/市/区),pid(父id)
- course:id,name,code(课程代号)
- sc:id,sid,cid,score
4.导入jar包
在pom.xml中导入依赖包
导入mysql/servlet/fastjson包
//<dependencies></dependencies>模块中写入坐标信息即可导入
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.77</version>
</dependency>
</dependencies>
5.创建包和文件
==》 main
==》 java
==》com.etoak.student
==》controller
==》dao
==》IStudentDao(接口,声明需要用到的所有方法)
==》StudentDaoImpl(实现上面的方法)
==》entity
==》factory
==》CF(连接池,提供数据库连接)
==》service
==》utils
==》vo
==》StudentVo(存放前端的返回来的数据)
==》resources
==》db.properties(连接配置资源文件与CF文件相对应)
==》webapp
6.entity实体类包
1.entity实体类
//几个表创建几个实体类
//实现Getter和Setter方法
7.获取数据库连接
1.连接池依赖
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
2.配置资源文件
db.properties
m.driver=com.mysql.cj.jdbc.Driver
m.url=jdbc:mysql://127.0.0.1:3306/et2202?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
m.user = root
m.pwd = etoak
3.获得连接
- CF
package com.etoak.student.factory;
import org.apache.commons.dbcp.BasicDataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class CF {
public static void main(String[] args){
System.out.println( CF.getConnection());
}
private static BasicDataSource ds = new BasicDataSource();
static {
try{
Properties pro = new Properties();
InputStream is = CF.class.getClassLoader().getResourceAsStream("db.properties");
pro.load(is);
ds.setDriverClassName(pro.getProperty("m.driver"));
ds.setUrl(pro.getProperty("m.url"));
ds.setUsername(pro.getProperty("m.user"));
ds.setPassword(pro.getProperty("m.pwd"));
}catch(Exception e){
e.printStackTrace();
}
}
public static Connection getConnection(){
try{
return ds.getConnection();
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
- db.properties
8.实现dao层调用数据库
1.声明方法(接口)
- IStudentDao
package com.etoak.student.dao;
import com.etoak.student.entity.Course;
import com.etoak.student.entity.Sc;
import com.etoak.student.entity.School;
import com.etoak.student.entity.Student;
import com.etoak.student.vo.StudentVo;
import java.util.List;
public interface IStudentDao {
//查询所有学生
//查询所有学校
//查询所有课程
List<School> queryAllSchools();
List<Course> queryAllCourses();
public List<Student> querySome(StudentVo vo);
public int countStu(StudentVo vo);
public List<Sc> queryCourseAndScoreByStuId();
}
2.实现接口里的方法
- StudentDaoImpl
package com.etoak.student.dao;
import com.etoak.student.entity.Course;
import com.etoak.student.entity.Sc;
import com.etoak.student.entity.School;
import com.etoak.student.entity.Student;
import com.etoak.student.factory.CF;
import com.etoak.student.vo.StudentVo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
public class StudentDaoImpl implements IStudentDao {
@Override
public List<School> queryAllSchools() {
String sql = "select * from student";
List<School> data = new ArrayList<>();
try(Connection con = CF.getConnection();
PreparedStatement pst = con.prepareStatement(sql);
ResultSet rs = pst.executeQuery()){
while (rs.next()){
School school = new School();
school.setId(rs.getInt("id"));
school.setPhone(rs.getString("phone"));
school.setName(rs.getString("name"));
data.add(school);
}
return data;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
@Override
public List<Course> queryAllCourses() {
return null;
}
@Override
public List<Student> querySome(StudentVo vo) {
return null;
}
@Override
public int countStu(StudentVo vo) {
return 0;
}
@Override
public List<Sc> queryCourseAndScoreByStuId() {
return null;
}
}
9.Service层
Service调用dao层,对Controller层提供数据支持
public class StudentService {
private IStudentDao dao = new StudentDaoImpl();
public List<School> queryAllSchs(){
return dao.queryAllSchs();
}
}
10.Cotroller层(Servlet)
Cotroller层调用Service层的数据,将数据显示在前端
//相当于<url-pattern>
@WebServlet({"/queryAllSchs"})
//继承HttpServlet
public class StudentServlet extends HttpServlet {
//覆盖doGet()/doPost()等方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
//在doGet()/doPost()等方法里判断请求的url甩锅给其他方法实现对数据的json转换和输出
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String url = req.getRequestURL().toString();
if (url.contains("queryAllSchs")){
this.queryAllSchs();
}
}
//将数据转成json并输出
protected void queryAllSchs(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//得到数据
StudentService ss = new StudentService();
List<School> data = ss.queryAllSchs();
//处理数据(设置输出的ContentType,转为json格式)
resp.setContentType("text/plain;charset=UTF-8");
String jsonStr = JSONArray.toJSONString(data);
//输出数据
PrintWriter out = resp.getWriter();
out.write(jsonStr);
out.flush();
out.close();
}
}
11.前端工程
a.创建Vue项目
b.导入依赖
/*
main.js文件
*/
//npm i element-ui -S
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
//npm i echarts@4.9.0 -S
import echarts from 'echarts'
//npm i axios -S
import axios from 'axios'
//npm i qs -S
import qs from 'qs'
//把组件注册到Vue实例中
Vue.prototype.$ajax = axios
Vue.prototype.$charts = echarts
Vue.prototype.$qs = qs
Vue.use(ElementUI)
//注册后台接口地址
axios.defaults.baseURL = "http://localhost:8080/student"
c.书写结构/样式