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