Il y a quelque temps, j'ai repris un projet développé à l'aide de Springboot et Spring-Data-JPA. Plus tard, un nouvel ami a été ajouté, disant que JPA est trop difficile à utiliser que Mybatis, et il est également difficile d'écrire une requête avec plusieurs tables, alors j'ai ajouté le support MyBatis.
Au début
@ Configuration @ activerjParePositories ("com.xxx.xxx.repository") Classe jpaconfigLorsque vous utilisez cette méthode pour configurer JPA, un problème rencontré est qu'il peut sélectionner mais ne peut pas enregistrer, il est donc modifié dans le fichier de configuration:
Ce qui suit introduit directement le fichier de configuration:
1. Configuration du ressort
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschem A-INSTANCE "XMLNS: context =" http://www.springframework.org/schema/context "xmlns: tx =" http: // www. springframework.org/schema/tx"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:task = "http://www.springframework.org/schema/task" xsi: schemalocation = "http: //www.springframework.or g / schéma / beanshttp: //www.springframework.org/schema/beans/spring-beans.xsdhttp: //www.springframework.or g / schéma / contexte / printemps-text.xsdhttp: //www.springframework.org/schema/context/spring-context.xsdhttp : //www.springframework.org/schema/txhttp: //www.springframework.org/schema/tx/spring-tx.xsdhtt p: //www.springframework.org/schema/aophttp: //www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd"><! id = "SpringContexTholder" lazy-Init = "false"> </ank> <bean id = "configProperties" class = "org.springframework.beans.factory.config.propertiesfactorybean"> <propriété name = "Locations"> <sist> <value> classPath *: jdbc.properties </value> <value> classpath *: app.properties </value> </sth name = "SystemPropertiesModeName" value = "system_properties_mode_override" /> <propriété name = "fileencoding" value = "utf-8" /> <propriété name = "Properties" Ref = "configProperties" /> </ bean> <! - DataSource Configuration -> <id = "datasource" Propriétés URL, utilisateur, mot de passe -> <! - <propriété name = "DriverClassName" value = "$ {ds.driverclassname}" /> -> <propriété name = "url" value = "$ {ds.url}" /> <propriété name = "mot de passe" Value = "$ {ds.password}" /> <! - Configurer la taille de l'initialisation, minimum et maximum -> <propriété name = "initialSize" value = "$ {ds.initialsize}" /> <propriété name = "minidle" value = "$ {ds.minidle}" /> <propriété name = "maxactive" value = "$ {ds.maxactive}" Attendez que la connexion soit chronométrée -> <propriété name = "maxwait" value = "$ {ds.maxwait}" /> <! - Configurez le temps qu'il faut pour vérifier une fois, détectez la connexion inactive qui doit être fermée, en millisecondes -> < Configurez le temps minimum pour une connexion pour survivre dans le pool en millisecondes -> <propriété name = "MineVictableIdleMemillis" value = "$ {ds.minevictableidletimemillis}" /> <propriété name = "ValidationQuery" value = " Value = "$ {ds.Test WhiteIdle}" /> <propriété name = "testonBorrow" value = "$ {ds.testonborrow}" /> <propriété name = "testonreturn" value = "$ {ds.testonreturn}" /> <! - Ouvrir PSCCache et spécifier la taille de PSCCache sur chaque connexion -> <propriété Nom = " Value = "$ {ds.poolPreparedStatements}" /> <propriété name = "MaxPoolPreparedStationmentPerConnectionSize" value = "$ {ds.maxpoolPreparedStatementPerConnectionsize}" /> <! - Configurer les filtres pour les statistiques de surveillance intercepts -> <propriété = "filtres" value = "$ {ds.filters}" Journal d'erreur lors de la fermeture de la connexion abandonnée -> <propriété name = "logabandoned" value = "$ {ds.logabandoned}" /> </ank> <! - Spring et Mybatis sont parfaitement intégrés, et le fichier de configuration MyBatis ne nécessite pas Mybatis -> <bean id = "SqlSessionFactory"> <propriété Nom = "dataSource" Ref = "DataSource" /> <propriété name = "configLocation" value = "classpath: mybatis-config.xml" /> <propriété name = "tyciasespackage" value = "com.xxx.culture.domain" /> <! - Scannez automatiquement le mapping.xml File -> <propriété name = "MAPERLOCATION" Value = "CLASSPATH: MAPTER / ** / *. XML" /> </ Bean> <! - Le nom du package où se trouve l'interface DAO, Spring trouvera automatiquement la classe sous l'informatique -> <Ean> <Propriété Name = "Basepackage" Value = "Com.xxx.xxx.dao" /> </an> <! id = "TransactionManager" class = "org.springframework.jdbc.datasource.datasourcetransactionManager"> <propriété name = "DataSource" ref = "DataSource" /> </Ean> <! - Transaction Management Notification -> <tx: conseils id = "TxAdvice" Transaction-Manager = "TransactionManAger"> <tx: <TX: <! Méthodes En commençant par insérer, mettre à jour, supprimer, revenir tant qu'il y a une exception -> <tx: méthode name = "insert *" propagation = "requise" rollback-for = "java.lang.throwable" /> <tx: méthode name = "update *" propagation = "requis" rollback-for = "java.lang.throwable" /> <tx: méthode name = "delete *" proPagation = " rollback-for = "java.lang.throwable" /> <tx: méthode name = "retire *" propagation = "requis" rollback-for = "java.lang.throwable" /> <tx: méthode name = "Save *" propagation = "requis" rollback-for = "java.lang.throwable" /> <tx: méthode name name = "flush *" propagation = "requis" /> <! - La méthode commençant par sélectionnez, comptez, get, recherchez, activez la lecture seule pour améliorer les performances d'accès à la base de données -> <tx: méthode name = "select *" readly = "true" /> <tx: méthode name = "count *" readly = "true" /> <tx: méthode = "get *" read-only = "true" / * read only = "true" /> <tx: méthode name = "find *" read-only = "true" /> <tx: méthode name = "search *" read only = "true" /> <! - Utiliser la gestion de transaction par défaut pour d'autres méthodes -> <tx: méthode name = "*" /> </ tx: attributs> </ tx: conseils> <! - transaction aop configuration aop com.xxx.smp.service .. * imp. * (..)) -> <aop: config> <aop: Pointcut id = "ServiceMethods" expression = "EXECUTION (* com.xxx.xxx.service .. * (..))" /> <aop: conseiller conseils-ref = "txadvice" Pointcut-ref = "ServiceMethods" /> </aop: config> <! - Configurez le printemps pour utiliser CGLIB proxy -> <aop: AspectJ-Autoproxy Proxy-Target-Class = "True" /> <! ressource = "ApplicationContext-jpa.xml" /> </ beans>2. Configuration JPA
J'ai rencontré un problème au début: jpa org.hibernate.lazyInitializationException: je n'ai pas pu initialiser le proxy - pas de session
La configuration est la suivante
<? xml version = "1.0" Encoding = "UTF-8"?> <Beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: tx = "http: //www.springfrramewo rk.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsdhttp://www.springframework.org/schema/data/jpa http://www.spring-jp > <bean id = "EntityManagerFactory" class = "org.springframework.orm.jpa.localContaineRtityManagerFactoryBean"> <! - Spécifiez la source de données -> <propriété name = "DataSource" Ref = "DataSource" /> <! - Spécifiez l'entité Package de classe d'entité ->> <Propriété name = "PackAgestoscan"> <sist> <value> com.xxx.xxx.jpadomain </value> </sist> </ propriété> <! - Spécifiez l'attribut JPA; Par exemple, s'il faut afficher SQL, dialect, etc. en hibernate -> <propriété name = "jpavendoradapter"> <an bean> <! - Que ce soit générer du fichier DDL -> <propriété name = "propedDl" value = "true" /> <! - Que ce soit pour afficher SQL -> <propriété name = "showsq" value = "false" /> <! name = "databasePlatform" value = "org.hibernate.dialect.mysqldialect" /> <! - mysql, sélectionnez par vous-même -> <propriété name = "database" value = "mysql" /> </ bean> </ propriété> <propriété name = "jpaproperties"> <props> <prop key = "hibernate.ejb.naming_strategy"> org.hibernate.cfg.improvednamingsstrategy </ prop> <pp> key = "Hibernate.hbm2ddl.auto"> Update </ prop> <prop key = "hibernate.enable_lazy_load_no_trans"> true </pp> Spring Data JPA Configuration -> <! - Configurez la fonction d'activer la numérisation et de créer automatiquement des usines proxy-class = "com.monk.base.jpa.peakjParepositoryFactory" Méthode d'annotation de bean définie par elle-même. You can directly annotate all packages without writing --><jpa:repositories base-package="com.xxx.xxx.repository"transaction-manager-ref="transactionManager"entity-manager-factory-ref="entityManagerFactory"/><!-- Jpa Transaction Configuration-configuration-configuration-><bean id="transactionManager"><property name = "EntityManagerFactory" Ref = "EntityManagerFactory" /> </ Bean> <! - Activez la transaction d'annotation -> <tx: transaction-manager = "TransactionManager" annotation "
Ce qui précède est une analyse des problèmes rencontrés dans l'intégration de Spring JPA et Mybatis qui vous a été présenté par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!