版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章SpringBoot訪問(wèn)
SQL數(shù)據(jù)庫(kù)第5章SpringBoot訪問(wèn)SQL數(shù)據(jù)庫(kù)5.1
配置數(shù)據(jù)源5.2
使用JdbcTemplate5.3
使用SpringDataJPA5.4
整合MyBatis25.1配置數(shù)據(jù)源數(shù)據(jù)庫(kù)分為兩種,即關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù)。關(guān)系型數(shù)據(jù)庫(kù)是指通過(guò)關(guān)系模型組織數(shù)據(jù)的數(shù)據(jù)庫(kù),并且可以利用外鍵等保持一致性,如MySQL、Oracle、SQLServer等;而非關(guān)系型數(shù)據(jù)庫(kù)其實(shí)不像是數(shù)據(jù)庫(kù),更像是一種以key-value模式存儲(chǔ)對(duì)象的結(jié)構(gòu),如Redis、MangoDB等。
SpringFramework為訪問(wèn)SQL數(shù)據(jù)庫(kù)提供了廣泛的支持。從直接使用JdbcTemplate進(jìn)行JDBC訪問(wèn)到完全的對(duì)象關(guān)系映射(objectrelationalmapping)技術(shù),比如Hibernate、Mybatis。SpringData提供了更多級(jí)別的功能,直接從接口創(chuàng)建的Repository實(shí)現(xiàn),并使用了約定從方法名生成查詢(xún)。本節(jié)講解SpringBoot如何使用MySQL、SQLServer、Oracle等不同的關(guān)系型數(shù)據(jù)庫(kù)。
35.1配置數(shù)據(jù)源1.使用MySQL數(shù)據(jù)庫(kù)在SpringBoot中使用MySQL數(shù)據(jù)庫(kù),以MySQL8.0為例,在pom.xml文件中添加依賴(lài),并在perties文件中配置數(shù)據(jù)源信息。(1)在pom.xml文件中添加MySQL依賴(lài),代碼如下所示。
(2)在perties配置文件中配置數(shù)據(jù)源信息,代碼如下所示。4<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope></dependency>
#數(shù)據(jù)庫(kù)驅(qū)動(dòng)spring.datasource.driver-class-name=
com.mysql.cj.jdbc.Driver#數(shù)據(jù)庫(kù)地址spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC#數(shù)據(jù)庫(kù)用戶(hù)名spring.datasource.username=root#數(shù)據(jù)庫(kù)密碼spring.datasource.password=1234565.1配置數(shù)據(jù)源2.使用SQLServer數(shù)據(jù)庫(kù)
在SpringBoot中使用SQLServer數(shù)據(jù)庫(kù)。(1)在pom.xml文件中添加SQLServer依賴(lài),代碼如下所示。
(2)在perties配置文件中配置數(shù)據(jù)源信息,代碼如下所示。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配置數(shù)據(jù)源3.使用Oracle數(shù)據(jù)庫(kù)在SpringBoot中使用Oracle數(shù)據(jù)庫(kù)。(1)在pom.xml文件中添加Oracle依賴(lài),代碼如下所示。
(2)在perties配置文件中配置數(shù)據(jù)源信息,代碼如下所示。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)是用于連接數(shù)據(jù)庫(kù)的規(guī)范,也就是用于執(zhí)行數(shù)據(jù)庫(kù)SQL語(yǔ)句的JavaAPI。JdbcTemplate是Spring對(duì)JDBC的封裝,目的是讓JDBC更加易于使用,替我們完成所有的JDBC底層工作。因此,對(duì)于數(shù)據(jù)庫(kù)的操作,不再需要每次都進(jìn)行連接、打開(kāi)、關(guān)閉了。通過(guò)JdbcTemplate不需要進(jìn)行全局修改,就可以輕松地應(yīng)對(duì)開(kāi)發(fā)人員常常要面對(duì)的增刪改查的操作。更為關(guān)鍵的是,JdbcTemplate對(duì)象也是通過(guò)自動(dòng)配置機(jī)制注冊(cè)到Ioc容器中,自動(dòng)化配置類(lèi)是JdbcTemplateAutoConfiguration。在JdbcTemplate中,提供了大量的查詢(xún)和更新數(shù)據(jù)庫(kù)的方法,SpringJDBC就是使用這些方法來(lái)操作數(shù)據(jù)庫(kù)的,使用JdbcTemplate類(lèi)可實(shí)現(xiàn)對(duì)數(shù)據(jù)表的數(shù)據(jù)進(jìn)行增刪改查操作。75.2.1JdbcTemplate增刪改的操作
update()方法可以完成增加、修改和刪除操作,其常用方法具體介紹如下。intupdate(Stringsql):該方法是最簡(jiǎn)單的update方法重載形式,可以直接傳入SQL語(yǔ)句并返回受影響的行數(shù)。intupdate(PreparedStatementCreatorpsc):該方法執(zhí)行從PreparedStatementCreator返回的語(yǔ)句,然后返回受影響的行數(shù)。intupdate(Stringsql,PreparedStatementSetterpss):該方法通過(guò)PreparedStatementSetter設(shè)置SQL語(yǔ)句中的參數(shù),并返回受影響的行數(shù)。intupdate(Stringsql,Object...args):該方法使用Object...args設(shè)置SQL語(yǔ)句中的參數(shù),要求參數(shù)不能為空,并返回受影響的行數(shù)。85.2.1JdbcTemplate增刪改的操作下面通過(guò)示例講解使用JdbcTemplate的update()方法實(shí)現(xiàn)對(duì)MySQL數(shù)據(jù)庫(kù)中的數(shù)據(jù)表進(jìn)行增刪改的操作,步驟如下。
(1)在MySQL數(shù)據(jù)庫(kù)中,新建一個(gè)chapter05的數(shù)據(jù)庫(kù),并在新建user數(shù)據(jù)表,輸入幾條記錄,其表結(jié)構(gòu)如圖5-1所示。(2)新建一個(gè)SpringBoot工程chapter05jdbctemplate,Group和Packagename為com.yzpc,在Dependencies依賴(lài)中選擇Web節(jié)點(diǎn)下的SpringWeb依賴(lài)和SQL節(jié)點(diǎn)下的JDBCAPI、MySQLDriver依賴(lài),單擊Finish按鈕,如圖5-2所示。pom.xml文件中添加的依賴(lài)代碼,代碼如下所示。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增刪改的操作
在項(xiàng)目的perties配置文件中配置數(shù)據(jù)庫(kù)基本連接信息,這樣JdbcTemplate才能正常連接到數(shù)據(jù)庫(kù),如下所示。(3)在項(xiàng)目src/main/java/路徑下的com.yzpc包中,新建一個(gè)pojo包,并在該包中新建User實(shí)體類(lèi),代碼如下所示。(4)在項(xiàng)目src/main/java/路徑下的com.yzpc包中,新建一個(gè)dao包,并在該包中新建UserDao接口,并在接口中定義添加、修改、刪除用戶(hù)的方法,代碼如下所示。在com.yzpc.dao包中,新建一個(gè)impl包,在該包中創(chuàng)建UserDao接口的實(shí)現(xiàn)類(lèi)UserDaoImpl,并在類(lèi)中實(shí)現(xiàn)添加、修改和刪除的方法,這里已添加為例,代碼如下所示。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;
//此處省略構(gòu)造方法
//此處省略相應(yīng)屬性的setter/getter方法
//重寫(xiě)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());}
//省略u(píng)pdateUser()、deleteUser()方法}5.2.1JdbcTemplate增刪改的操作(5)在src/main/java/路徑下的com.yzpc包中,新建一個(gè)controller包,在該包中新建UserController類(lèi),并在該類(lèi)中添加增加、刪除、修改的方法,這里以添加用戶(hù)功能為例,代碼如下所示。
(6)啟動(dòng)項(xiàng)目,在瀏覽器中訪問(wèn)http://localhost:8080/addUser,插入數(shù)據(jù)成功的話,可以看到控制臺(tái)輸出了相應(yīng)的提示信息,如圖5-3所示。在瀏覽器的頁(yè)面上也輸出了同樣的提示信息,如圖5-4所示。11@RestControllerpublicclassUserController{//使用@Autowired注解實(shí)現(xiàn)UserController對(duì)UserDao的依賴(lài)注入
@Autowired
privateUserDaouserDao;
@GetMapping("/addUser")
publicStringaddUser(){
intresult=userDao.addUser(newUser("yzpc1","yzpc1"));
Stringmessage;
if(result>0){
message=“成功往數(shù)據(jù)表中插入了
"+result+"條數(shù)據(jù)!";}else{
message="插入數(shù)據(jù)失??!";}
System.out.println(message);
returnmessage;}
//省略u(píng)pdateUser()、deleteUser()方法}5.2.2JdbcTemplate查詢(xún)的操作JdbcTemplate對(duì)JDBC的流程做了封裝,提供了大量的query()方法來(lái)處理各種對(duì)數(shù)據(jù)庫(kù)表的查詢(xún)操作,常用的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查詢(xún)的操作下面我們嘗試一下從user表中查詢(xún)數(shù)據(jù),在UserDao接口中增加按照id查詢(xún)用戶(hù)的方法和查詢(xún)所有用戶(hù)的方法,在UserDaoImpl中具體實(shí)現(xiàn)兩個(gè)方法,其實(shí)現(xiàn)步驟如下:(1)在UserDao接口中,分別創(chuàng)建一個(gè)通過(guò)id查詢(xún)單個(gè)用戶(hù)信息和查詢(xún)所有用戶(hù)信息的方法,代碼如下所示。(2)在UserDao接口實(shí)現(xiàn)類(lèi)UserDaoImpl中,實(shí)現(xiàn)接口中的方法,并使用query()方法分別進(jìn)行查詢(xún),代碼如下所示。(3)在UserController類(lèi)中,添加查詢(xún)方法getUserById()、getAllUser()來(lái)進(jìn)行查詢(xún),代碼如下所示。13publicUsergetUserById(intid);publicList<User>getAllUser();//實(shí)例化BeanPropertyRowMapper對(duì)象,將結(jié)果集通過(guò)Java的反射機(jī)制映射到Java對(duì)象中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("查詢(xún)id為"+id+"的User對(duì)象為:"
+user);}
returnuser;}@GetMapping("/getAllUser")publicList<User>getAllUser(){
List<User>users=userDao.getAllUser();
if(users!=null){
System.out.println("所有User對(duì)象列表為:");
for(Useruser:users){//循環(huán)輸出結(jié)集合中對(duì)象
System.out.println(user);}}
returnusers;}5.2.2JdbcTemplate查詢(xún)的操作
(4)重新運(yùn)行項(xiàng)目,在瀏覽器中訪問(wèn)http://localhost:8080/getUserById?id=10001,根據(jù)id查詢(xún)用戶(hù)控制臺(tái)輸出結(jié)果,如圖5-9所示。
訪問(wèn)http://localhost:8080/getAllUser,查詢(xún)所有用戶(hù)控制臺(tái)輸出結(jié)果,如圖5-10所示。
如果查詢(xún)一個(gè)不存在的數(shù)據(jù),例如http://localhost:8080/getUserById?id=10006,控制臺(tái)拋出了錯(cuò)誤異常,如圖5-11所示。145.2.2JdbcTemplate查詢(xún)的操作
查看DataAccessUtils源代碼,看到nullableSingleResult在查到空集合的時(shí)候,默認(rèn)拋出了EmptyResultDataAccessException異常,代碼如下所示。修改getUserById()方法代碼,在方法體內(nèi)捕獲EmptyResultDataAccessException異常,代碼修改如下所示。重新啟動(dòng)項(xiàng)目,測(cè)試方法和前面一致。同樣,對(duì)于getAllUser()方法,去執(zhí)行查詢(xún)查詢(xún)操作時(shí),假設(shè)數(shù)據(jù)表中沒(méi)有數(shù)據(jù),也會(huì)拋出EmptyResultDataAccessException,在getAllUser()方法體內(nèi)補(bǔ)獲異常的方法和在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("查詢(xún)id為"+id+"的User對(duì)象為:"+user);}}catch(EmptyResultDataAccessExceptione){
System.err.println("未查詢(xún)到id為
"+id+"的記錄!");
returnnull;}
returnuser;}5.3使用SpringDataJPA
5.3.1SpringDataJPA介紹
SpringData是Spring的一個(gè)子項(xiàng)目,旨在統(tǒng)一和簡(jiǎn)化各類(lèi)型數(shù)據(jù)的持久化存儲(chǔ)方式,而不局限于是關(guān)系型數(shù)據(jù)還是非關(guān)系型數(shù)據(jù)庫(kù)。JPA(JavaPersistenceAPI)即Java的持久層的API,用于對(duì)象的持久化,它是一個(gè)非常強(qiáng)大的ORM持久化的解決方案。JPA是一個(gè)規(guī)范化接口,封裝了Hibernate的操作作為默認(rèn)實(shí)現(xiàn),讓用戶(hù)不通過(guò)任何配置即可完成數(shù)據(jù)庫(kù)的操作。SpringData在JPA規(guī)范的基礎(chǔ)上,充分利用其優(yōu)點(diǎn),提出了SpringDataJPA模塊對(duì)具有ORM關(guān)系數(shù)據(jù)進(jìn)行持久化操作。JPA、SpringData和Hibernate關(guān)系,如圖5-12所示。165.3.1SpringDataJPA介紹
SpringDataJPA是Spring在ORM框架、JPA規(guī)范的基礎(chǔ)上封裝的一套新的JPA應(yīng)用規(guī)范,也是靠Hibernate等ORM框架實(shí)現(xiàn)的一種解決方案。它提供了增刪改查等功能,可以使用較少的代碼實(shí)現(xiàn)數(shù)據(jù)操作,同時(shí)還易于擴(kuò)展。SpringDataJPA是Spring提供的一套對(duì)JPA操作更加高級(jí)的封裝,是在JPA規(guī)范下的專(zhuān)門(mén)用來(lái)進(jìn)行數(shù)據(jù)持久化的解決方案。SpringDataJPA通過(guò)基于JPA的Repository極大地簡(jiǎn)化了JPA的寫(xiě)法,在幾乎不寫(xiě)實(shí)現(xiàn)的情況下,實(shí)現(xiàn)數(shù)據(jù)庫(kù)的訪問(wèn)和操作。使用SpringDataJPA建立數(shù)據(jù)訪問(wèn)層十分方便,只需要定義一個(gè)繼承JpaRepository接口的接口即可。繼承了JpaRepository接口的自定義訪問(wèn)接口,具有JpaRepository接口的所有數(shù)據(jù)訪問(wèn)操作方法,JpaRepository接口的源代碼如下所示。17@NoRepositoryBeanpublicinterfaceJpaRepository<T,ID>extendsPagingAndSortingRepository<T,ID>,QueryByExampleExecutor<T>{List<T>findAll(); //查找所有實(shí)體List<T>findAll(Sortvar1); //排序、查找所有實(shí)體List<T>findAllById(Iterable<ID>var1);//返回指定一組ID實(shí)體<SextendsT>List<S>saveAll(Iterable<S>var1);//保存集合
voidflush(); //執(zhí)行緩存與數(shù)據(jù)庫(kù)同步<SextendsT>SsaveAndFlush(Svar1);//強(qiáng)制執(zhí)行持久化
voiddeleteInBatch(Iterable<T>var1);
//刪除一個(gè)實(shí)體集合
voiddeleteAllInBatch(); //刪除所有實(shí)體TgetOne(IDvar1);//返回ID對(duì)應(yīng)的實(shí)體。若不存在,則返回空值
//查詢(xún)滿(mǎn)足Example的所有對(duì)象<SextendsT>List<S>findAll(Example<S>var1);
//查詢(xún)滿(mǎn)足Example的所有對(duì)象,并且進(jìn)行排序返回<SextendsT>List<S>findAll(Example<S>var1,Sortvar2);}5.3.1SpringDataJPA介紹
JpaRepository接口繼承了PagingAndSortingRepository接口、QueryByExampleExecutor接口,JpaRepository接口的繼承關(guān)系,如圖5-13所示。JpaRepository接口繼承關(guān)系中涉及的接口進(jìn)行說(shuō)明:Repository接口是SpringDataJPA提供的用于自定義Repository接口的頂級(jí)父接口,該接口中沒(méi)有聲明任何方法。CrudRepository接口是Repository的繼承接口之一,包含了一些基本的CRUD方法。PagingAndSortingRepository接口繼承CrudRepository接口的同時(shí),提供了分頁(yè)和排序兩個(gè)方法。QueryByExampleExecutor接口是進(jìn)行條件封裝查詢(xún)的頂級(jí)父接口,允許通過(guò)Example實(shí)例執(zhí)行復(fù)雜條件查詢(xún)。185.3.2整合SpringDataJPA下面通過(guò)示例來(lái)講解SpringBoot整合SpringDataJPA,步驟如下:(1)新建一個(gè)SpringBoot工程chapter05jpa,Group和Packagename為com.yzpc,在Dependencies依賴(lài)中選擇Web節(jié)點(diǎn)下的SpringWeb依賴(lài)和SQL節(jié)點(diǎn)下的SpringDataJPA、MySQLDriver依賴(lài),單擊Finish按鈕,如圖5-14所示。pom.xml中自動(dòng)添加的依賴(lài)代碼,如下所示。
(2)在perties配置文件中加入數(shù)據(jù)庫(kù)配置,與5.2.1小節(jié)第(2)步中介紹的一致。新建一個(gè)chapter05jpa的數(shù)據(jù)庫(kù),接下來(lái)設(shè)置JPA的基本配置,如下所示。19<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!--省略Web中SpringWeb依賴(lài)和SQL中的MySQlDriver依賴(lài)代碼-->#省略數(shù)據(jù)庫(kù)配置的設(shè)置,參看5.2.1小節(jié)第(2)步,數(shù)據(jù)庫(kù)使用chapter05jpa#JPA對(duì)應(yīng)的數(shù)據(jù)庫(kù)類(lèi)型spring.jpa.database=mysql#在控制臺(tái)打印SQLspring.jpa.show-sql=true#update:項(xiàng)目啟動(dòng),加載Hibernate時(shí),根據(jù)實(shí)體類(lèi)類(lèi)更新數(shù)據(jù)庫(kù)中的表#validate:在加載Hibernate時(shí),驗(yàn)證創(chuàng)建數(shù)據(jù)表的結(jié)構(gòu)#create:每次加載Hibernate時(shí),重新創(chuàng)建數(shù)據(jù)表結(jié)構(gòu),造成數(shù)據(jù)丟失#create-drop:加載Hibernate時(shí)創(chuàng)建,退出時(shí)刪除表結(jié)構(gòu)#none:?jiǎn)?dòng)時(shí)不做任何操作spring.jpa.hibernate.ddl-auto=create5.3.2整合SpringDataJPA
(3)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)pojo包,并在該包中新建一個(gè)User實(shí)體類(lèi),添加JPA對(duì)應(yīng)的注解進(jìn)行映射配置,代碼如下所示。(4)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)repository包,并在該包中新建一個(gè)用于對(duì)數(shù)據(jù)庫(kù)表user進(jìn)行操作的接口UserRepository,代碼如下所示。(5)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)controller包,并在該包中新建一個(gè)用于測(cè)試的類(lèi)UserController,這里以存儲(chǔ)用戶(hù)和添加用戶(hù)為例,代碼如下所示。205.3.2整合SpringDataJPA(6)啟動(dòng)項(xiàng)目,在控制臺(tái)輸出Hibernate的相關(guān)語(yǔ)句,如圖5-15所示。這是因?yàn)?,在perties配置文件中spring.jpa.hibernate.ddl-auto的值設(shè)置為create,即通過(guò)Hibernate實(shí)現(xiàn)數(shù)據(jù)表單的創(chuàng)建。通過(guò)SQLyog工具,查看數(shù)據(jù)庫(kù),發(fā)現(xiàn)user數(shù)據(jù)表已經(jīng)創(chuàng)建,但并沒(méi)有記錄,下面分別來(lái)測(cè)試相應(yīng)的方法實(shí)現(xiàn)。訪問(wèn)http://localhost:8080/saveUser,查看控制臺(tái),如圖5-16所示;查看數(shù)據(jù)表,如圖5-17所示。
訪問(wèn)http://localhost:8080/addUser?username=sj&password=sj,查看控制臺(tái)輸出。就可以看到一條insert的插入語(yǔ)句,查看數(shù)據(jù)表,發(fā)現(xiàn)增加了一條記錄,查看數(shù)據(jù)表,如圖所示。215.3.2整合SpringDataJPA
訪問(wèn)http://localhost:8080/updateUser?id=4&username=sss&password=sss,查看數(shù)據(jù)表發(fā)現(xiàn)id為4的記錄的username和password字段都已經(jīng)修改為sss,如圖所示。
訪問(wèn)http://localhost:8080/deleteUser?id=4,查看數(shù)據(jù)表,id為4記錄已經(jīng)被刪除,如圖所示。
訪問(wèn)http://localhost:8080/getUserById?id=3,網(wǎng)頁(yè)頁(yè)面輸出id為3的記錄,如圖所示;查看控制臺(tái),輸出相關(guān)信息,如圖所示。
訪問(wèn)http://localhost:8080/getAllUser,查詢(xún)所有用戶(hù)信息,網(wǎng)頁(yè)頁(yè)面顯示查詢(xún)的所有用戶(hù),如圖所示;控制臺(tái)輸出查詢(xún)的所有用戶(hù),如圖所示。225.3.2整合SpringDataJPA
訪問(wèn)http://localhost:8080/findUserById?id=2,這里調(diào)用的是UserRepository接口中的自定義的方法,查詢(xún)id為2的用戶(hù)信息,控制臺(tái)輸出該用戶(hù),如圖所示。
訪問(wèn)http://localhost:8080/findUserByName?username=admin,查詢(xún)username為admin的用戶(hù)信息,控制臺(tái)輸出,如圖所示。
訪問(wèn)http://localhost:8080/findMaxIdUser,查詢(xún)最大id號(hào)的用戶(hù)信息,控制臺(tái)輸出,如圖所示。
如果數(shù)據(jù)表中沒(méi)有記錄,或者要操作的條件不存在,可能會(huì)出現(xiàn)異常,大家可以參考5.2小節(jié)中對(duì)于相關(guān)異常的處理。235.4整合MyBatisMyBatis和JPA一樣,也是一款優(yōu)秀的持久層框架,它支持定制化SQL、存儲(chǔ)過(guò)程以及高級(jí)映射,避免了幾乎所有的JDBC代碼和手動(dòng)設(shè)置參數(shù)以及獲取結(jié)果集。5.4.1基于XML配置的方式整合MyBatis下面通過(guò)具體的示例來(lái)講解SpringBoot整合MyBatis,具體步驟如下。(1)新建一個(gè)SpringBoot工程chapter05mybatis,Group和Packagename為com.yzpc,在Dependencies依賴(lài)中選擇Web節(jié)點(diǎn)下的SpringWeb依賴(lài)和SQL節(jié)點(diǎn)下的MyBatisFramework、MySQLDriver依賴(lài)。pom.xml中自動(dòng)添加的依賴(lài)代碼,如下所示。
在perties配置文件中加入數(shù)據(jù)庫(kù)連接配置,與5.2.1小節(jié)第(2)步中介紹的一致。24<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version></dependency><!--省略Web中SpringWeb依賴(lài)和SQL中的MySQlDriver依賴(lài)代碼-->5.4.1基于XML配置的方式整合MyBatis(2)在MySQL中,創(chuàng)建一個(gè)名為chapter05mybatis的數(shù)據(jù)庫(kù),在該數(shù)據(jù)庫(kù)中創(chuàng)建user數(shù)據(jù)表,并預(yù)先插入幾條測(cè)試數(shù)據(jù),相應(yīng)的SQL語(yǔ)句如下所示。(3)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)pojo的包,并在該包中新建與數(shù)據(jù)表user對(duì)應(yīng)的實(shí)體類(lèi)User,代碼如下所示。(4)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建一個(gè)mapper的包,在并在該包中新建UserMapper的接口,代碼如下所示。25#創(chuàng)建數(shù)據(jù)庫(kù)CREATEDATABASEchapter05mybatis;#選擇使用數(shù)據(jù)庫(kù)USEchapter05mybatis;#創(chuàng)建user數(shù)據(jù)表并插入相關(guān)數(shù)據(jù)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;
//此處省略相應(yīng)屬性的setter/getter方法
//此處省略構(gòu)造方法
//重寫(xiě)toString方法}packagecom.yzpc.mapper;importcom.yzpc.pojo.User;importorg.apache.ibatis.annotations.Mapper;importjava.util.List;@Mapper //表明該接口是一個(gè)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文件,對(duì)應(yīng)前面UserMapper接口的方法,#{}用來(lái)代替接口中的參數(shù),實(shí)體類(lèi)中的屬性可以直接通過(guò)#{實(shí)體類(lèi)屬性名}獲取,內(nèi)容如下所示。UserMapper.xml放在resources目錄下,這樣就不用擔(dān)心打包時(shí)被忽略了,但是放在resources目錄下,又不能自動(dòng)被掃描到,此時(shí)在perties中添加mybatis掃描mapper的路徑,需要在perties配置文件中指定位置,代碼如下所示。UserMapper.xml除了放在resources目錄下,還可以是直接放在UserMapper所在的com.yzpc.mapper包下,該包下的UserMapper.xml會(huì)被自動(dòng)掃描到,需要在pom.xml文件中再添加如下配置。26<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEmapperPUBLIC“-////DTDMapper3.0//EN”
“/dtd/mybatis-3-mapper.dtd”>
<!--此處與接口類(lèi)地址對(duì)應(yīng)-->
<mappernamespace=“com.yzpc.mapper.UserMapper”>
<!--此處與接口方法名對(duì)應(yīng),指定參數(shù)類(lèi)型與返回結(jié)果類(lèi)型-->
<insertid=“addUser”parameterType=“com.yzpc.pojo.User”>
insertintouser(username,password)values(#{username},#{password})
</insert>
<!--省略u(píng)pdateUser、deleteUser、getUserById--
>
<selectid="getAllUser"resultType="com.yzpc.pojo.User">
select*fromuser
</select>
</mapper>#指定映射xml文件位置#classpath對(duì)應(yīng)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)在項(xiàng)目的src/mian/java/路徑下的com.yzpc包中,新建controller包,在該包中新建UserController類(lèi),并在該類(lèi)中添加增刪改查的方法,這里增加用戶(hù)為例,代碼如下所示。(7)啟動(dòng)項(xiàng)目,在瀏覽器地址欄中,依次訪問(wèn)增刪改查的請(qǐng)求,相應(yīng)請(qǐng)求如下。增加用戶(hù):http://localhost:8080/addUser修改用戶(hù):http://localhost:8080/updateUser刪除用戶(hù):http://localhost:8080/deleteUser/4查詢(xún)用戶(hù):http://localhost:8080/getUserById?id=3查詢(xún)所有用戶(hù):http://localhost:8080/getAllUser
瀏覽器和控制臺(tái)上輸出了相應(yīng)信息,控制臺(tái)的運(yùn)行結(jié)果,如圖所示。27@RestControllerpublicclassUserController{
@Autowired
User
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 道路安全管制勞務(wù)協(xié)議書(shū)
- 2024至2030年中國(guó)干發(fā)機(jī)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2024年唧咀拔頭項(xiàng)目可行性研究報(bào)告
- 中國(guó)陶瓷發(fā)動(dòng)機(jī)市場(chǎng)供需狀況與投資風(fēng)險(xiǎn)可行性研究報(bào)告(2024-2030版)
- 中國(guó)鈾礦行業(yè)經(jīng)營(yíng)狀況及投資效益預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國(guó)重氮化合物行業(yè)運(yùn)行狀況及前景趨勢(shì)預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國(guó)越野霧燈行業(yè)銷(xiāo)售動(dòng)態(tài)與競(jìng)爭(zhēng)前景預(yù)測(cè)研究報(bào)告(2024-2030版)
- 中國(guó)自動(dòng)打磨機(jī)行業(yè)市場(chǎng)現(xiàn)狀分析及競(jìng)爭(zhēng)格局與投資發(fā)展研究報(bào)告(2024-2030版)
- 2024年中國(guó)攪拌臂市場(chǎng)調(diào)查研究報(bào)告
- 中國(guó)納米銅行業(yè)運(yùn)營(yíng)現(xiàn)狀及投資方向研究研究報(bào)告(2024-2030版)
- 中醫(yī)學(xué)課件 治則與治法
- 關(guān)于變壓器溫控器的講解課件
- 疼痛的評(píng)估方法課件
- 國(guó)家開(kāi)放大學(xué)《個(gè)人與團(tuán)隊(duì)管理》形考任務(wù)6參考答案
- 30第六章-抽樣方法課件
- 世界咖啡會(huì)議
- 電力公司消防知識(shí)培訓(xùn)課件
- 人教鄂教版六年級(jí)科學(xué)上冊(cè)全冊(cè)教學(xué)設(shè)計(jì)教案
- 三年級(jí)數(shù)學(xué)趣味競(jìng)賽試題課件
- ECMO(體外膜肺氧合)課件
- 《色彩的情感》課件
評(píng)論
0/150
提交評(píng)論