Некоторое время назад я взял на себя проект, разработанный с использованием Springboot и Spring-Data-JPA. Позже был добавлен новый друг, заявив, что JPA слишком сложно использовать, чем Mybatis, и также трудно написать запрос с несколькими таблицами, поэтому я добавил поддержку Mybatis.
В начале
@Configuration@enablejparePositories ("com.xxx.xxx.repository") класс jpaconfigПри использовании этого метода для настройки JPA одна проблема заключается в том, что он может выбрать, но не может сохранить, поэтому он изменен в файл конфигурации:
Следующее напрямую представляет файл конфигурации:
1. Конфигурация пружины
<? xml version = "1.0" Encoding = "UTF-8"?> <фасоль 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/schema/beanshttp: //www.springframework.org/schema/beans/spring-beans.xsdhttp: //www.springframework.or g/schema/context/spring-context.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"> </bean> <bean id = "configproperties" class = "org.springframework.beans.factory.config.propertiesfactorybean"> <Свойство name="locations"><list><value>classpath*:jdbc.properties</value><value>classpath*:app.properties</value></list></property></bean><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer"><property name = "SystemPropertiesModeName" value = "System_properties_mode_override"/> <name = "fileencoding" value = "utf-8"/> <name = "Свойства" ref = "configproperties"/> </bean> <!-Конфигурация DataSource-> <bean id = "DataSource" init-method = "init" Drest Method = "close"> <!-базовый URL свойства, пользователь, пароль-> <!-<name = "name =" DriverClassName "value =" $ {ds.driverclassname} "/>-> <name =" url "value =" $ {ds.Url} "/> <properation =" uSername "value =" $ {ds.Url} "/> <properation =" value = "$" $ "$" $ ". name="password" value="${ds.password}"/><!-- Configure initialization size, minimum and maximum --><property name="initialSize" value="${ds.initialSize}"/><property name="minIdle" value="${ds.minIdle}"/><property name="maxActive" value="${ds.maxActive}"/><!-- Настройте время, чтобы дождаться времени, когда подключение будет истекло-> <name = "maxwait" value = "$ {ds.maxwait}"/> <!-Настройка того, сколько времени требуется, чтобы проверить один раз, обнаружить непрерывное соединение, которое необходимо закрыть, в Milliseconds-> <Property name = "TimeWeevictionRunsmillis" value = "$ {ds.timebeweeneVictionRunsmillis}"/> <!-Настройте минимальное время для соединения для выживания в пуле в миллисекундах-> <name = "minevictableIdletimelis" value = "$ {ds.minevictableIdletimelis}"/> <собственность = "validequery" value = "$ {ds.validationQuery}"/> <name = "testWhileIdle" value = "$ {ds.testWhileIdle}"/> <name = "testonBorrow" value = "$ {ds.testonBorw}"/> <property name = "testonRute" value = "$ {ds.testonretur stemane"! PSCACHE на каждом соединении-> <Property name = "poolprepareDStatements" value = "$ {ds.poolprepareDStatements}"/> <name = "maxpoolpreparedStatementConcizeize" value = "$ {Ds.maxpoolpRepareDateMenteMentectionsicationsize"/"$ {ds.maxpoolpRepareDatementEmentCementectionsize quistr name = "filters" value = "$ {ds.filters}"/> <!-журнал ошибок вывода при закрытии заброшенного соединения-> <name = "logabandoned" value = "$ {ds.logabandoned}"/> </bean> <!-Spring и Mybatis идеально интегрированы, а конфигурация Mybatis не требует mybatis-> <> <baean-> <bean-> <> <bean-> <> <bean-> <> <baean-> <> <bean-> <> <bean-> <> <bean-> <> <baean не требует mybatis id = "sqlSessionFactory"> <name = "name =" dataSource "ref =" dataSource "/> <name =" configlocation "value =" classpath: mybatis-config.xml "/> <name =" typealiasespackage "value =" com.xx.culture.domain "/> <! name = "mapperlocations" value = "classpath: mapper/**/*. xml"/> </bean> <!-Имя пакета, где находится интерфейс DAO, Spring автоматически найдет класс под ним-> <Bean> <Property Name = "BasePackage" value = "Com.xx.xx.dao"/> </bean> <! JtatransactionManager для глобального tx-> <bean id = "transactionManager" class = "org.springframework.jdbc.datasource.datasourcetransactionmanager"> <proportice = "dataSource" ref = "DataSource"/> </bean> <!-Уведомление о управлении транзами Transaction-Manager = "TransactionManager"> <TX: атрибуты> <!-Методы управления транзакциями, начинающиеся с вставки, обновления, удаления, отката назад до тех пор, пока существует исключение-> <TX: имя метода = "Insert*" Propagation = "требуется" hollback-for = "java.lang.trowable"/> <tx: method name = "update*uppagation =" "Требуется"/> <tx: method name = "" " Rollback-for = "java.lang.Throwable"/> <tx: method name = "delete*" Propagation = "обязательно" Rollback-for = "java.lang.Throwable"/> <tx: имя метода = "remove*" Propagation = "nuect" roplack-for = "java.lang.trowable"/> <tx: method name = "save*save*save*save" "save*save" "save*stavatavation =" save "" save*save "" save*stavatavation = "save*stacatatataTavation =" "save*save" "save*save*stavatAtaTATATE Rollback-for = "java.lang.Throwable"/> <tx: method name = "add*" opragation = "требуется"/> <tx: method name = "flush*" opragation = "требуется"/> <!-Метод, начинающийся с выбора, count, get, seck, ulable head-yly для улучшения доступа к базе данных-> <tx: method name = "select*redtly =" true "/>"/> ". name = "count*" read-only = "true"/> <tx: method name = "get*" read-only = "true"/> <tx: method name = "get*" read-only = "true"/> <tx: method name = "find*" read-only = "true"/> <tx: method name = "search*" unhyly = "true"/> <!-Использование. name = "*"/> </tx: атрибуты> </tx: консультант> <!-Конфигурация транзакции AOP com.xxx.smp.service ..*Impl.*(..)-> <aop: config> <aop: pointcut id = "servicemethods" Expression = "exepression (*com.xx.xx.service ..) Advice-ref = "txadvice" pointcut-ref = "servicemethods"/> </aop: config> <!-Configure Spring для использования CGLIB Proxy-> <AOP: AspectJ-autoproxy Proxy-Target-class = "true"/> <! resource = "ApplicationContext-jpa.xml"/> </beans>2. Конфигурация JPA
Я столкнулся с проблемой в начале: jpa org.hibernate.lazyinitializationexception: не может инициализировать прокси - нет сеанса
Конфигурация следующая
<? xml version = "1.0" Encoding = "UTF-8"?> <фасоль xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: tx = "http: //wwwspringframe" 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.spramework.org/schema/data/jpa/spamdspamd-jsprishmd-j.springshema-j. > <Bean id = "entityManagerFactory" class = "org.springframework.orm.jpa.localcontainerentityManagerFactoryBean"> <!-Укажите источник данных-> <Название свойства = "DataSource" Ref = "DataSource"/> <! name = "packageStoscan"> <sist> <dall> com.xxx.xxx.jpadomain </value> </list> </property> <!- Укажите атрибут JPA; Например, отображать ли SQL, диалект и т. Д. В Hibernate-> <Property name = "JPavendorAdapter"> <Bean> <!-Снижение файла ddl-> <name = "geneddl" value = "true"/> <!-Будь то отображение SQL-> <Правила = "shows value =" false "/> <! name = "databaseplatform" value = "org.hibernate.dialect.mysqlidialect"/> <!-mysql, выберите сами-> <name = "database" value = "mysql"/> </bean> </property> <name = "jpaproperties"> <props> </prop key = "hibernate.ejb.naming_strategy"> org.hibernate.cfg.improvednamingStrategy </prop> <prop key = "hibernate.hbm2ddl.auto"> Обновление </prop> <prop key = "hibernate.enable_laze_load_no_trans"> true </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </props> </hibernate. Press Data Configuration-> <!-Настройте функцию включения сканирования и автоматического создания прокси-фабрик-class = "com.monk.base.jpa.peakjporepositoryfactory", определенный метод аннотации компонента. Вы можете напрямую аннотировать все пакеты без написания-> <JPA: Repositories base-package = "com.xxx.xxx.repository" transaction-manager-ref = "transactionmanager" Entity-Manager-Factory-REF = "EntityManagerFactory"/> <!-Transcation Configuration-Configuration-Configuration-configuration-> <> "? name = "EntityManagerFactory" ref = "EntityManagerFactory"/> </bean> <!-Включите аннотационную транзакцию-> <TX: Annotation Transaction-Manager = "TransactionManager" Proxy-Target-class = "true"/> </beans>
Выше приведено анализ проблем, возникших в интеграции Spring JPA и Mybatis, представленных вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!