這篇文章主要介紹了Spring mvc整合mybatis(crud+分頁外掛)操作mysql的步驟詳解,需要的朋友可以參考下
一、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> <!-- 监听器:启动服务器时,启动 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) 上下文配置
##這個配置檔案可以說是伺服器容器第二個要讀取的了,這裡配置了spring啟動時掃描的基礎包路徑、外部配置的屬性檔案的導入、需要連接的資料庫的配置、mybatis 和spring 的整合、開頭我們說到的mybatis 日期外掛和分頁外掛也是在這裡設定、還有就是mybatis掃描的實體套件及其mapper 檔案位置了。
context.xml 配置<!-- spring 扫描的基础包路径 --> <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的数据看连接池,性能不是很好,可以唤其它更好的连接池[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> <!-- 配置自己实现的日期插件 --> <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程式碼講解,以下不做排序,只是依照編輯器顯示順序排列講解。 (以下內容皆在java.com.qbian套件下)
common | annotation | @interface Now : 插入|更新数据的日期注解。 @interface UUID :插入数据的uuid注解。 controller | ExternalController.class :核心控制器,拦截所有请求,异常处理,跨域设置等功能。 dao | interface StudentDao :使用例子,crud 共通方法。 dto | PageInfoDto.class :分页使用的基础dto对象。 ResponseDto.class :响应数据的基本模型。 entity | Student.class :使用例子,自定义注解的使用。 enums | enum MessageEnum :统一的返回状态码及描述信息。 exception | ExternalServiceException.class :自定义异常,业务相关都抛出该异常对象。 factory | BeanFactoryUtil.class :根据bean name获取spring管理的bean实例。 hadle | ExceptionHandle.class :spring自带的统一异常捕获处理。 plugin | DatePlugin.class :自定义mybatis日期插件。 PagePlugin.class :自定义mybatis分页插件。 PropertiesConfigurer.class :将外部配置的属性文件读取到 spring 容器中统一管理。 service | interface IbaseServie :基础的service接口。 BaseService.class :基础的service抽象类。 TokenService.class :鉴权token服务类。 util | CheckUtil.class :请求信息校验相关工具类。 DateUtil.class :日期相关工具类。 ResponseUtil.class :响应信息工具类。 SecondsFormatSerializer.class :java.util.Date类型转时间戳工具类。 TimestampSecondsFormatSerializer.class :java.sql.Timestamp类型转时间戳工具类。 StringUtil.class :字符串相关工具类。 other | dao | interface StudentExtDao :使用例子,业务相关crud操作。 dto | QueryStudentSexPageDto.class :根据学生性别分页查询返回对象dto。 StudentPageDto.class :根据学生性别分页查询封装的对象。 service | AddStudentService.class :插入学生数据接口。 DeleteStudentService.class :删除学生数据接口。 FindStudentService.class :查询学生数据接口。 UpdateStudentService.class :更新学生数据接口。 QueryStudentBySexService.class :根据学生性别分页查询接口。
common | dao | StudentDao.xml :对应common.dao.StudentDao接口。 other | dao | StudentExtDao.xml :对应other.dao.StudentExtDao接口。
五、功能示範
1、token校驗
這裡的token我寫死在程式碼裡了,123456表示校驗成功。我們先用插入資料介面測試一下,傳個錯誤的token,如下圖:#授權token校驗2、請求參數校驗
我們來看看插入資料介面還需要校驗哪些值。// 校验请求参数 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();
在插入資料之前我們先看看資料庫裡都有哪些資料:
#初始化資料庫中的值
從上圖可以看出,資料庫中沒有任何資料。我們來執行下插入介面。
測試插入介面
我們再來看下資料庫:
##呼叫插入介面後
資料庫已經有資料了。4、查詢資料
根據上一條資料的ID查詢
呼叫查詢介面
剛插入的資料我們也查詢出來了。5、更新資料
更新查詢出來的資料:
##呼叫更新介面然後我們再查詢一次該條資料
更新後再次查詢可以看到性別和年齡都更新了,更新日期也是最新的了。
6、分頁查詢先來看程式碼: 分頁前測試數據 可以看到資料庫目前有十條測試數據,男生有六條,年齡分別為19~24。好了,我們開始呼叫分頁查詢介面: 呼叫分頁查詢介面回傳結果 格式化一下回傳資料: #分頁查詢傳回結果整理 這和我們直接查詢資料庫看到的一樣。 7、刪除資料 最後就是刪除資料介面了,我們刪除第一個測試資料。 呼叫刪除介面回傳結果 然後我們在查詢是否真的刪除了。 刪除後查詢 資料已經被刪除了。 最後附上專案原始碼:github.com/Qbian61/spring-mvc-mybatis 【相關推薦】 #1. Java免費影片教學 2. 全面解析Java註解 3. 阿里巴巴Java開發手冊 以上是java整合crud和分頁外掛程式操作mysql的詳細內容。更多資訊請關注PHP中文網其他相關文章!// 校验请求参数
CheckUtil.checkEmpty(params, "token", "sex", "pageNo", "pageSize");
// 校验 token
tokenService.checkUserLogin(params.getString("token"));
// 根据性别分页查询 Student,查询总数会自动封装到pageDto对象上
QueryStudentSexPageDto pageDto = JSONObject.parseObject(params.toJSONString(), QueryStudentSexPageDto.class);
List<Student> students = studentExtDao.queryBySexWithPage(pageDto);
StudentPageDto studentPageDto = new StudentPageDto();
// 查询总数会自动封装到pageDto对象上
studentPageDto.setTotalSize(pageDto.getTotalSize());
studentPageDto.setStudents(students);
return ResponseUtil.success(studentPageDto);