Há um tempo atrás, assumi um projeto desenvolvido usando o Springboot e o Spring-Data-JPA. Mais tarde, um novo amigo foi adicionado, dizendo que o JPA é muito difícil de usar do que o Mybatis, e também é difícil escrever uma consulta com várias tabelas, então adicionei o suporte do Mybatis.
No começo
@Configuration@enableJParePositoris ("com.xxx.xxx.repository") Classe jpaconfigAo usar esse método para configurar o JPA, um problema encontrado é que ele pode selecionar, mas não pode salvar, por isso é modificado no arquivo de configuração:
O seguinte apresenta diretamente o arquivo de configuração:
1. Configuração da mola
<? xml versão = "1.0" coding = "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/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"> </shean> <bean id = "configproperties" class = "org.springframework.beans.factory.config.propertiesfactoryBean"> < name = "Localizações"> <List> <Value> ClassPath*: JDBC.Properties </value> <Value> ClassPath*: App.properties </value> </list> </propriedade> </bean> <bean id = "PropertyConfigurer" class = "org.sPraceRworkOn.BeanS.Figtory.Config.Figure" name = "SystemPropertiesModename" value = "System_properties_mode_override"/> <propriedade name = "fileEncoding" value = "utf-8"/> <names name = "Propriedades" refer = "configProperties"/> </bean> <!-DataSource Configuratur- init-method = "init" Destroy-method = "Close"> <!-Propriedades básicas URL, usuário, senha-> <!-<propriedade name = "driverclassName" value = "$ {ds.driverclassName}"/>-> <nome da propriedade = "url" = "$ {ds.s.s.s./> <weenern name =" userl "=" $ {ds.url} "/> <ween name =" users = "users" = "$ {ds.url}"/>- name = "senha" value = "$ {ds.password}"/> <!-Configure o tamanho da inicialização, o mínimo e o máximo-> <propriedades name = "InitialSize" value = "$ {ds.initialSize}"/> <names name = "minidle" = "$ {ds.MinAx} Configure a hora de aguardar a conexão ser cronometrada-> <propriedade name = "maxwait" value = "$ {ds.maxwait}"/> <!-configure quanto tempo leva para verificar uma vez, detecte a conexão ociosa que precisa ser fechada, em milissegundos-> <Nome da propriedade = "Timeweenween. value = "$ {ds.timebetweenEvictionRunsmillis}"/> <!-Configure o tempo mínimo para uma conexão sobreviver no pool em milissegundos-> <names name = "mineVictableItleTimemillis" value = "$ {ds.minevictabedermEmillis value = "$ {ds.ValidationQuery}"/> <propriedade name = "testhileidle" value = "$ {ds.testwhileIdle}"/> <names name = "testonborrow" value = "$ {ds.testonbororro PSSCACHE em cada conexão-> <propriedade name = "PoolPreparedStatements" value = "$ {ds.poolPreparedStatements}"/> <Nome da propriedade "" maxpoolPreparedStatementPerConnectionsize "value =" $ {ds.maxPoolPreedStatementPerConnectionsize " name = "filtros" value = "$ {ds.filters}"/> <!-Log de erros de saída ao fechar a conexão abandonada-> <propriedades name = "logabandon" value = "$ {ds.logabandis}"/> </sican> <!-mybatis e mybatis são perfeitamente integrados, e Mybatis, sinalizador, mas, mybatis, e mybatis, e a mybatis não é integrada e mybatis, e mybatis, e a mybatis não é integrada e mybatis, e mybatis, e mybatis, e o mybatis não é o que não é o que não é o que não é o mybatis, e o mybatis não é integrado, e o mybatis. id = "sqlsessionFactory"> <propriedade name = "DataSource" ref = "DataSource"/> <propriedade name = "configLocation" value = "classPath: mybatis-config.xml"/> <nome da propriedade = "typeAliasAspackage" = "com.xxx.culture.lomain"/>> <! name = "mapperlocations" value = "classpath: mapper/**/*. xml"/> </i bean> <!-o nome do pacote em que a interface Dao está localizada, a primavera encontrará automaticamente a classe sob ele-> <) <) <) <) </basepaction name = "Basepackage" = "com.xxx.xxx.DATRO"/> </BaPackage "=" com.xxx.xxxx.dano "/> </by> </banenn </banepackan"/"com.xxx.xxxx.dano,/> </baneman </banepackan". Para TX global-> <bean id = "transactionManager" class = "org.springframework.jdbc.dataSource.dataSourceTransactionManager"> <Nome da propriedade = "DataSource" Ref = "DataSource"/"</Bean> <!-Notificação de transação-<tsece" TX = "TX"/" transação-manager = "transactionManager"> <tx: atributos> <!-Métodos de gerenciamento de transações começando com inserção, atualização, excluir, reverter enquanto houver uma exceção-> <tx: método name = "insert*" propagation = "requerir" rollback-for = "java.lang.throwable"/> <thod: name = " rollback for = "java.lang.Throwable"/> <tx: método name = "delete*" propagação = "requerir" rollback for = "java.lang.Throwable"/> <tx: método name = "remover*" propagation = "requerir" rollback for "java.lang.throwable"/> <t rollback-for = "java.lang.Throwable"/> <tx: método name = "add*" propagation = "requerir"/> <tx: método name = "flush*" propagation = "requerir"/> <!-o método começando com o nome da seleção, selete, selete, egille, a realização para melhorar o desempenho do database "/<tx: tx:" Selecionar, "selete*seleção*selet*shall = read-sly ="> <! leitura somente = "true"/> <tx: método name = "get*" leitura somente = "true"/> <tx: método name = "get*" somente leitura = "true"/> <tx: name do método = "find*" read-toly = "true"/> <tx: nome do método = "pesquisa*" para outra coisa "/") <! name="*"/></tx:attributes></tx:advice><!-- Transaction aop configuration com.xxx.smp.service..*Impl.*(..)) --><aop:config><aop:pointcut id="serviceMethods"expression="execution(* com.xxx.xxx.service..*(..))"/><aop:advisor conselhos-ref = "txadvice" pointcut-ref = "serviceMethods"/> </aop: config> <!-configure a mola para usar o proxy cGLIB-> <aOP: ascestingj-autoproxy proxy-target-class = ""/> <!-transação da transação suportes-> <ti): Resource = "ApplicationContext-jpa.xml"/> </ Beans>2. Configuração JPA
Encontrei um problema no começo: JPA org.hibernate.LAZYINITializationException: não foi possível inicializar o proxy - sem sessão
A configuração é a seguinte
<? xml versão = "1.0" coding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-nstance" xmlns: tx = "http: //wwwwwwwwwwwwwwwwr" e "http :/xmlschema-innstance" xmlns: tx = "http: //wwwwwwwwwwwwwwp.wpr: xmls: tx =" http: //wwwwwwwwwwwwwwp.wrns: tx) rk.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemalocation="http:/wwwww.springfameworksi:schema-bhema/BERGO 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.springframework.org/schema/data/jpa/spring-jpa.xsd "> <bean id =" entityManagerFactory "CLASSENGERNAGERMANGORD.SPRINGFRAMWORK.ORM.JPA.LOCALCALCONTAINENTITYMANGORTALBEANBEANBEANBANBEAN" ref = "DataSource"/> <!-Especifique o caminho do pacote da classe Entidade da entidade-> <propriedade name = "packAgestoscan"> <list> <Value> com.xxx.xxx.jpadomain </value> </list> </property> <!-especifique o atributo jpa; como exibir SQL, dialeto, etc. em Hibernate-> <propriedade name = "jPavendorAdapter"> <Bean> <!-se deve gerar arquivo ddl-> <propriedades name = "generateddl" value = "true"/> <!-se exibe sql-> <do nome da propriedade = "ShowSQL" ""/> <! name = "databaseplatform" value = "org.hibernate.dialect.mysqldialect"/> <!-mysql, selecione por você mesmo-> <propriedade name = "database" value = "mysql"/> </bean> </propriedade> <names = "jpaproperties"> <Props> key = "hibernate.ejb.naming_strategy"> org.hibernate.cfg.improvednamingstrategy </pp> <props key = "hibernate.hbm2ddl.auto"> update </prop> <propr = "hibernate.enable_lazlaz_no_no_trans"> True <- true <- true <- truens> Configuração JPA-> <!-Configure a função de ativar a digitalização e criar automaticamente fábricas de proxy-class = "com.monk.base.jpa.peakjparepositoryfactory" Método de anotação de feijão definida por si mesma. Você pode anotar diretamente todos os pacotes sem escrita-> <jpa: repositórios base-package = "com.xxx.xxx.repository" transação-manager-ref = "transactionManager" entidade-manager-fáctor-ref = "entidade name = "entityManagerFactory" ref = "entityManagerFactory"/> </ Bean> <!-Ligue a transação de anotação-> <tx: transação orientada por anotação-manager = "transactionManager" proxy-alget-class = "true"/> </sience>
O exposto acima é uma análise dos problemas encontrados na integração do Spring JPA e Mybatis apresentados a você pelo editor. Espero que seja útil para você. Se você tiver alguma dúvida, deixe -me uma mensagem e o editor responderá a você a tempo. Muito obrigado pelo seu apoio ao site wulin.com!