一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - Spring jpa和mybatis整合遇到的問(wèn)題解析

Spring jpa和mybatis整合遇到的問(wèn)題解析

2020-06-22 12:32modprobe JAVA教程

有朋友說(shuō)jpa相比mybatis太難用,多表聯(lián)合的查詢寫起來(lái)也比較費(fèi)勁,所以便加入了mybatis的支持,在配置jpa時(shí)遇到各種問(wèn)題,需要修改相關(guān)配置文件,下面小編給大家分享下修改配置文件的思路,感興趣的朋友參考下

前一陣子接手了一個(gè)使用SpringBoot 和spring-data-jpa開(kāi)發(fā)的項(xiàng)目,后期新加入一個(gè)小伙伴,表示jpa相比mybatis太難用,多表聯(lián)合的查詢寫起來(lái)也比較費(fèi)勁,所以便加入了mybatis的支持

開(kāi)始的時(shí)候

?
1
2
3
@Configuration
@EnableJpaRepositories("com.xxx.xxx.repository")
class JpaConfig

使用這種方式去配置的jpa,遇到一個(gè)問(wèn)題,就是能select 但是不能save,所以就修改為配置文件的方式:

下面直接上配置文件:

1、spring的配置

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?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: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.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">
<!-- 掃描注解文件 -->
<context:component-scan base-package="com.xxx"/>
<task:annotation-driven/>
<bean id="springContextHolder" class="com.xxx.common.config.SpringContextHolder"
lazy-init="false"></bean>
<bean id="configProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property 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"/>
<property name="fileEncoding" value="UTF-8"/>
<property name="properties" ref="configProperties"/>
</bean>
<!-- dataSource 配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<!-- 基本屬性 url、user、password -->
<!-- <property name="driverClassName" value="${ds.driverClassName}" /> -->
<property name="url" value="${ds.url}"/>
<property name="username" value="${ds.username}"/>
<property name="password" value="${ds.password}"/>
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${ds.initialSize}"/>
<property name="minIdle" value="${ds.minIdle}"/>
<property name="maxActive" value="${ds.maxActive}"/>
<!-- 配置獲取連接等待超時(shí)的時(shí)間 -->
<property name="maxWait" value="${ds.maxWait}"/>
<!-- 配置間隔多久才進(jìn)行一次檢測(cè),檢測(cè)需要關(guān)閉的空閑連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${ds.timeBetweenEvictionRunsMillis}"/>
<!-- 配置一個(gè)連接在池中最小生存的時(shí)間,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${ds.minEvictableIdleTimeMillis}"/>
<property name="validationQuery" value="${ds.validationQuery}"/>
<property name="testWhileIdle" value="${ds.testWhileIdle}"/>
<property name="testOnBorrow" value="${ds.testOnBorrow}"/>
<property name="testOnReturn" value="${ds.testOnReturn}"/>
<!-- 打開(kāi)PSCache,并且指定每個(gè)連接上PSCache的大小 -->
<property name="poolPreparedStatements" value="${ds.poolPreparedStatements}"/>
<property name="maxPoolPreparedStatementPerConnectionSize"
value="${ds.maxPoolPreparedStatementPerConnectionSize}"/>
<!-- 配置監(jiān)控統(tǒng)計(jì)攔截的filters -->
<property name="filters" value="${ds.filters}"/>
<!-- 關(guān)閉abanded連接時(shí)輸出錯(cuò)誤日志 -->
<property name="logAbandoned" value="${ds.logAbandoned}"/>
</bean>
<!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="typeAliasesPackage" value="com.xxx.culture.domain"/>
<!-- 自動(dòng)掃描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mapper/**/*.xml"/>
</bean>
<!-- DAO接口所在包名,Spring會(huì)自動(dòng)查找其下的類 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.xxx.xxx.dao"/>
</bean>
<!-- (事務(wù)管理)transaction manager, use JtaTransactionManager for global tx -->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 事務(wù)管理 通知 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 對(duì)insert,update,delete 開(kāi)頭的方法進(jìn)行事務(wù)管理,只要有異常就回滾 -->
<tx:method name="insert*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
<tx:method name="update*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
<tx:method name="delete*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
<tx:method name="remove*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
<tx:method name="save*" propagation="REQUIRED" rollback-for="java.lang.Throwable"/>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="flush*" propagation="REQUIRED"/>
<!-- select,count,get,find開(kāi)頭的方法,開(kāi)啟只讀,提高數(shù)據(jù)庫(kù)訪問(wèn)性能 -->
<tx:method name="select*" read-only="true"/>
<tx:method name="count*" read-only="true"/>
<tx:method name="get*" read-only="true"/>
<tx:method name="find*" read-only="true"/>
<tx:method name="search*" read-only="true"/>
<!-- 對(duì)其他方法 使用默認(rèn)的事務(wù)管理 -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<!-- 事務(wù) aop 配置 com.xxx.smp.service..*Impl.*(..)) -->
<aop:config>
<aop:pointcut id="serviceMethods"
expression="execution(* com.xxx.xxx.service..*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods"/>
</aop:config>
<!-- 配置使Spring采用CGLIB代理 -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<!-- 事務(wù)注解支持 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
<import resource="applicationContext-jpa.xml"/>
</beans>

