您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)Spring mvc使用mybatis如何實現(xiàn)連接并操作mysql數(shù)據(jù)庫,小編覺得挺實用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
一、web.xml配置
我們都知道java ee的項目啟動的第一件事就是讀取web.xml,spring mvc 的web.xml我在上一篇文章中也做了詳細講解,不懂的可以回頭看看,講解的這個項目源碼我也會放到github上,也可以去那里看看,這里就不做介紹了。
web.xml 配置
<context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/context.xml</param-value> </context-param> <!-- 監(jiān)聽器:啟動服務(wù)器時,啟動 spring --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- spring 核心控制器 --> <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:external-servlet.xml</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 編碼過濾器 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
二、spring(context.xml) 上下文配置
這個配置文件可以說是服務(wù)器容器第二個要讀取的了,這里配置了spring啟動時掃描的基礎(chǔ)包路徑、外部配置的屬性文件的導(dǎo)入、需要連接的數(shù)據(jù)庫的配置、mybatis 和 spring 的整合、開頭我們說到的 mybatis 日期插件和分頁插件也是在這里配置、還有就是mybatis掃描的實體包及其 mapper 文件位置了。
context.xml 配置
<!-- spring 掃描的基礎(chǔ)包路徑 --> <context:component-scan base-package="com.qbian" /> <!-- jdbc properties --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" p:location="classpath:jdbc.properties" /> <!-- define the datasource (這里用的是c3p0的數(shù)據(jù)看連接池,性能不是很好,可以喚其它更好的連接池[jdbc pool等])--> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${jdbc.driverClassName}" /> <property name="jdbcUrl" value="${jdbc.url}" /> <property name="user" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> <!-- define the SqlSessionFactory --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="typeAliasesPackage" value="com.qbian.**.dto" /> <property name="plugins"> <list> <!-- 配置自己實現(xiàn)的日期插件 --> <bean class="com.qbian.common.plugin.DatePlugin" /> <!-- 分頁插件 --> <bean class="com.qbian.common.plugin.PagePlugin" /> </list> </property> </bean> <!-- scan for mappers and let them be autowired --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.qbian.**.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 將多個配置文件讀取到容器中,交給Spring管理 --> <bean id="configProperties" class="com.qbian.common.plugin.PropertiesConfigurer"> <property name="locations"> <list> <!--<value>classpath:redis.properties</value>--> </list> </property> </bean>
三、spring 控制器配置
這里配置的是控制器所在的位置,及其支持的請求類型和編碼。
external-servlet.xml 配置
<!-- 控制器掃描 --> <context:component-scan base-package="com.qbian.common.controller" /> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>text/html;charset=UTF-8</value> </list> </property> <property name="writeAcceptCharset" value="false" /> </bean> </mvc:message-converters> </mvc:annotation-driven>
配置信息就是以上三個了,接下來我們來看看具體的代碼,
四、代碼講解
1、java代碼講解,以下不做排序,只是按編輯器顯示順序排列講解。(以下內(nèi)容均在java.com.qbian包下)
common | annotation | @interface Now : 插入|更新數(shù)據(jù)的日期注解。 @interface UUID :插入數(shù)據(jù)的uuid注解。 controller | ExternalController.class :核心控制器,攔截所有請求,異常處理,跨域設(shè)置等功能。 dao | interface StudentDao :使用例子,crud 共通方法。 dto | PageInfoDto.class :分頁使用的基礎(chǔ)dto對象。 ResponseDto.class :響應(yīng)數(shù)據(jù)的基本模型。 entity | Student.class :使用例子,自定義注解的使用。 enums | enum MessageEnum :統(tǒng)一的返回狀態(tài)碼及描述信息。 exception | ExternalServiceException.class :自定義異常,業(yè)務(wù)相關(guān)都拋出該異常對象。 factory | BeanFactoryUtil.class :根據(jù)bean name獲取spring管理的bean實例。 hadle | ExceptionHandle.class :spring自帶的統(tǒng)一異常捕獲處理。 plugin | DatePlugin.class :自定義mybatis日期插件。 PagePlugin.class :自定義mybatis分頁插件。 PropertiesConfigurer.class :將外部配置的屬性文件讀取到 spring 容器中統(tǒng)一管理。 service | interface IbaseServie :基礎(chǔ)的service接口。 BaseService.class :基礎(chǔ)的service抽象類。 TokenService.class :鑒權(quán)token服務(wù)類。 util | CheckUtil.class :請求信息校驗相關(guān)工具類。 DateUtil.class :日期相關(guān)工具類。 ResponseUtil.class :響應(yīng)信息工具類。 SecondsFormatSerializer.class :java.util.Date類型轉(zhuǎn)時間戳工具類。 TimestampSecondsFormatSerializer.class :java.sql.Timestamp類型轉(zhuǎn)時間戳工具類。 StringUtil.class :字符串相關(guān)工具類。 other | dao | interface StudentExtDao :使用例子,業(yè)務(wù)相關(guān)crud操作。 dto | QueryStudentSexPageDto.class :根據(jù)學(xué)生性別分頁查詢返回對象dto。 StudentPageDto.class :根據(jù)學(xué)生性別分頁查詢封裝的對象。 service | AddStudentService.class :插入學(xué)生數(shù)據(jù)接口。 DeleteStudentService.class :刪除學(xué)生數(shù)據(jù)接口。 FindStudentService.class :查詢學(xué)生數(shù)據(jù)接口。 UpdateStudentService.class :更新學(xué)生數(shù)據(jù)接口。 QueryStudentBySexService.class :根據(jù)學(xué)生性別分頁查詢接口。
2、mybatis的 mapper.xml講解(以下內(nèi)容均在resources/com/qbian文件夾下)
common | dao | StudentDao.xml :對應(yīng)common.dao.StudentDao接口。 other | dao | StudentExtDao.xml :對應(yīng)other.dao.StudentExtDao接口。
五、功能演示
1、token校驗
這里的token我寫死在代碼里了,123456表示校驗成功。我們先用插入數(shù)據(jù)接口測試一下,傳個錯誤的token,如下圖:
授權(quán)token校驗
2、請求參數(shù)校驗
我們來看看插入數(shù)據(jù)接口還需要校驗?zāi)男┲怠?/p>
// 校驗請求參數(shù) CheckUtil.checkEmpty(params, "token", "sex", "age"); // 校驗 token tokenService.checkUserLogin(params.getString("token")); Student student = JSONObject.parseObject(params.toJSONString(), Student.class); studentDao.insert(student); return ResponseUtil.success();
然后我們少傳age字段試一下:
請求字段校驗
3、插入數(shù)據(jù)
在插入數(shù)據(jù)之前我們先看看數(shù)據(jù)庫里都有哪些數(shù)據(jù):
初始化數(shù)據(jù)庫中的值
從上圖可以看出,數(shù)據(jù)庫中沒有任何數(shù)據(jù)。我們來執(zhí)行下插入接口。
測試插入接口
我們再來看下數(shù)據(jù)庫:
調(diào)用插入接口后
數(shù)據(jù)庫已經(jīng)有數(shù)據(jù)了。
4、查詢數(shù)據(jù)
根據(jù)上一條數(shù)據(jù)的ID查詢
調(diào)用查詢接口
剛插入的數(shù)據(jù)我們也查詢出來了。
5、更新數(shù)據(jù)
更新一下查詢出來的數(shù)據(jù):
調(diào)用更新接口
然后我們再查詢一次該條數(shù)據(jù)
更新后再次查詢
可以看到性別和年齡都更新了,并且更新日期也是最新的了。
6、分頁查詢
先來看一下代碼:
// 校驗請求參數(shù) CheckUtil.checkEmpty(params, "token", "sex", "pageNo", "pageSize"); // 校驗 token tokenService.checkUserLogin(params.getString("token")); // 根據(jù)性別分頁查詢 Student,查詢總數(shù)會自動封裝到pageDto對象上 QueryStudentSexPageDto pageDto = JSONObject.parseObject(params.toJSONString(), QueryStudentSexPageDto.class); List<Student> students = studentExtDao.queryBySexWithPage(pageDto); StudentPageDto studentPageDto = new StudentPageDto(); // 查詢總數(shù)會自動封裝到pageDto對象上 studentPageDto.setTotalSize(pageDto.getTotalSize()); studentPageDto.setStudents(students); return ResponseUtil.success(studentPageDto);
分頁查詢之前我們想要導(dǎo)入多一點測試數(shù)據(jù)。
分頁前測試數(shù)據(jù)
可以看到數(shù)據(jù)庫目前有十條測試數(shù)據(jù),男生有六條,年齡分別為19~24。好了,我們開始調(diào)用分頁查詢接口:
調(diào)用分頁查詢接口返回結(jié)果
格式化一下返回數(shù)據(jù):
分頁查詢返回結(jié)果整理
這和我們直接查詢數(shù)據(jù)庫看到的一樣。
7、刪除數(shù)據(jù)
最后就是刪除數(shù)據(jù)接口了,我們將第一條測試數(shù)據(jù)刪除掉。
調(diào)用刪除接口返回結(jié)果
然后我們在查詢一下是否真的刪除了。
刪除后查詢
數(shù)據(jù)已經(jīng)被刪除了。
以上就是Spring mvc使用mybatis如何實現(xiàn)連接并操作mysql數(shù)據(jù)庫,小編相信有部分知識點可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。