本實例適合剛開始學習spring boot的有一定開發基礎的同學們,使用當前比較流行的IntelliJ IDEA 2019開發工具,利用spring boot框架,採用Java語言,結合MySQL數據庫設計實現用戶User的增加、讀取、更新、刪除。首先,我們先了解一下基本概念。
Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成爲領導者。Spring框架是Java平臺上的一種開源應用框架,提供具有控制反轉特性的容器。而SpringBoot是一個全新開源的輕量級框架。它基於Spring4.0設計,不僅繼承了Spring框架原有的優秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。另外SpringBoot通過集成大量的框架使得依賴包的版本衝突,以及引用的不穩定性等問題得到了很好的解決。
IntelliJ IDEA是java編程語言開發的集成環境。IntelliJ在業界被公認爲最好的java開發工具,尤其在智能代碼助手、代碼自動提示、重構、J2EE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創新的GUI設計等方面的功能可以說是超常的。DEA是JetBrains公司的產品,這家公司總部位於捷克共和國的首都布拉格,開發人員以嚴謹著稱的東歐程序員爲主,支持HTML,CSS,PHP,MySQL,Python等。
MyBatis 是一款優秀的持久層框架,它支持定製化 SQL、存儲過程以及高級映射。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java對象)映射成數據庫中的記錄。MyBatis 是支持普通 SQL查詢,存儲過程和高級映射的優秀持久層框架。MyBatis 消除了幾乎所有的JDBC代碼和參數的手工設置以及結果集的檢索。MyBatis 使用簡單的 XML或註解用於配置和原始映射,將接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java對象)映射成數據庫中的記錄。
好了,簡單瞭解了這些概念後,下面我們進入主題。
開發工具
IntelliJ IDEA 2019.1.1 x64
新建工程
選擇左側的Spring Initializr,jdk要求1.8及以上,選擇默認的Default下一步:
我們可以不改這些信息直接下一步,如果想改名字可以自己修改Group及Artifact,和最下邊的package包名,這裏我把Group改成com,Artifact改爲sjzeis,選擇下一步。
選擇項目所需要的依賴,這個頁面是選擇你工程中需要用到的依賴,因爲我們的目標是web項目使用mybatis所以在web模塊中勾選Spring Web,在SQL中依次勾選Jdbc API、Mybatis Framework、Mysql Driver。然後下一步直到finish即可。
接着項目就會下載我們需要的依賴,如果之前沒有下過,可能會稍等幾分鐘。
配置項目相關信息
來看下建好後的pom.xml文件,上一步選擇的依賴,在pom.xml文件中 已經自動添加到我們的文件中了。下面爲本項目的pom.xml文件內容。
<?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 https://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.2.1.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com</groupId> <artifactId>sjzeis</artifactId> <version>0.0.1-SNAPSHOT</version> <name>sjzeis</name> <description>sjzeis project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <!-- jdbc --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</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.1</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>
修改配置文件
Spring Boot通過pom.xml中引入模塊化的Stater,使得常規的開發場景可以很快把應用搭建起來。在使用Spring Boot的過程中,除了可以在pom.xml中配置一些內容外,一些項目相關的配置也可以在application.properties中通過配置來完成。
application.properties文件爲默認項目配置文件,默認爲空的,我們可以在配置文件中配置端口、名字等一般屬性,也可以配置自定義屬性、參數引用、多環境配置等,可以參考 https://www.jianshu.com/p/c023083f51b4 一文說明介紹。 application.properties文件在項目-src-main-resources下。
本項目如果使用application.properties文件,可以在文件中添加端口、數據源、mydatis等相關數據,下面爲文件內容。
server.port=8080 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=root mybatis.mapper-locations=classpath:mapper/*Mapper.xml
但是還是習慣yml標記語言文件的天然的樹狀結構,通常以.yml爲後綴的文件,是一種直觀的能夠被電腦識別的數據序列化格式,並且容易被人類閱讀。在IDEA下書寫起來也比較方便,其實SpringBoot底層會把application.yml文件解析爲application.properties。所以將本項目原有的application.properties文件重構-重命名爲:application_bak.properties,或者直接刪除即可,這樣項目不再加載該文件。接下來創建application.yml和application-dev.yml配置文件。在一個項目中可以配置多套環境,便於在團隊開發中可以做到項目的分離獨自開發,再整合的形式。在Spring Boot中多環境配置文件名需要滿足application-{profile}.properties的格式,其中{profile}對應你的環境標識,比如:
- application-dev.properties:開發環境
- application-test.properties:測試環境
- application-prod.properties:生產環境
application.yml爲主加載配置文件,內容如下:
spring: profiles: active: dev
application-dev.yml爲主環境說明文件,內容如下:
server: port: 8080 spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: root mybatis: mapper-locations: classpath:mapper/*Mapper.xml
項目在加載時自動加載application.yml配置文件,根據配置文件中的spring.profiles.active=dev,就會再加載application-dev.yml配置文件中的內容。上面文件配置了端口號8080,數據源的驅動類、地址、登錄用戶名和口令,以及mybatis映射mapper路徑的指定。特別需要注意的是:本項目中driver-class-name: com.mysql.cj.jdbc.Driver,是新版本org.springframework.boot和org.mybatis.spring.boot中規定的驅動,老版本的寫driver-class-name: com.mysql.jdbc.Driver。
項目編寫及業務流程
User數據庫的定義
創建User實體類實現業務流程
一、創建項目路徑包來,展示業務流程。在項目src-main-java-com-sjzeis下分別創建包:controller、entity、mapper、service,用來實現控制層、實體層、映射層、業務層。這裏面簡單介紹一下業務流程及各層業務的作用如下:
1. entity實體層(別名: model層 ,domain層),用於存放我們的實體類,與數據庫中的屬性值基本保持一致,實現set和get的方法。如:user表的實體User。
2. mapper映射層(別名:dao層),用於對數據庫進行數據持久化操作,他的方法語句是直接針對數據庫操作的,主要實現一些增刪改查操作,在mybatis中方法主要與*Mapper.xml內相互一一映射。如:public interface UserMapper {...}。
3. service業務層,用於給controller層的類提供接口進行調用。一般就是自己寫的方法封裝起來,就是聲明一下,存放業務邏輯處理,也是一些關於數據庫處理的操作,但不是直接和數據庫打交道,他有接口還有接口的實現方法,在接口的實現方法中需要導入mapper層,mapper層是直接跟數據庫打交道的,他也是個接口,只有方法名字,具體實現在mapper.xml文件裏,service是供我們使用的方法。如:public class UserService {...}。
4. controller控制層(別名:web 層),用於負責具體模塊的業務流程控制,需要調用service邏輯設計層的接口來控制業務流程。因爲service中的方法是我們使用到的,controller控制器導入service層,因爲service中的方法是我們使用到的,controller通過接收前端傳過來的參數進行業務操作,在返回一個指定的路徑或者數據表。如:public class UserController {...}。
二、在src-main-resources下創建mapper包用於存放*Mapper.xml文件
項目結構如圖:
如果想直接創建對應的包而不是目錄,可以在java目錄上點擊鼠標右鍵,選擇標記目標目錄爲-測試源 根,如圖:
創建entity實體類User
package com.sjzeis.entity; public class User { private int userid; private String username; private String password; public int getUserid() { return userid; } public void setUserid(int userid) { this.userid = userid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User{" + "userid=" + userid + ", username='" + username + '\'' + ", password='" + password + '\'' + '}'; } }
創建Mapper映射操作UserMapper類
package com.sjzeis.mapper; import com.sjzeis.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { public List<User> findAllUser(); public List<User> findUserByUserId(int userid); }
創建Mapper映射對應的UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.sjzeis.mapper.UserMapper"> <resultMap id="result" type="com.sjzeis.entity.User"> <result column="userid" jdbcType="INTEGER" property="userid" /> <result column="username" jdbcType="VARCHAR" property="username" /> <result column="password" jdbcType="VARCHAR" property="password" /> </resultMap> <select id="findAllUser" resultType="com.sjzeis.entity.User"> select * from users; </select> <select id="findUserByUserId" resultType="com.sjzeis.entity.User"> select * from users where userid=#{userid}; </select> </mapper>
注意該文件放在resources目錄下的mapper包中,具體包名位置(namespace)要和上邊的映射UserMapper類對應 。
創建service業務UserService類
package com.sjzeis.service; import com.sjzeis.entity.User; import com.sjzeis.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired(required=false) public UserMapper userMapper; public List<User> findAllUser(){ return userMapper.findAllUser(); } public List<User> findUserByUserId(int userid){ return userMapper.findUserByUserId(userid); } }
創建 controller控制層UserController類
package com.sjzeis.controller; import com.sjzeis.entity.User; import com.sjzeis.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/getAllUser") public List<User> findAll(){ return userService.findAllUser(); } @RequestMapping("/getUserByUserID/{userid}") public List<User> findUserByUserId(@PathVariable int userid){ return userService.findUserByUserId(userid); } }
最終框架結構
測試
通過點擊IDEA右上角的啓動按鈕,或者在SjzeisApplication類中鼠標右鍵選擇運行啓動main方法,來啓動項目。
地址欄輸入 http://localhost:8080/user/getAllUser/,顯示如下:
地址欄輸入 http://localhost:8080/user/getUserByUserID/1,顯示如下:
通過測試的數據顯示,項目測試成功!
以上爲spring boot 整合mybatis實現的User讀取,接下來是添加UserMapper類的增加、更新和刪除方法,配置UserMapper.xml文件,添加UserService和UserController相關功能。完整代碼如下。
完整UserMapper類
package com.sjzeis.mapper; import com.sjzeis.entity.User; import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper public interface UserMapper { public List<User> findAllUser(); public List<User> findUserByUserId(int userid); public List<User> findUserByUsername(String username); public int insertUser(User user); public int updateUser(User user); public int deleteUser(User user); }
完整UserService類
package com.sjzeis.service; import com.sjzeis.entity.User; import com.sjzeis.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class UserService { @Autowired(required=false) public UserMapper userMapper; public List<User> findAllUser(){ return userMapper.findAllUser(); } public List<User> findUserByUserId(int userid){ return userMapper.findUserByUserId(userid); } public List<User> findUserByUsername(String username){ return userMapper.findUserByUsername(username); } public User insertUser(User user){ userMapper.insertUser(user); return user; } public int updateUser(User user){ return userMapper.updateUser(user); } public int deleteUser(User user){ return userMapper.deleteUser(user); } }
完整UserController類
package com.sjzeis.controller; import com.sjzeis.entity.User; import com.sjzeis.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @RequestMapping("/getAllUser") public List<User> findAll(){ return userService.findAllUser(); } @RequestMapping("/getUserByUserID/{userid}") public List<User> findUserByUserId(@PathVariable int userid){ return userService.findUserByUserId(userid); } @RequestMapping("/getUserByUsername/{username}") public List<User> findUserByUsername(@PathVariable String username){ return userService.findUserByUsername(username); } @RequestMapping("/insertUser") public User insertUser(User user){ return userService.insertUser(user); } @RequestMapping("/updateUser") public int updateUser(User user){ return userService.updateUser(user); } @RequestMapping("/deleteUser") public int deleteUser(User user){ return userService.deleteUser(user); } }
完整UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.sjzeis.mapper.UserMapper"> <resultMap id="result" type="com.sjzeis.entity.User"> <result column="userid" jdbcType="INTEGER" property="userid" /> <result column="username" jdbcType="VARCHAR" property="username" /> <result column="password" jdbcType="VARCHAR" property="password" /> </resultMap> <select id="findAllUser" resultType="com.sjzeis.entity.User"> select * from users; </select> <select id="findUserByUserId" resultType="com.sjzeis.entity.User"> select * from users where userid=#{userid}; </select> <select id="findUserByUsername" resultType="com.sjzeis.entity.User"> select * from users where username=#{username}; </select> <insert id="insertUser" parameterType="com.sjzeis.entity.User" keyProperty="userid" useGeneratedKeys="true"> insert into users(username,password) values (#{username},#{password}); </insert> <update id="updateUser" parameterType="com.sjzeis.entity.User"> update users set username=#{username},password=#{password} where userid=#{userid}; </update> <delete id="deleteUser" parameterType="com.sjzeis.entity.User"> delete from users where userid=#{userid}; </delete> </mapper>
啓動項目運行測試如下。
以上爲本實例的簡單講解,後續會講一些@註解的使用,以及實例的詳細介紹,敬請期待!
本實例代碼下載:https://download.csdn.net/download/u011924274/11995379