前一篇搭建了一个简易的 SpringBoot Web 项目,最重要的一步连接数据库执行增删改查命令!

经过了一天的摸爬滚打,终于成功返回数据!

因为原来项目使用的 SpringMVC + Hibernate5,所以我这里希望继续原来的继续使用,但是现在网上好多都是 SpringBoot + Mybatis 的配置和整合,我没有了解过 Mybatis 和 Hibernate5 哪个更好,看了网上一大堆介绍 Mybatis 的文章后,依旧没明白它好在哪里,如果有大佬愿意希望可以用白话在评论区留下你的见解!

老规矩还是先看一下依赖包 pom.xml 文件

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.24</version>
</dependency>

pom.xml

我习惯使用原来的 .xml 配置文件,所以我并没有像网上大部分说的那样直接在 application.properties 文件中写数据库的配置信息

我在 resource/config 下新建一个 applicationContext.xml 文件 【注:千万不能使用 application.xml 文件命名,用这个为 .xml 命名项目是不能读取的!!!】

application.xml文件无法读取亲测失败!!!    抓耳挠腮半天才知道不能这样命名

<?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://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/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/util
https://www.springframework.org/schema/util/spring-util.xsd
http://www.springframework.org/schema/cache
http://www.springframework.org/schema/cache/spring-cache.xsd">
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
<!--freemarker method-->
<bean id="fmXmlEscape" class="freemarker.template.utility.XmlEscape"/>
<!-- <util:properties id="dbConfig" location="classpath:/config/hibernate/jdbc.properties" local-override="true"/>-->
<bean id="dbConfig" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<property name="ignoreUnresolvablePlaceholders" value="true"/>
<property name="locations" value="classpath:/config/hibernate/jdbc.properties"/>
</bean>
<!-- <context:property-placeholder location="classpath:/config/hibernate/jdbc.properties" />-->
<!-- 添加sessionFactory bane ,注意,该类是Spring提供的 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" /> <property name="initialSize" value="${dbcp.initialSize}" />
<property name="maxActive" value="${dbcp.maxActive}" />
<property name="minIdle" value="${dbcp.minIdle}" />
<property name="maxWait" value="${dbcp.maxWait}" />
<property name="defaultAutoCommit" value="${dbcp.defaultAutoCommit}" />
<property name="removeAbandoned" value="${dbcp.removeAbandoned}" />
<property name="removeAbandonedTimeout" value="${dbcp.removeAbandonedTimeout}" />
<property name="logAbandoned" value="${dbcp.logAbandoned}"/> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="${dbcp.timeBetweenEvictionRunsMillis}" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="${dbcp.minEvictableIdleTimeMillis}" />
<property name="validationQuery" value="${dbcp.validationQuery}" />
<property name="testWhileIdle" value="${dbcp.testWhileIdle}" />
<property name="testOnBorrow" value="${dbcp.testOnBorrow}" />
<property name="testOnReturn" value="${dbcp.testOnReturn}" /> <!-- 打开PSCache,并且指定每个连接上PSCache的大小 如果用Oracle,则把poolPreparedStatements配置为true,mysql可以配置为false。分库分表较多的数据库,建议配置为false。-->
<property name="poolPreparedStatements" value="${dbcp.poolPreparedStatements}" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="${dbcp.maxPoolPreparedStatementPerConnectionSize}" />
<!-- <property name="timeBetweenLogStatsMillis" value="${dbcp.timeBetweenLogStatsMillis}" />-->
<!-- <property name ="statLogger" ref ="localStatLogger" />-->
<!-- 配置监控统计拦截的filters -->
<property name="filters" value="${dbcp.filters}" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 注入Hibernate 配置文件路径,前面要加上 classpath:-->
<property name="packagesToScan">
<list>
<value>com.seventeen.entity*</value><!-- 载入hibernate的jpa注解形式的实体类 -->
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.connection.url">${jdbc.url}</prop>
<prop key="hibernate.connection.driver_class">${jdbc.driver}</prop>
<prop key="hibernate.connection.autocommit">${hibernate.connection.autocommit}</prop>
<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
<prop key="hibernate.dialect">${hibernate.dialect}</prop>
<prop key="hibernate.autoReconnect">${jdbc.autoReconnect}</prop>
</props>
</property>
</bean> <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <bean id="captchaProducer" class="com.google.code.kaptcha.impl.DefaultKaptcha">
<property name="config">
<bean class="com.google.code.kaptcha.util.Config">
<constructor-arg>
<props>
<prop key="kaptcha.border">no</prop>
<prop key="kaptcha.border.color">105,179,90</prop>
<prop key="kaptcha.textproducer.font.color">black</prop>
<prop key="kaptcha.image.width">90</prop>
<prop key="kaptcha.textproducer.font.size">35</prop>
<prop key="kaptcha.image.height">46</prop>
<prop key="kaptcha.session.key">code</prop>
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.textproducer.font.names">宋体,楷体,微软雅黑</prop>
<prop key="kaptcha.obscurificator.impl">com.google.code.kaptcha.impl.ShadowGimpy</prop>
<prop key="kaptcha.noise.impl">com.google.code.kaptcha.impl.NoNoise</prop>
</props>
</constructor-arg>
</bean>
</property>
</bean> <util:properties id="appProperties" location="classpath:/config/app/app.properties" local-override="true"/>
</beans>

