層次概述
https://blog.csdn.net/dongnaosenlu/article/details/77835016
- DAO —— Data Access Object數(shù)據(jù)訪問對象(接口)
- DAOImpl —— DAO的實現(xiàn)類
- entity —— 數(shù)據(jù)對象的實體(有些地方叫model層)
- Service(不是Server)——就是中間層、業(yè)務(wù)邏輯層(接口)
- ServiceImpl —— Service的實現(xiàn)類
- Util —— 自定義工具類
- Servlet——JAVA WEB小應(yīng)用(有時叫Controller層)
后端需要做的順序
1.根據(jù)需求設(shè)計數(shù)據(jù)庫雌贱,建庫建表锭硼,準備數(shù)據(jù)
2.建立web末班,webapp類型的maven項目
3.手動創(chuàng)建src笆怠、resources极祸、test-java目錄
4.pom依賴:web模板依賴祠汇、webmvc模板依賴盖袭、webmvc模板依賴失暂、jackson依賴
5.entity(實體類)
7.dao接口彼宠,增加自定義的復(fù)雜關(guān)聯(lián)查詢(注解的方式)
8.service接口,注入dao 調(diào)用相應(yīng)方法
9.對service做單元測試
10.controller弟塞。使用restful風格請求 完成控制層
11.對controller進行接口測試凭峡,杜絕404(客戶端)和505(服務(wù)器端)
1.建表
2.建立web模板(參照之前的簡書 選擇webapp類型)
3.創(chuàng)建src、resources决记、test-java(mark as 相對應(yīng)的顏色)
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相關(guān)依賴-->
<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")//對應(yīng)表
@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實現(xiàn)基本的CRUD功能)
public interface CourseDAO extends BaseDAO<Course>{
//自定義的多表關(guān)聯(lián)查詢
@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(業(yè)務(wù)層)
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.啟動服務(wù)器
2.輸入value:course
3.將網(wǎng)址復(fù)制到postman測試
4.測試通過的話就是前段開始調(diào)接口了