Cet article présente principalement les étapes détaillées de Spring mvc intégrant mybatis (plug-in crud + paging) pour faire fonctionner MySQL. Les amis dans le besoin peuvent se référer à
1. configuration
Nous savons tous que la première chose à faire lors du démarrage d'un projet Java ee est de lire web.xml J'ai également expliqué le web.xml de spring mvc en détail dans le précédent. article. Non. Si vous comprenez, vous pouvez regarder en arrière. Je mettrai également le code source du projet que j'ai expliqué sur github Vous pouvez également y aller pour y jeter un œil, je ne le présenterai pas. ça ici.
configuration 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>
2. configuration du contexte Spring (context.xml)
ceLe fichier de configuration peut être considéré comme la deuxième chose à lire par le conteneur du serveur. Ici, il configure le chemin de base du package analysé lors du démarrage du printemps, l'importation des attributs configurés en externe et les fichiers. La configuration, l'intégration de mybatis et spring, le plug-in de date mybatis et le plug-in de pagination que nous avons évoqués au début sont également configurés ici, ainsi que le package d'entité et son emplacement de fichier mapper analysés. par mybatis.
configuration 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>
3. Configuration du contrôleur Spring
La configuration ici est l'endroit où se trouve le contrôleur. L'emplacement, ainsi que ses types de requêtes et encodages pris en charge.
configuration 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>
Les informations de configuration sont les trois ci-dessus, jetons un coup d'œil au code spécifique,
4. Explication du code
1. Explication du code Java, ce qui suit n'est pas trié, juste classé dans l'ordre affiché dans l'éditeur. (Les contenus suivants se trouvent tous dans le package 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 :根据学生性别分页查询接口。
2. Explication Mybatis mapper.xml (les contenus suivants se trouvent tous dans le dossier resources/com/qbian)
common | dao | StudentDao.xml :对应common.dao.StudentDao接口。 other | dao | StudentExtDao.xml :对应other.dao.StudentExtDao接口。
5. Démonstration de fonction
1. Vérification du jeton
J'ai écrit le jeton ici dans le code Oui, 123456 signifie que la vérification est réussie. Testons-le d'abord en utilisant l'interface d'insertion de données et transmettons un jeton incorrect, comme indiqué ci-dessous :
Vérification du jeton d'autorisation
2, Paramètres de requêteVérification
Jetons un coup d'œil aux valeurs qui doivent être vérifiées lors de l'insertion de l'interface de données.
// 校验请求参数 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();
Essayons ensuite de moins transmettre le champ d'âge :
Demande de vérification du champ
3. 🎜>
Avant d'insérer des données, regardons quelles données se trouvent dans la base de données : Initialisez les valeurs dans la base de donnéesComme vous pouvez le voir sur l'image ci-dessus, il n'y a aucune donnée dans la base de données. Exécutons l'interface d'insertion. Tester l'interface d'insertionJetons un œil à la base de données : Après avoir appelé l'interface d'insertionLa base de données contient déjà des données.
4. Interroger les données
Requête en fonction de l'ID des données précédentesAppeler l'interface de requêteNous avons également interrogé les données que nous venons d'insérer.
5. Mettre à jour les données
Mettre à jour les données interrogées : Appeler l'interface de mise à jourEnsuite, nous interrogeons à nouveau les donnéesAprès la mise à jour, interrogez à nouveau Vous pouvez voir que le sexe et l'âge ont été mis à jour, ainsi que la date de mise à jour est aussi le dernier.
6. Requête de pagination
Jetons d'abord un coup d'œil au code :// 校验请求参数 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);
Données de test avant pagination
Vous pouvez constater que la base de données contient actuellement dix données de test, dont six pour les garçons, âgés de 19 à 24 ans. Bon, commençons à appeler l'interface de requête de pagination :
Appelez l'interface de requête de pagination pour renvoyer les résultats
Formatez les données renvoyées :
Les résultats des requêtes de pagination sont triés
C'est la même chose que ce que nous voyons lors de l'interrogation directe de la base de données.
7. Supprimer les données
La dernière étape consiste à supprimer l'interface de données Nous supprimerons les premières données de test.
L'appel de l'interface de suppression renvoie le résultat
Ensuite on vérifie si elle est réellement supprimée.
Requête après suppression
Les données ont été supprimées.
Enfin, le code source du projet est joint : github.com/Qbian61/spring-mvc-mybatis
[Recommandations associées]
1 Vidéo Java gratuite. tutoriel
2. Analyse complète des annotations Java
3 Manuel de développement Java Alibaba
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!