Javaweb案例
1 创建流程
1.1 环境配置
Jdk maven mysql的环境都要配置,MySQL还需要以管理员身份运行一些命令,并设置用户名以及密码。电脑的高级环境变量中配置
1.2 工程创建流程
创建springboot框架步骤如下:
选择generators——spring initializr,
location自定义无中文的路径,
language Java,
Type Maven,
Group com/cn + . +组织名,例如 com.hust
Artifact 项目名称,例如 springcase
自动生成Package name:com.hust.springcase
JDK 17
Java 17(或都选择11)
Packaging Jar
点击next
Spring Boot 3.2.2
Dependencies——Web——Spring Web
Dependencies——Developer Tools——lombok
Dependencies——SQL——MySQL Driver & Mybatis Framework
——Create
软件创建project中,加载maven依赖会花一些时间,此框架中java——com.hust.springcase包下会自带一个启动类SpringcaseApplication.java
到此即创建成功。
1.3 引入依赖
1.3.1 修改maven仓库
首先查看Setting——Build,Execution,Deployment——Build Tools——Maven中
Maven home path——…选择安装的的apache-maven-3.96文件夹 例如:C:/develop/apache-maven-3.9.6
User setting file——Override——选择安装的的apache-maven-3.96\conf\settings.xml 例如:C:\develop\apache-maven-3.9.6\conf\settings.xml
Local repository——Override——选择安装的的apache-maven-3.96文件夹 例如:C:\develop\apache-maven-3.9.6
1.3.2 引入起步依赖
引入起步依赖(web、mybatis、mysql驱动、lombok)
经过验证 springboot3.2.2 mybatis版本应该是3.0.3,这里如果版本号不匹配在服务器启动时会报错,启动不成功。
mysql的版本和在本地配置的版本要一致,不然连接数据库可能测试不成功。
以下是pom.xml中需要更改的部分,这里的版本号可以自行修改,每次修改完同步一下。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<!-- Lombok: 简化Java代码,提高开发效率 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
1.4 配置文件
application.properties中引入mybatis的配置信息,用于和数据库的交互
#数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/db01(db01是后面使用到的数据库名称)
spring.datasource.username=root
spring.datasource.password=1234
说明:root 1234分别是在配置本地环境的时候设置的用户名以及密码,更改为配置时的用户名以及密码,否则数据库连接失败
#开启mybatis的日志输出
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#开启数据库表字段 到 实体类属性的驼峰映射(例如 my_batis————myBatis)
mybatis.configuration.map-underscore-to-camel-case=true
2 项目结构
src——main——java——com.hust——controller——DeptController©
src——main——java——com.hust——service——DeptService(I)
src——main——java——com.hust——service——impl——DeptServiceImpl©
src——main——java——com.hust——pojo——Dept©
src——main——java——com.hust——mapper——DeptMapper(I)
src——main——java——com.hust——SpringcaseApplication.java
前端工程 前端和后端通过Tomcat连接响应
后端工程(springboot三层结构,controller,service,mapper) web,mybatis,mysql驱动,lombok依赖
数据库mysql(和后端工程用mybatis连接)
pojo存放实体类的,还可能有别的层例如domain(这块儿后续补充
以下这三层的耦合越少越好
2.1 controller层
控制层:响应和前端工程,idea内置的Tomcat 8080端口
代码示例:
/**
* 部门管理Controller
*/
// 这三行是先打出/**然后回车
@Slf4j //日志相关操作
@RequestMapping("/depts") //抽取相同的请求路径
@RestController //这个注解包含了responsebody,将返回值的对象转成json
public class DeptController {
//日志的框架 对象(不使用
//private static Logger log = LoggerFactory.getLogger(DeptController.class);
@Autowired
//注入Service接口交给IOC管理(自动获取实现类
private DeptService deptService;
/**
* 查询部门数据
* @return
*/
//@RequestMapping(value = "/depts",method = RequestMethod.GET) method是枚举类型
//限定请求方式仅为get,以下直接写更方便常用的形式
@GetMapping
public Result list(){
//输出日志,日志记录框架,日志记录对象logger
log.info("查询全部部门数据");
//调用service查询部门数据
List<Dept> deptList = deptService.list();
return Result.success(deptList);
}
/**
* 删除部门数据
* @return
*/
@DeleteMapping("/{id}") //需要使用请求路径的参数传入,需要加入注解@PathVariable
public Result delete(@PathVariable Integer id){
log.info("根据id删除部门:{}",id);
//调用service删除部门
deptService.delete(id);
return Result.success();
}
/**
* 新增部门
* @return
*/
@PostMapping
public Result add(@RequestBody Dept dept){
log.info("新增部门:{}",dept);
//调用service里面的,不需要返回值
deptService.add(dept);
return Result.success();
}
}
2.2 service层
业务层。存放业务代码,处理拿到的数据的业务逻辑
service接口
public interface DeptService {
/**
* 查询全部部门数据
* @return
*/
//打出 /**然后回车形成如上所示的注释
List<Dept> list();
/**
* 根据id删除部门
* @param id
*/
void delete(Integer id);
/**
* 插入部门数据
* @param dept
*/
void add(Dept dept);
}
service接口的实现类,需要加上@Service注解
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
@Override
public List<Dept> list() {
return deptMapper.list();
}
@Override
public void delete(Integer id) {
deptMapper.delete(id);
}
@Override
public void add(Dept dept) {
dept.setCreateTime(LocalDateTime.now());
dept.setUpdateTime(LocalDateTime.now());
deptMapper.add(dept);
}
}
2.3 mapper层
数据访问层/持久层:存放mybatis的Mapper接口
SQL语句简单,使用注解开发,若涉及复杂的SQL语句,例如动态SQL那么在resources下创建与mapper层同包同名的.xml文件
.xml文件怎么写,动态SQL的标签等等之后补充…
@Mapper注解需要添加
@Mapper
public interface DeptMapper {
/**
* 查询全部部门数据
* @return
*/
//查询简单,所以基于注解开发
@Select("select * from dept")
List<Dept> list();
/**
* 根据id删除部门数据
*
* @param id
*/
@Delete("delete from dept where id = #{id}")
void delete(Integer id);
/**
* 插入部门数据
*
* @param dept
*/
@Insert("INSERT INTO dept(name,create_time,update_time) values (#{name},#{createTime},#{updateTime})")
void add(Dept dept);
}
3 开发规范
restful风格
统一响应结果 AjaxResult(自定义名称)
@Data //lombok简化的getter setter
@NoArgsConstructor //无参构造
@AllArgsConstructor //全参构造
public class AjaxResult {
private Integer code;//响应码,1 代表成功; 0 代表失败
private String msg; //响应信息 描述字符串
private Object data; //返回的数据
//增删改 成功响应
public static AjaxResult success(){
return new AjaxResult(1,"success",null);
}
//查询 成功响应
public static AjaxResult success(Object data){
return new AjaxResult(1,"success",data);
}
//失败响应
public static AjaxResult error(String msg){
return new AjaxResult(0,msg,null);
}
}
4 开发流程
分析需求以及前端的页面原型
设计数据库表格
阅读接口文档
思路分析
接口开发(开发一个功能,一个功能被称为是一个接口)
postman接口测试
前后端联调