使用IDEA完成一個SpringBoot的demo
- 2020 年 11 月 7 日
- 筆記
- springboot, 原創, 畢業設計項目
打算開始做畢業設計了,寫一些部落格記錄一下做畢業設計的過程。
前兩天從老師那裡拿了學長學姐做的非常簡陋的程式碼,配置環境跑了一下,老師找我的時候說還剩下50%的工作,但感覺至少還有70%。
廢話不多說,今天先學慣用IDEA做個小demo。
開發環境的話是windows10、IntelliJ IDEA Community Edition 2020.2.3 x64、JDK11。
一.創建項目
首先在初始介面New Project。
按照網上的教程需要選擇spring Initializr,可是我這個社區版並沒有,所以需要一個插件。
返回到開始介面,右下角配置處點擊Plugins。
下載Spring Assiant。
這樣子完成之後新建項目時就會有一個Spring Assistant,默認選項點擊next就可以了。
修改一下項目的配置,next。
然後勾選需要的服務,按照網上的說法需要Web下勾選Spring Web ,Template Englines勾選Thymeleaf;SQL勾選:MySQL Driver,JDBC API 和 MyBatis Framework三項;點擊next;
我這個Spring Boot的版本是2.3.5。
最後設置存儲路徑點擊Finish。
二.配置項目
首先看一下創建好項目的結構。
先要進行maven倉庫的配置,配置maven位置和倉庫位置,然後下載更新所需要的jar包。
三.正式編寫
在templates文件下新建index.html頁面,作為啟動的初始頁面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> 這裡是一個簡單的啟動頁面 </body> </html>
在com.wangyu.test下新建controller文件夾,在controller文件夾下建一個簡單的HelloController類;(Controller類要添加@Controller註解,項目啟動時,SpringBoot會自動掃描載入Controller)
package com.wangyu.test.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloController { @RequestMapping("/index") public String sayHello(){ return "index"; } }
在resources文件夾下application中先配置DataSource基本資訊,application文件有兩種文件格式,一種是以.properties為後綴,一種是以.yml為後綴的,兩種配置方式略有差別,詳情可參考這個網址://blog.csdn.net/qq_29648651/article/details/78503853;在這我是用.yml後綴的文件格式。右鍵application文件選擇Refact,選擇Rename,將後綴改為yml。
spring:
datasource:
name: springboottest
url: jdbc:mysql://localhost:3306/springboottest
username: root
password: xxxxxx
driver-class-name: com.mysql.cj.jdbc.Driver
pom.xml文件配置資訊。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="//maven.apache.org/POM/4.0.0" xmlns:xsi="//www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="//maven.apache.org/POM/4.0.0 //maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.wangyu</groupId> <artifactId>test</artifactId> <version>0.0.1-SNAPSHOT</version> <name>test</name> <description>Demo project for Spring Boot</description> <properties> <java.version>11</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--thymeleaf模板引擎配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <!--Web依賴--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--MyBatis配置--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> <!--MySQL資料庫配置--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!--單元測試配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
Bean實體類,依據資料庫表,生成set和get方法:
package com.wangyu.test.bean; public class UserBean { private int id; private String name; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
Mapper層訪問資料庫介面文件:
package com.wangyu.test.mapper; import com.wangyu.test.bean.UserBean; public interface UserMapper { UserBean getInfo(String name, String password); }
Mapper層訪問資料庫實現文件(需在resource包下創建mapper文件夾,然後再創建一個UserMapper.xml.在application配置文件中mybatis:mapper-locations:對應的就是該文件地址),注意<mapper>標籤的namespace屬性要填寫 訪問資料庫介面類文件路徑:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "//mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.wangyu.test.mapper.UserMapper"> <select id="getInfo" parameterType="String" resultType="com.wangyu.test.bean.UserBean"> SELECT * FROM user WHERE name = #{name} AND password = #{password} </select> </mapper>
Service層業務介面類編寫:
package com.wangyu.test.service; import com.wangyu.test.bean.UserBean; public interface UserService { UserBean loginIn(String name, String password); }
Service層業務實現類編寫,注意要註解@Service,注入Mapper:
package com.wangyu.test.serviceImpl; import com.wangyu.test.bean.UserBean; import com.wangyu.test.mapper.UserMapper; import com.wangyu.test.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserServiceImpl implements UserService { //將DAO注入Service層 @Autowired private UserMapper userMapper; @Override public UserBean loginIn(String name, String password) { return userMapper.getInfo(name,password); } }
項目啟動類要添加註解@MapperScan項目啟動時掃描mapper介面,否則會報錯找不到mapper文件:
package com.wangyu.test; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.wangyu.test.mapper") public class TestApplication { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } }
編寫測試類,看是否能成功 訪問資料庫,獲取資料庫資訊:
package com.wangyu.test; import com.wangyu.test.bean.UserBean; import com.wangyu.test.service.UserService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest public class TestApplicationTests { @Autowired UserService userService; @Test public void contextLoads() { UserBean userBean = userService.loginIn("a","a"); System.out.println("該用戶ID為:"); System.out.println(userBean.getId()); } }
controller層,注意添加@controller註解,注入Service服務:
package com.wangyu.test.controller; import com.wangyu.test.bean.UserBean; import com.wangyu.test.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller public class LoginController { //將Service注入Web層 @Autowired UserService userService; @RequestMapping("/login") public String show(){ return "login"; } @RequestMapping(value = "/loginIn",method = RequestMethod.POST) public String login(String name,String password){ UserBean userBean = userService.loginIn(name,password); if(userBean!=null){ return "success"; }else { return "error"; } } }
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>login</title> </head> <body> <form role="form" action = "/loginIn" method="post"> 帳號:<input type="text" id="name" name = "name"> <br> 密碼:<input type="password" id = "password" name = "password"> <br> <input type="submit" id = "login" value = "login"> </form> </body> </html>
success.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>success</title> </head> <body> <h1>登錄成功!</h1> </body> </html>
error.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>error</title> </head> <body> <h1>登錄失敗!</h1> </body> </html>
先運行測試類,看是否成功獲取資料庫資訊:
運行TestApplication.java文件,啟動項目,進入瀏覽器輸入localhost:8080/login
輸入帳號密碼測試網頁跳轉是否正常。
到這裡為止,整個demo就大功告成了。
參考:
//blog.csdn.net/baidu_39298625/article/details/98102453
//blog.csdn.net/crazilyer/article/details/80313323
//blog.csdn.net/qq_29648651/article/details/78503853
//www.cnblogs.com/kaikai-2018/p/13030719.html
//blog.csdn.net/qq_40902709/article/details/105806376