applicationContext.xml

同时还有 app.properties 、 hibernate.cfg.xml 以及 jdbc.properties

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.url">jdbc:mysql://127.0.0.1:3306/hk_room_kfyyxt</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
</session-factory>
</hibernate-configuration>

hibernate.cfg.xml

ResPhysicalPath=E:\\cache
ForbidFileType=exe,dll,java,php,js,ftl,jar,sh,bat,shell,msi,sql
UploadImageExt=jpg,png,gif,jpeg,PNG,JPG
UploadImageSize=2
UploadFileExt=jpg,png,gif,jpeg,bmp,pdf,doc,docx,ppt,pptx,xls,xlsx,zip,rar,txt
UploadFileSize=50
UploadFileSizeEnter=500
UploadImageSizeEnter=10
baseView=/WEB-INF/views

app.properties

jdbc.url=jdbc:mysql://127.0.0.1/hk_room_kfyyxt?serverTimezone=Asia/Shanghai
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.username=root
jdbc.password=root
jdbc.autoReconnect=true
dbcp.initialSize=10
dbcp.maxActive=20
dbcp.minIdle=10
dbcp.maxIdle=0
dbcp.maxWait=60000
dbcp.defaultAutoCommit=true
dbcp.removeAbandoned=true
dbcp.removeAbandonedTimeout=1800
dbcp.logAbandoned=true
dbcp.timeBetweenEvictionRunsMillis=60000
dbcp.minEvictableIdleTimeMillis=300000
dbcp.whenExhaustedAction=1
dbcp.validationQuery=select 1
dbcp.testWhileIdle=true
dbcp.testOnBorrow=true
dbcp.testOnReturn=false
dbcp.poolPreparedStatements=false
dbcp.maxPoolPreparedStatementPerConnectionSize=20
dbcp.filters=stat
dbcp.timeBetweenLogStatsMillis=600000
hibernate.hbm2ddl.auto=none
#指定是否打印SQL语句
hibernate.show_sql=false
#格式SQL语句
hibernate.format_sql=true
#自动提交
hibernate.connection.autocommit=true
#dialect注册mysql方法
hibernate.dialect=com.seventeen.core.database.MySQLDialectReg

jdbc.properties

之后我就开始编写函数调用对数据库进行增删改查,我以为这样就可以结束了,但是万万没想到最难的出现了!!!

下面是我写的调用数据库,因为和原来差别不大只展示一下目录:

我以为完事大吉了,但是出现了一个纠结我半天的问题!!!

我用浏览器访问了,我刚才写的,出现了下面的错误:

org.springframework.orm.jpa.EntityManagerHolder cannot be cast to org.springframework.orm.hibernate5.SessionHolder

这个问题我上网搜了好久,但是并没有找到有效的解决办法,后来经过不断试验,终于找到了方法。

修改入口文件 :

/**
* 否则报错:java.lang.ClassCastException:
* org.springframework.orm.jpa.EntityManagerHolder cannot be cast to org.springframework.orm.hibernate5.SessionHolder
*/
@SpringBootApplication(exclude= HibernateJpaAutoConfiguration.class)
@ImportResource(locations={"classpath:/config/applicationContext.xml"})
public class KfyyxtApplication { public static void main(String[] args) {
SpringApplication.run(KfyyxtApplication.class, args);
} }

原来是  @SpringBootApplication ,经过各种文章讲解终于找得了解决方法,之后再次访问页面终于成功了!!!

