11 前后端分離開發(fā)-調(diào)用接口

層次概述

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.建表

Snipaste_2019-03-15_15-38-42.png
Snipaste_2019-03-15_15-38-57.png
Snipaste_2019-03-15_15-39-05.png

2.建立web模板(參照之前的簡書 選擇webapp類型)

3.創(chuàng)建src、resources决记、test-java(mark as 相對應(yīng)的顏色)
Snipaste_2019-03-15_15-41-58.png

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)接口了

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末摧冀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子系宫,更是在濱河造成了極大的恐慌索昂,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件笙瑟,死亡現(xiàn)場離奇詭異楼镐,居然都是意外死亡,警方通過查閱死者的電腦和手機往枷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凄杯,“玉大人错洁,你說我怎么就攤上這事〗渫唬” “怎么了屯碴?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長膊存。 經(jīng)常有香客問我导而,道長,這世上最難降的妖魔是什么隔崎? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任今艺,我火速辦了婚禮,結(jié)果婚禮上爵卒,老公的妹妹穿的比我還像新娘虚缎。我一直安慰自己,他們只是感情好钓株,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布实牡。 她就那樣靜靜地躺著,像睡著了一般轴合。 火紅的嫁衣襯著肌膚如雪创坞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天受葛,我揣著相機與錄音题涨,去河邊找鬼偎谁。 笑死,一個胖子當著我的面吹牛携栋,可吹牛的內(nèi)容都是我干的搭盾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼婉支,長吁一口氣:“原來是場噩夢啊……” “哼鸯隅!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起向挖,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蝌以,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后何之,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跟畅,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年溶推,在試婚紗的時候發(fā)現(xiàn)自己被綠了徊件。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒜危,死狀恐怖虱痕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辐赞,我是刑警寧澤部翘,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站响委,受9級特大地震影響新思,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜赘风,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一夹囚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贝次,春花似錦崔兴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至山析,卻和暖如春堰燎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背笋轨。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工秆剪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赊淑,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓仅讽,卻偏偏與公主長得像陶缺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子洁灵,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容