2、jpa的配置

初始時(shí)遇到一個(gè)問(wèn)題:jpa org.hibernate.LazyInitializationException: could not initialize proxy - no Session

配置如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?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.springframework.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.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd" >
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!-- 指定數(shù)據(jù)源 -->
<property name="dataSource" ref="dataSource"/>
<!-- 指定Entity實(shí)體類包路徑 -->
<property name="packagesToScan">
<list>
<value>com.xxx.xxx.jpadomain</value>
</list>
</property>
<!-- 指定JPA屬性;如Hibernate中指定是否顯示SQL的是否顯示、方言等 -->
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- 是否生成ddl文件 -->
<property name="generateDdl" value="true"/>
<!-- 是否展示sql -->
<property name="showSql" value="false"/>
<!-- 必要的數(shù)據(jù)庫(kù)庫(kù)使用的詳細(xì)信息 -->
<property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
<!-- mysql,自行選擇 -->
<property name="database" value="MYSQL"/>
</bean>
</property>
<property name="jpaProperties">
<props>
<prop key="hibernate.ejb.naming_strategy">org.hibernate.cfg.ImprovedNamingStrategy
</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
</props>
</property>
</bean>
<!-- Spring Data Jpa配置 -->
<!-- 配置 啟用掃描并自動(dòng)創(chuàng)建代理的功能 factory-class="com.monk.base.jpa.PeakJpaRepositoryFactory"自己定義的bean注解方式,可以不寫,直接注解所有包下的 -->
<jpa:repositories base-package="com.xxx.xxx.repository"
transaction-manager-ref="transactionManager"
entity-manager-factory-ref="entityManagerFactory"/>
<!-- Jpa 事務(wù)配置 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
<!-- 開(kāi)啟注解事務(wù) -->
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
</beans>

以上所述是小編給大家介紹的Spring jpa和mybatis整合遇到的問(wèn)題解析,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

原文鏈接:http://www.cnblogs.com/modprobe/p/5675809.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲欧洲日产国码无码av | 美女下面揉出水免费视频 | 色综合久久夜色精品国产 | 小泽玛丽av无码观看 | 污小说在线阅读 | 好大好硬视频 | 古代色翁荡熄 | 四虎影院永久在线 | 国产美女极品免费视频 | 99久久精品久久久久久清纯 | 厨房play黄瓜进去小说h | 千金肉奴隶免费观看 | 色婷婷激婷婷深爱五月老司机 | 久久综合色超碰人人 | 亚洲精品中文字幕第一区 | 色综合天天网 | www日本在线观看 | 九九九九在线精品免费视频 | 晓雪老师我要进你里面好爽 | 2021麻豆剧果冻传媒入口永久 | 小早川怜子息梦精在线播放 | 91精品国产高清久久久久久91 | 色五夜婷婷 | a毛片免费观看完整 | 国产精品久久久久久久久 | 亚洲gogo人体大胆西西安徽 | 2020年新四虎免费 | 日韩欧美亚洲每日更新网 | 厨房play黄瓜进入 | 国产探花在线视频 | 小舞丝袜调教喷水沦为肉奴 | 欧美日韩在线观看精品 | 色图18p | 男女车车好快的车车免费网站 | 国产高清好大好夹受不了了 | 久久精品中文字幕 | 草莓视频在线免费观看 | 免费永久观看美女视频网站网址 | 欧美日韩国产一区二区三区不卡 | 亚洲国产精品嫩草影院久久 | 精品精品久久宅男的天堂 |