Spring boot学习采坑之路

1     为所有的java工程设置默认的maven路径

把所有的java工程都关闭,

设置后,结果一致不成功,是因为使用公司内网的maven镜像,所以无限网络链接需要改成公司内网

然后改成公司内网后,然后升级一下maven

升级之前把m2路径下的repository下载的jar包给删掉,重新reimport一下。

 

<dependency>

   <groupId> org.springframework.boot </groupId>

  <artifactId> spring-boot-configuration-processor </artifactId>

   <optional>true </optional>

</dependency>

配置后,升级一下maven

 

 

 

2     Dao和service和controller层的含义

Dao层是为了和数据库交互的

 

Service层是为了是想应用层的服务的

 

Controller是为了实现和web的交互的。

 

3     当读取一个数据库的时候出现索引越界的错误

 

可能这是数据库为空,然后我们读取的时候按照id来读取,因为数据库为空,所有其按照id来读取就会出现索引错误的现象

 

 

 

4     Springboot做例子的时候,发现findOne不能使用

 

首先我说一下我遇到问题的由来

我先是用的SpringDataJPA的1.11版本,可以使用findOne()方法根据id查询,

然后我使用了2.0.5版本,发现findOne()方法报错了,不能用来当作根据id查询了,

·       getOne 当查询一个不存在的id数据时,会直接抛出异常,因为其返回的是一个引用,简单就是说一个代理对象。

·       无论如何都想要有一个返回,则使用findOne,而不用getOne。

2.0.5的已经变成了findById(id).get()来查询了

//查询一个女生
@GetMapping(value= "/girls/{id}")
public GirlgirlFindOne(@PathVariable("id") Integer id){
   
returngirlRepository.findOne(id).get();
}

 

5      Request method 'DELETE' not supported

 

 

Springboot: Request method 'DELETE' not supportedRequest method 'PUT' not supported Request method 'POST' not supported

GET,POST,PUT,DELETE Spring都支持,不要怀疑Spring, 一定是前端发送的rest 请求和后端的响应不匹配,

查找原因以及解决办法,很简单

chrome打开F12控制台,仔细检查核对发送到服务端的rest请求的url是否和后端的rest服务匹配,如果不匹配就会出类似错误

比如后端服务如果定义是这样,http://xxx.xxx.xxx/users/abc请求,将删除用户abc

@RestController
@RequestMapping(value="/users")
public class UserDataController {
    @RequestMapping(value="{/id}", method=RequestMethod.DELETE)
... ....

如果前端有拼接URL的代码,比如

var url ="http://xxx.xxx.xxx/users/" + userid 

但如果如果因为bug或者错误,导致userid为空,就可能发送的请求是http://host/users/, 这样就会导致 Request method 'DELETE'not supportedRequest method 'PUT' not supported Request method 'POST' not supported类似的异常


6.mysql使用事务处理,往数据库中存两个数据,要求一个存失败另一个也不能成功。以下的代码是没有问题的,结果就是不能实现这个功能,事后查了才知道mysql默认表的类型是MyIsam,这种是非事务安全型的,所以不能实现事务的功能

MySQL 数据表主要支持六种类型 ,分别是:BDB、HEAP、ISAM、MERGE、MYISAM、InnoBDB。

这六种又分为两类,一类是”事务安全型”(transaction-safe),包括BDB和InnoDB;其余都属于第二类,称为”非事务安全型”(non-transaction-safe)。

用一下的命令更改一下mysql表的类型就可以了。ALTER table test.girl engine = InnoDB;

@Transactional
public void insertTwo(){
    try {
        Girl girlA = new Girl();
        girlA.setCupSize("F");
        girlA.setAge(18);
        girlRepository.save(girlA);

        Girl girlB = new Girl();
        girlB.setCupSize("Baaa");
        girlB.setAge(19);
        girlRepository.save(girlB);
    }
    catch (Exception ex){
        throw new RuntimeException();
    }

}
 创建表时指定表类型的方法
CREATE TABLE `message` (
`id` int(11) NOT NULL auto_increment,
`sender` varchar(255) default NULL,
`receiver` varchar(255) default NULL,
`content` text,
`is_read` char(1) default 'N',
`send_time` datetime default NULL,
`del_flag` tinyint(4) default '0',
PRIMARY KEY (`id`)
) ENGINE=MYISAM;
 
-- 也可以创建后更改:
ALTER TABLE `message` ENGINE = INNODB;
 
-- 查看表类型(存储引擎)
SHOW TABLE STATUS FROM `test`;
-- -- 结果为数据库test中所有表的信息,其中第二项type即是表的类型。
 
-- 查看表类型(存储引擎)2
SHOW CREATE TABLE `message`;
-- -- 结果为表message创建时的信息,其中有TYPE或ENGINE一项,指定了表的类型(存储引擎)。
-- show tables不能得到表类型的信息。


 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值