




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第5章SpringBoot訪問
SQL數據庫第5章SpringBoot訪問SQL數據庫5.1
配置數據源5.2
使用JdbcTemplate5.3
使用SpringDataJPA5.4
整合MyBatis25.1配置數據源數據庫分為兩種,即關系型數據庫和非關系型數據庫。關系型數據庫是指通過關系模型組織數據的數據庫,并且可以利用外鍵等保持一致性,如MySQL、Oracle、SQLServer等;而非關系型數據庫其實不像是數據庫,更像是一種以key-value模式存儲對象的結構,如Redis、MangoDB等。
SpringFramework為訪問SQL數據庫提供了廣泛的支持。從直接使用JdbcTemplate進行JDBC訪問到完全的對象關系映射(objectrelationalmapping)技術,比如Hibernate、Mybatis。SpringData提供了更多級別的功能,直接從接口創建的Repository實現,并使用了約定從方法名生成查詢。本節講解SpringBoot如何使用MySQL、SQLServer、Oracle等不同的關系型數據庫。
35.1配置數據源1.使用MySQL數據庫在SpringBoot中使用MySQL數據庫,以MySQL8.0為例,在pom.xml文件中添加依賴,并在perties文件中配置數據源信息。(1)在pom.xml文件中添加MySQL依賴,代碼如下所示。
(2)在perties配置文件中配置數據源信息,代碼如下所示。4<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope></dependency>
#數據庫驅動spring.datasource.driver-class-name=
com.mysql.cj.jdbc.Driver#數據庫地址spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC#數據庫用戶名spring.datasource.username=root#數據庫密碼spring.datasource.password=1234565.1配置數據源2.使用SQLServer數據庫
在SpringBoot中使用SQLServer數據庫。(1)在pom.xml文件中添加SQLServer依賴,代碼如下所示。
(2)在perties配置文件中配置數據源信息,代碼如下所示。5<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<scope>runtime</scope></dependency>
spring.datasource.driver-class-name=
com.microsoft.sqlserver.jdbc.SQLServerDriverspring.datasource.url=jdbc:sqlserver://localhost:1433;DatabaseName=testspring.datasource.username=saspring.datasource.password=1234565.1配置數據源3.使用Oracle數據庫在SpringBoot中使用Oracle數據庫。(1)在pom.xml文件中添加Oracle依賴,代碼如下所示。
(2)在perties配置文件中配置數據源信息,代碼如下所示。6<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<scope>runtime</scope></dependency>
spring.datasource.driver-class-name=
oracle.jdbc.driver.OracleDriverspring.datasource.url=jdbc:oracle:thin:@localhost:1521:testspring.datasource.username=adminspring.datasource.password=1234565.2使用JdbcTemplate
JDBC(JavaDataBaseConnectivity)是用于連接數據庫的規范,也就是用于執行數據庫SQL語句的JavaAPI。JdbcTemplate是Spring對JDBC的封裝,目的是讓JDBC更加易于使用,替我們完成所有的JDBC底層工作。因此,對于數據庫的操作,不再需要每次都進行連接、打開、關閉了。通過JdbcTemplate不需要進行全局修改,就可以輕松地應對開發人員常常要面對的增刪改查的操作。更為關鍵的是,JdbcTemplate對象也是通過自動配置機制注冊到Ioc容器中,自動化配置類是JdbcTemplateAutoConfiguration。在JdbcTemplate中,提供了大量的查詢和更新數據庫的方法,SpringJDBC就是使用這些方法來操作數據庫的,使用JdbcTemplate類可實現對數據表的數據進行增刪改查操作。75.2.1JdbcTemplate增刪改的操作
update()方法可以完成增加、修改和刪除操作,其常用方法具體介紹如下。intupdate(Stringsql):該方法是最簡單的update方法重載形式,可以直接傳入SQL語句并返回受影響的行數。intupdate(PreparedStatementCreatorpsc):該方法執行從PreparedStatementCreator返回的語句,然后返回受影響的行數。intupdate(Stringsql,PreparedStatementSetterpss):該方法通過PreparedStatementSetter設置SQL語句中的參數,并返回受影響的行數。intupdate(Stringsql,Object...args):該方法使用Object...args設置SQL語句中的參數,要求參數不能為空,并返回受影響的行數。85.2.1JdbcTemplate增刪改的操作下面通過示例講解使用JdbcTemplate的update()方法實現對MySQL數據庫中的數據表進行增刪改的操作,步驟如下。
(1)在MySQL數據庫中,新建一個chapter05的數據庫,并在新建user數據表,輸入幾條記錄,其表結構如圖5-1所示。(2)新建一個SpringBoot工程chapter05jdbctemplate,Group和Packagename為com.yzpc,在Dependencies依賴中選擇Web節點下的SpringWeb依賴和SQL節點下的JDBCAPI、MySQLDriver依賴,單擊Finish按鈕,如圖5-2所示。pom.xml文件中添加的依賴代碼,代碼如下所示。9<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>5.2.1JdbcTemplate增刪改的操作
在項目的perties配置文件中配置數據庫基本連接信息,這樣JdbcTemplate才能正常連接到數據庫,如下所示。(3)在項目src/main/java/路徑下的com.yzpc包中,新建一個pojo包,并在該包中新建User實體類,代碼如下所示。(4)在項目src/main/java/路徑下的com.yzpc包中,新建一個dao包,并在該包中新建UserDao接口,并在接口中定義添加、修改、刪除用戶的方法,代碼如下所示。在com.yzpc.dao包中,新建一個impl包,在該包中創建UserDao接口的實現類UserDaoImpl,并在類中實現添加、修改和刪除的方法,這里已添加為例,代碼如下所示。10spring.datasource.driver-class-name=
com.mysql.cj.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/chapter05?&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=123456packagecom.yzpc.pojo;publicclassUser{
privateintid;
privateStringusername;
privateStringpassword;
//此處省略構造方法
//此處省略相應屬性的setter/getter方法
//重寫toString方法
@Override
publicStringtoString(){
return"User{"+"id="+id+",username='"+username+'\''+",password='"+password+'\''+'}';}}packagecom.yzpc.dao;importcom.yzpc.pojo.User;publicinterfaceUserDao{
publicintaddUser(Useruser);
publicintupdateUser(Useruser);
publicintdeleteUser(intid);}@RepositorypublicclassUserDaoImplimplementsUserDao{
@Autowired
privateJdbcTemplatejdbcTemplate;
@Override
publicintaddUser(Useruser){
returnjdbcTemplate.update("insertintouser(username,password)values(?,?)",user.getUsername(),user.getPassword());}
//省略updateUser()、deleteUser()方法}5.2.1JdbcTemplate增刪改的操作(5)在src/main/java/路徑下的com.yzpc包中,新建一個controller包,在該包中新建UserController類,并在該類中添加增加、刪除、修改的方法,這里以添加用戶功能為例,代碼如下所示。
(6)啟動項目,在瀏覽器中訪問http://localhost:8080/addUser,插入數據成功的話,可以看到控制臺輸出了相應的提示信息,如圖5-3所示。在瀏覽器的頁面上也輸出了同樣的提示信息,如圖5-4所示。11@RestControllerpublicclassUserController{//使用@Autowired注解實現UserController對UserDao的依賴注入
@Autowired
privateUserDaouserDao;
@GetMapping("/addUser")
publicStringaddUser(){
intresult=userDao.addUser(newUser("yzpc1","yzpc1"));
Stringmessage;
if(result>0){
message=“成功往數據表中插入了
"+result+"條數據!";}else{
message="插入數據失敗!";}
System.out.println(message);
returnmessage;}
//省略updateUser()、deleteUser()方法}5.2.2JdbcTemplate查詢的操作JdbcTemplate對JDBC的流程做了封裝,提供了大量的query()方法來處理各種對數據庫表的查詢操作,常用的query()方法如下:Listquery(Stringsql,PreparedStatementSetterpss,RowMapperrowMapper)
Listquery(Stringsql,Object[]args,RowMapperrowMapper)
queryForObject(Stringsql,Object[]args,RowMapperrowMapper)
queryForList(Stringsql,Object[]args,class<T>elementType)125.2.2JdbcTemplate查詢的操作下面我們嘗試一下從user表中查詢數據,在UserDao接口中增加按照id查詢用戶的方法和查詢所有用戶的方法,在UserDaoImpl中具體實現兩個方法,其實現步驟如下:(1)在UserDao接口中,分別創建一個通過id查詢單個用戶信息和查詢所有用戶信息的方法,代碼如下所示。(2)在UserDao接口實現類UserDaoImpl中,實現接口中的方法,并使用query()方法分別進行查詢,代碼如下所示。(3)在UserController類中,添加查詢方法getUserById()、getAllUser()來進行查詢,代碼如下所示。13publicUsergetUserById(intid);publicList<User>getAllUser();//實例化BeanPropertyRowMapper對象,將結果集通過Java的反射機制映射到Java對象中RowMapper<User>rowMapper=newBeanPropertyRowMapper<User>(User.class);@OverridepublicUsergetUserById(intid){
Stringsql="select*fromuserwhereid=?";
returnjdbcTemplate.queryForObject(sql,rowMapper,id);}@OverridepublicList<User>getAllUser(){
Stringsql="select*fromUser";
returnjdbcTemplate.query(sql,rowMapper);}@GetMapping("/getUserById")publicUsergetUserById(intid){
Useruser;
user=userDao.getUserById(id);
if(user!=null){
System.out.println("查詢id為"+id+"的User對象為:"
+user);}
returnuser;}@GetMapping("/getAllUser")publicList<User>getAllUser(){
List<User>users=userDao.getAllUser();
if(users!=null){
System.out.println("所有User對象列表為:");
for(Useruser:users){//循環輸出結集合中對象
System.out.println(user);}}
returnusers;}5.2.2JdbcTemplate查詢的操作
(4)重新運行項目,在瀏覽器中訪問http://localhost:8080/getUserById?id=10001,根據id查詢用戶控制臺輸出結果,如圖5-9所示。
訪問http://localhost:8080/getAllUser,查詢所有用戶控制臺輸出結果,如圖5-10所示。
如果查詢一個不存在的數據,例如http://localhost:8080/getUserById?id=10006,控制臺拋出了錯誤異常,如圖5-11所示。145.2.2JdbcTemplate查詢的操作
查看DataAccessUtils源代碼,看到nullableSingleResult在查到空集合的時候,默認拋出了EmptyResultDataAccessException異常,代碼如下所示。修改getUserById()方法代碼,在方法體內捕獲EmptyResultDataAccessException異常,代碼修改如下所示。重新啟動項目,測試方法和前面一致。同樣,對于getAllUser()方法,去執行查詢查詢操作時,假設數據表中沒有數據,也會拋出EmptyResultDataAccessException,在getAllUser()方法體內補獲異常的方法和在getUserById()方法體中基本一致。15@Nullablepublicstatic<T>TnullableSingleResult(@NullableCollection<T>results)throwsIncorrectResultSizeDataAccessException
{
if(CollectionUtils.isEmpty(results)){
thrownewEmptyResultDataAccessException(1);}elseif(results.size()>1){
thrownewIncorrectResultSizeDataAccessException(1,results.size());}else{
returnresults.iterator().next();}}@GetMapping("/getUserById")publicUsergetUserById(intid){
Useruser=null;
try{user=userDao.getUserById(id);
if(user!=null){
System.out.println("查詢id為"+id+"的User對象為:"+user);}}catch(EmptyResultDataAccessExceptione){
System.err.println("未查詢到id為
"+id+"的記錄!");
returnnull;}
returnuser;}5.3使用SpringDataJPA
5.3.1SpringDataJPA介紹
SpringData是Spring的一個子項目,旨在統一和簡化各類型數據的持久化存儲方式,而不局限于是關系型數據還是非關系型數據庫。JPA(JavaPersistenceAPI)即Java的持久層的API,用于對象的持久化,它是一個非常強大的ORM持久化的解決方案。JPA是一個規范化接口,封裝了Hibernate的操作作為默認實現,讓用戶不通過任何配置即可完成數據庫的操作。SpringData在JPA規范的基礎上,充分利用其優點,提出了SpringDataJPA模塊對具有ORM關系數據進行持久化操作。JPA、SpringData和Hibernate關系,如圖5-12所示。165.3.1SpringDataJPA介紹
SpringDataJPA是Spring在ORM框架、JPA規范的基礎上封裝的一套新的JPA應用規范,也是靠Hibernate等ORM框架實現的一種解決方案。它提供了增刪改查等功能,可以使用較少的代碼實現數據操作,同時還易于擴展。SpringDataJPA是Spring提供的一套對JPA操作更加高級的封裝,是在JPA規范下的專門用來進行數據持久化的解決方案。SpringDataJPA通過基于JPA的Repository極大地簡化了JPA的寫法,在幾乎不寫實現的情況下,實現數據庫的訪問和操作。使用SpringDataJPA建立數據訪問層十分方便,只需要定義一個繼承JpaRepository接口的接口即可。繼承了JpaRepository接口的自定義訪問接口,具有JpaRepository接口的所有數據訪問操作方法,JpaRepository接口的源代碼如下所示。17@NoRepositoryBeanpublicinterfaceJpaRepository<T,ID>extendsPagingAndSortingRepository<T,ID>,QueryByExampleExecutor<T>{List<T>findAll(); //查找所有實體List<T>findAll(Sortvar1); //排序、查找所有實體List<T>findAllById(Iterable<ID>var1);//返回指定一組ID實體<SextendsT>List<S>saveAll(Iterable<S>var1);//保存集合
voidflush(); //執行緩存與數據庫同步<SextendsT>SsaveAndFlush(Svar1);//強制執行持久化
voiddeleteInBatch(Iterable<T>var1);
//刪除一個實體集合
voiddeleteAllInBatch(); //刪除所有實體TgetOne(IDvar1);//返回ID對應的實體。若不存在,則返回空值
//查詢滿足Example的所有對象<SextendsT>List<S>findAll(Example<S>var1);
//查詢滿足Example的所有對象,并且進行排序返回<SextendsT>List<S>findAll(Example<S>var1,Sortvar2);}5.3.1SpringDataJPA介紹
JpaRepository接口繼承了PagingAndSortingRepository接口、QueryByExampleExecutor接口,JpaRepository接口的繼承關系,如圖5-13所示。JpaRepository接口繼承關系中涉及的接口進行說明:Repository接口是SpringDataJPA提供的用于自定義Repository接口的頂級父接口,該接口中沒有聲明任何方法。CrudRepository接口是Repository的繼承接口之一,包含了一些基本的CRUD方法。PagingAndSortingRepository接口繼承CrudRepository接口的同時,提供了分頁和排序兩個方法。QueryByExampleExecutor接口是進行條件封裝查詢的頂級父接口,允許通過Example實例執行復雜條件查詢。185.3.2整合SpringDataJPA下面通過示例來講解SpringBoot整合SpringDataJPA,步驟如下:(1)新建一個SpringBoot工程chapter05jpa,Group和Packagename為com.yzpc,在Dependencies依賴中選擇Web節點下的SpringWeb依賴和SQL節點下的SpringDataJPA、MySQLDriver依賴,單擊Finish按鈕,如圖5-14所示。pom.xml中自動添加的依賴代碼,如下所示。
(2)在perties配置文件中加入數據庫配置,與5.2.1小節第(2)步中介紹的一致。新建一個chapter05jpa的數據庫,接下來設置JPA的基本配置,如下所示。19<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--省略Web中SpringWeb依賴和SQL中的MySQlDriver依賴代碼-->#省略數據庫配置的設置,參看5.2.1小節第(2)步,數據庫使用chapter05jpa#JPA對應的數據庫類型spring.jpa.database=mysql#在控制臺打印SQLspring.jpa.show-sql=true#update:項目啟動,加載Hibernate時,根據實體類類更新數據庫中的表#validate:在加載Hibernate時,驗證創建數據表的結構#create:每次加載Hibernate時,重新創建數據表結構,造成數據丟失#create-drop:加載Hibernate時創建,退出時刪除表結構#none:啟動時不做任何操作spring.jpa.hibernate.ddl-auto=create5.3.2整合SpringDataJPA
(3)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個pojo包,并在該包中新建一個User實體類,添加JPA對應的注解進行映射配置,代碼如下所示。(4)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個repository包,并在該包中新建一個用于對數據庫表user進行操作的接口UserRepository,代碼如下所示。(5)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個controller包,并在該包中新建一個用于測試的類UserController,這里以存儲用戶和添加用戶為例,代碼如下所示。205.3.2整合SpringDataJPA(6)啟動項目,在控制臺輸出Hibernate的相關語句,如圖5-15所示。這是因為,在perties配置文件中spring.jpa.hibernate.ddl-auto的值設置為create,即通過Hibernate實現數據表單的創建。通過SQLyog工具,查看數據庫,發現user數據表已經創建,但并沒有記錄,下面分別來測試相應的方法實現。訪問http://localhost:8080/saveUser,查看控制臺,如圖5-16所示;查看數據表,如圖5-17所示。
訪問http://localhost:8080/addUser?username=sj&password=sj,查看控制臺輸出。就可以看到一條insert的插入語句,查看數據表,發現增加了一條記錄,查看數據表,如圖所示。215.3.2整合SpringDataJPA
訪問http://localhost:8080/updateUser?id=4&username=sss&password=sss,查看數據表發現id為4的記錄的username和password字段都已經修改為sss,如圖所示。
訪問http://localhost:8080/deleteUser?id=4,查看數據表,id為4記錄已經被刪除,如圖所示。
訪問http://localhost:8080/getUserById?id=3,網頁頁面輸出id為3的記錄,如圖所示;查看控制臺,輸出相關信息,如圖所示。
訪問http://localhost:8080/getAllUser,查詢所有用戶信息,網頁頁面顯示查詢的所有用戶,如圖所示;控制臺輸出查詢的所有用戶,如圖所示。225.3.2整合SpringDataJPA
訪問http://localhost:8080/findUserById?id=2,這里調用的是UserRepository接口中的自定義的方法,查詢id為2的用戶信息,控制臺輸出該用戶,如圖所示。
訪問http://localhost:8080/findUserByName?username=admin,查詢username為admin的用戶信息,控制臺輸出,如圖所示。
訪問http://localhost:8080/findMaxIdUser,查詢最大id號的用戶信息,控制臺輸出,如圖所示。
如果數據表中沒有記錄,或者要操作的條件不存在,可能會出現異常,大家可以參考5.2小節中對于相關異常的處理。235.4整合MyBatisMyBatis和JPA一樣,也是一款優秀的持久層框架,它支持定制化SQL、存儲過程以及高級映射,避免了幾乎所有的JDBC代碼和手動設置參數以及獲取結果集。5.4.1基于XML配置的方式整合MyBatis下面通過具體的示例來講解SpringBoot整合MyBatis,具體步驟如下。(1)新建一個SpringBoot工程chapter05mybatis,Group和Packagename為com.yzpc,在Dependencies依賴中選擇Web節點下的SpringWeb依賴和SQL節點下的MyBatisFramework、MySQLDriver依賴。pom.xml中自動添加的依賴代碼,如下所示。
在perties配置文件中加入數據庫連接配置,與5.2.1小節第(2)步中介紹的一致。24<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!--省略Web中SpringWeb依賴和SQL中的MySQlDriver依賴代碼-->5.4.1基于XML配置的方式整合MyBatis(2)在MySQL中,創建一個名為chapter05mybatis的數據庫,在該數據庫中創建user數據表,并預先插入幾條測試數據,相應的SQL語句如下所示。(3)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個pojo的包,并在該包中新建與數據表user對應的實體類User,代碼如下所示。(4)在項目的src/mian/java/路徑下的com.yzpc包中,新建一個mapper的包,在并在該包中新建UserMapper的接口,代碼如下所示。25#創建數據庫CREATEDATABASEchapter05mybatis;#選擇使用數據庫USEchapter05mybatis;#創建user數據表并插入相關數據DROPTABLEIFEXISTSUSER;CREATETABLEUSER(idINT(10)NOTNULLAUTO_INCREMENT,usernameVARCHAR(20)DEFAULTNULL,passwordVARCHAR(20)DEFAULTNULL,PRIMARYKEY(id))ENGINE=INNODBDEFAULTCHARSET=utf8;INSERTINTOUSERVALUES(1,'admin','admin');INSERTINTOUSERVALUES(2,'yzpc','yzpc');INSERTINTOUSERVALUES(3,'my','my');packagecom.yzpc.pojo;publicclassUser{
privateintid;
privateStringusername;
privateStringpassword;
//此處省略相應屬性的setter/getter方法
//此處省略構造方法
//重寫toString方法}packagecom.yzpc.mapper;importcom.yzpc.pojo.User;importorg.apache.ibatis.annotations.Mapper;importjava.util.List;@Mapper //表明該接口是一個MyBatis中的MapperpublicinterfaceUserMapper{
publicintaddUser(Useruser);
publicintupdateUser(Useruser);
publicintdeleteUser(intid);
publicUsergetUserById(intid);
publicList<User>getAllUser();}5.4.1基于XML配置的方式整合MyBatis(5)在src/main/resources/路徑下新建mapper目錄,并在該目錄下,新建UserMapper.xml文件,對應前面UserMapper接口的方法,#{}用來代替接口中的參數,實體類中的屬性可以直接通過#{實體類屬性名}獲取,內容如下所示。UserMapper.xml放在resources目錄下,這樣就不用擔心打包時被忽略了,但是放在resources目錄下,又不能自動被掃描到,此時在perties中添加mybatis掃描mapper的路徑,需要在perties配置文件中指定位置,代碼如下所示。UserMapper.xml除了放在resources目錄下,還可以是直接放在UserMapper所在的com.yzpc.mapper包下,該包下的UserMapper.xml會被自動掃描到,需要在pom.xml文件中再添加如下配置。26<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC“-////DTDMapper3.0//EN”
“/dtd/mybatis-3-mapper.dtd”>
<!--此處與接口類地址對應-->
<mappernamespace=“com.yzpc.mapper.UserMapper”>
<!--此處與接口方法名對應,指定參數類型與返回結果類型-->
<insertid=“addUser”parameterType=“com.yzpc.pojo.User”>
insertintouser(username,password)values(#{username},#{password})
</insert>
<!--省略updateUser、deleteUser、getUserById--
>
<selectid="getAllUser"resultType="com.yzpc.pojo.User">
select*fromuser
</select>
</mapper>#指定映射xml文件位置#classpath對應resources,*.xml表示配置mapper下所有xml文件mybatis.mapper-locations=classpath:mapper/*.xml<build><resources><resource><directory>src/main/java</directory><includes><include>**/*.xml</include></includes></resource><resource><directory>src/main/resources</directory></resource></resources></build>5.4.1基于XML配置的方式整合MyBatis(6)在項目的src/mian/java/路徑下的com.yzpc包中,新建controller包,在該包中新建UserController類,并在該類中添加增刪改查的方法,這里增加用戶為例,代碼如下所示。(7)啟動項目,在瀏覽器地址欄中,依次訪問增刪改查的請求,相應請求如下。增加用戶:http://localhost:8080/addUser修改用戶:http://localhost:8080/updateUser刪除用戶:http://localhost:8080/deleteUser/4查詢用戶:http://localhost:8080/getUserById?id=3查詢所有用戶:http://localhost:8080/getAllUser
瀏覽器和控制臺上輸出了相應信息,控制臺的運行結果,如圖所示。27@RestControllerpublicclassUserController{
@Autowired
User
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 通信工程承包施工合同協議書
- 專業品牌策劃與推廣服務協議
- 特色農產品養殖與收購協議書
- 高一(上)化學階段檢測卷
- 《中世紀的歐洲經濟與文化發展高中歷史教案》
- 八步區總工會活動方案
- 公交公司元旦活動方案
- 公交廣告活動方案
- 畢業那一天初三作文800字10篇范文
- 公眾號視頻活動方案
- 朗文4B 復習提要及朗文4B單詞及句子
- TSGD0012023年壓力管道安全技術監察規程-工業管道(高清晰版)
- 運動控制系統阮毅陳維鈞課后答案清華大學出版社
- T-HIS 005-2021 基于窄帶物聯網(NB-IoT)技術的水表抄表系統
- YC/T 207-2014煙用紙張中溶劑殘留的測定頂空-氣相色譜/質譜聯用法
- SB/T 10977-2013倉儲作業規范
- GB/T 18109-2011凍魚
- 邏輯學概論作業含答案
- 防治水培訓課件
- 光譜CT臨床應用
- 山東省水利水電工程施工企業安全生產管理三類人員考試題庫-上(單選、多選題)
評論
0/150
提交評論