层次概述
https://blog.csdn.net/dongnaosenlu/article/details/77835016
- DAO —— Data Access Object数据访问对象(接口)
- DAOImpl —— DAO的实现类
- entity —— 数据对象的实体(有些地方叫model层)
- Service(不是Server)——就是中间层、业务逻辑层(接口)
- ServiceImpl —— Service的实现类
- Util —— 自定义工具类
- Servlet——JAVA WEB小应用(有时叫Controller层)
后端需要做的顺序
1.根据需求设计数据库,建库建表,准备数据
2.建立web末班,webapp类型的maven项目
3.手动创建src、resources、test-java目录
4.pom依赖:web模板依赖、webmvc模板依赖、webmvc模板依赖、jackson依赖
5.entity(实体类)
7.dao接口,增加自定义的复杂关联查询(注解的方式)
8.service接口,注入dao 调用相应方法
9.对service做单元测试
10.controller。使用restful风格请求 完成控制层
11.对controller进行接口测试,杜绝404(客户端)和505(服务器端)
1.建表
2.建立web模板(参照之前的简书 选择webapp类型)
3.创建src、resources、test-java(mark as 相对应的颜色)
4.添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.spring</groupId>
<artifactId>Web</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>Web Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.1.5.RELEASE</spring.version>
<aspectj.version>1.9.2</aspectj.version>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.12</slf4j.version>
<hutool.version>4.5.1</hutool.version>
<mysql.version>5.1.47</mysql.version>
<mybatis.version>3.5.0</mybatis.version>
<mybatis-spring.version>2.0.0</mybatis-spring.version>
<tk-mybatis.version>4.1.5</tk-mybatis.version>
<druid.version>1.1.14</druid.version>
<lombok.version>1.18.6</lombok.version>
<jackson.version>2.9.8</jackson.version>
<jackson-mapper.version>1.9.13</jackson-mapper.version>
</properties>
<dependencies>
<!--spring-web依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring-webmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--junit依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring-test依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring-aop依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring.version}</version>
</dependency>
<!--aspectj依赖-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${aspectj.version}</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
<!--Lombok 依赖-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
<!-- log4j日志依赖 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.6</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<!--hutool依赖-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool.version}</version>
</dependency>
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring-jdbc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<!--mysql依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<!--mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!--mybatis-spring依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!--通用mapper依赖-->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>${tk-mybatis.version}</version>
</dependency>
<!--druid依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!--jackson相关依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>${jackson-mapper.version}</version>
</dependency>
</dependencies>
<build>
<finalName>Web</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
6.实体类entity
User
@Table(name = "t_course")//对应表
@Data//(lombok注解)
public class Course {
@Id//(主键)
@GeneratedValue( strategy = GenerationType.IDENTITY)
private Long courseId;
private String coursename;
private Long userId;
private String courseClass;
private String cover;
private String courseCode;
private Short finished;
}
SysUser
@Table(name = "t_sys_user")
@Data
public class SysUser {
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY)
private Long userId;
private String mobile;
private String password;
private String username;
private String avatar;
}
CourseVO(视图 需要的查询属性)
@Data
public class CourseVO {
private Long courseId;
private String courseName;
private Long userId;
private String courseClass;
private String cover;
private String courseCode;
private Short finished;
private String username;
private String avatar;
}
7.dao接口
BaseDAO(通用dao接口)
public interface BaseDAO<T> extends Mapper<T>,MySqlMapper<T>{
}
CourseDAO(继承BaseDAO实现基本的CRUD功能)
public interface CourseDAO extends BaseDAO<Course>{
//自定义的多表关联查询
@Results({@Result(column = "course_id", property = "courseId"),
@Result(column = "course_name", property = "courseName"),
@Result(column = "user_id", property = "userId"),
@Result(column = "course_class", property = "courseClass"),
@Result(column = "cover", property = "cover"),
@Result(column = "course_code", property = "courseCode"),
@Result(column = "finished", property = "finished"),
@Result(column = "username", property = "username"),
@Result(column = "avatar", property = "avatar")
})
@Select("SELECT a.*,b.username,b.avatar FROM t_course a LEFT JOIN t_sys_user b ON a.user_id=b.user_id WHERE a.finished = 0 LIMIT 0,10")
List<CourseVO> selectCurrentCourses();
@Results({@Result(column = "course_id", property = "courseId"),
@Result(column = "course_name", property = "courseName"),
@Result(column = "user_id", property = "userId"),
@Result(column = "course_class", property = "courseClass"),
@Result(column = "cover", property = "cover"),
@Result(column = "course_code", property = "courseCode"),
@Result(column = "finished", property = "finished"),
@Result(column = "username", property = "username"),
@Result(column = "avatar", property = "avatar")
})
@Select("SELECT a.*,b.username,b.avatar FROM t_course a LEFT JOIN t_sys_user b ON a.user_id=b.user_id WHERE a.finished = 1 LIMIT 0,10")
List <CourseVO> selectFinishedCourses();
}
}
SysUserDAO
public interface SysUserDAO extends BaseDAO<SysUser>{
}
8.service(业务层)
public interface CourseService {
List<CourseVO> selectCurrentCourses();
List<CourseVO> selectFinishedCourses();
}
9.serviceImpl
@Service
@Transactional
public class CourseServiceImpl implements CourseService {
@Resource
private CourseDAO courseDAO;
@Override
public List<CourseVO> selectCurrentCourses() {
return courseDAO.selectCurrentCourses();
}
@Override
public List <CourseVO> selectFinishedCourses() {
return courseDAO.selectFinishedCourses();
}
}
10.Junit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/spring_mybatis.xml")
public class CourseServiceTest {
@Autowired
private CourseService courseService;
@Test
public void selectCurrentCourses() throws Exception {
List<CourseVO> courseVOList = courseService.selectCurrentCourses();
courseVOList.forEach( courseVO -> System.out.println(courseVO) );
}
@Test
public void selectFinishedCourses() throws Exception {
List<CourseVO> courseVOList = courseService.selectFinishedCourses();
courseVOList.forEach( courseVO -> System.out.println(courseVO) );
}
}
11.controller完成控制层
@RestController
public class CourseContraller{
@Autowired
private CourseService courseService;
@RequestMapping(value = "courses", method = RequestMethod.GET)
public List<CourseVO> selectCourses() {
List<CourseVO> courseVOList = courseService.selectCurrentCourses();
return courseVOList;
}
@RequestMapping(value = "courses1", method = RequestMethod.GET)
public List<CourseVO> selectCourses1(){
List<CourseVO> courseVOList = courseService.selectFinishedCourses();
return courseVOList;
}
测试controller
1.启动服务器
2.输入value:course
3.将网址复制到postman测试
4.测试通过的话就是前段开始调接口了