到此,SpringBoot 项目 整合 Hibernate 连接 Mysql 数据库成功,但是我依旧没明白  @SpringBootApplication(exclude= HibernateJpaAutoConfiguration.class) 这段代码究竟是什么意思,有大神希望可以给解答一下!

SpringBoot 整合 hibernate 连接 Mysql 数据库的更多相关文章

  1. springboot整合mybatis连接mysql数据库出现SQLException异常

    在springboot整合mybatis连接数据库的时候,项目中遇到一个SQLException,我检查了properties配置文件,看数据源有没有配错,检查有没有打错字,在数据库中把sql语句查询 ...

  2. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  3. 如何用IDEA创建springboot(maven)并且整合mybatis连接mysql数据库和遇到的问题

    一.New->Project 二.点击next 三.在Group栏输入组织名,Artifact就是项目名.选择需要的java版本,点击next 四.添加需要的依赖 在这里我们也可以添加sql方面 ...

  4. Hibernate连接MySQL数据库乱码相关问题

    1.查看MySQL字符编码 >show variables like 'character%'; #执行编码显示 其中character_set_client,character_set_res ...

  5. SpringBoot配置JDBC连接MySql数据库的时候遇到了报错:HikariPool-1 - Exception during pool initialization

    使用SpringBoot做JAVA开发时,JDBC连接MySql数据库的时候遇到了报错: ERROR 10392 --- [ main] com.zaxxer.hikari.pool.HikariPo ...

  6. Hibernate连接mysql数据库的配置

    <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

  7. kotlin + springboot整合mybatis操作mysql数据库及单元测试

    项目mybatis操作数据库参考: http://how2j.cn/k/springboot/springboot-mybatis/1649.html?p=78908 junit对controller ...

  8. SpringBoot整合SpringData和Mysql数据库

    1.新建maven项目(具体的新建过程就不细说了) 2.添加maven依赖,也就是在pom.xml文件添加项目的依赖jar包: <project xmlns="http://maven ...

  9. 一个简单的java项目使用hibernate连接mysql数据库

    实体类与表对应文件Customer.hbm.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTY ...

随机推荐

  1. $().arr使用

    $("#handmoney").attr("readonly","readonly"); 只读 $("img").att ...

  2. 使用两个FIFO完成流水操作

    一.设计目标 写一个FIFO控制器,控制器里有两个FIFO,输入的数据由串行接收模块(uart_rx_module)送来,一共有86行86列的数据,按0.1.2行,1.2.3行,直到最后83.84.8 ...

  3. 2019 徐州网络赛 M Longest subsequence t

    对于答案来说,一定是 前 i-1 个字符和 t的前 i 个一样,然后第 i 个字符比 t的 大 \(i\in [1,m]\) 前缀为t,然后长度比t长 对于第一种情况,枚举这个 i ,然后找最小的 p ...

  4. A. Crazy Town

    Crazy Town is a plane on which there are n infinite line roads. Each road is defined by the equation ...

  5. hdu4501——小明系列故事——买年货(多维背包)

    题解: 思路:将v1,v2,k都当作一种体积,开三维dp数组,每种物品只能取一次 代码中的for循环是倒着进行的,知道01背包和完全背包的肯定明白,倒着进行的就代表每种物品只选择一次 代码: 1 #i ...

  6. Interop.Word Documents.Open is null

    问题描述 程序在Windows Server 2012 R2调用Word组件正常,但是换到Windows Server 2008 R2之后,程序异常. 代码 Microsoft.Office.Inte ...

  7. Redis-sentinel 哨兵(HA)

    Sentinel 介绍 Redis-Sentinel 是 Redis 官方推荐的高可用性(HA)解决方案,当用 Redis 做 Master-slave 的高可用方案时,假如Master 宕机了,Re ...

  8. Zabbix 微信监控报警

    Zabbix-Server 设置 # 使脚本目录生效 [root@zabbix ~]# grep 'script' /etc/zabbix/zabbix_server.conf # AlertScri ...

  9. VMware虚拟化与Kubernetes(K8s)类比阐述-适合VMware用户

    概述 容器技术是最近几年非常热门的技术,它似乎就是为云端的应用量身定制的,所以它也被贴上了云原生应用 (Cloud Native Application) 技术的标签.目前最为流行的容器管理调度平台是 ...

  10. ++i和i++的区别

    它们两个的数值变化的区别,我这里就不多说了 这里主要说明两者在效率上的区别 (1)首先如果是自带的数据类型,比如int型,++i和i++,编译器的实现方式是相同的,两者并没有效率上的区别,虽然也有副本 ...