SpringBoot-集成jpa遇到的一些问题

使用springboot集成jpa遇到一些问题,主要归为如下几点:
1.启动项目时,报错:Cannot determine embedded database driver class for database type NONE
2.controller方法中参数是Bean类型,进行mock测试时不知道如何传递参数
3.对jpa.hibernate.ddl-auto配置了解不够,导致mock测试时出现第一次成功,第二次失败的问题


问题1
原因:没有在application.properties配置文件中添加数据库相关配置
解决思路:

1.添加相关配置

spring.datasource.dirver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://10.10.88.51:3306/analysedb
spring.datasource.username=mpup
spring.datasource.password=mpup
spring.jpa.hibernate.ddl-auto=update
spring.jpa.hibernate.show-sql=true
spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect
问题2
解决思路:
1.在controller对应的方法中,在该Bean类型参数前面加@RequestBody注解,@RequestBody一般用于处理application/json类型,在Mock测试时参数传递类型也使用application/json类型即可

controller方法代码如下:

@RequestMapping(value = "add", method = RequestMethod.POST)
public void addPlayer(@RequestBody Player aPlayer)
{
	logger.info(String.format("添加一个Player, 参数Player=%s", aPlayer));
	
	playerRepository.save(aPlayer);
}

Mock单元测试代码如下:

try
{
	Player aPlayer = new Player();
	aPlayer.setName("ignore1992");
	aPlayer.setId(1);
	RequestBuilder request = post("/player/add").contentType(MediaType.APPLICATION_JSON).content(JSONObject.toJSONString(aPlayer));
	mvc.perform(request);
}
catch (Exception e)
{
	e.printStackTrace();
}

完整代码路径如下:

https://github.com/ingorewho/springboot-develope/tree/master/springboot-data-jpa

问题3

学习了下jpa.hibernate.ddl-auto的使用详解:

jpa.hibernate.ddl-auto是hibernate的配置属性,其主要作用是:自动创建、更新、验证数据库表结构。该参数的几种配置如下:
·create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。
·create-drop:每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。
·update:最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等应用第一次运行起来后才会。
·validate:每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值