发表于: 2016-03-19 21:19:48
2 3497
【操作步骤】
1.重新建一张表,用上InnoDB引擎,建表命令:
create table `student_4` (
-> `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
-> `name` varchar(50) DEFAULT NULL COMMENT '姓名',
-> `profession` varchar(50) DEFAULT NULL COMMENT '所选职业',
-> `create_at` BIGINT COMMENT '创建时间',
-> `update_at` BIGINT COMMENT '更新时间',
-> PRIMARY KEY(`id`)
-> ) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8 COMMENT='IT修真院学生名录';
2.任务2写完了。
【知识总结】
1.注意在mysql语句中反单引号的使用:`,输入方法:键盘左上角Esc键和Tab键之间。
反单引号``类似于MSSQL里面的[],理解为对字段名、表名的一个引号,不是必须的,例如建立表abc可以使用:create table abc .... 也可以使用:create table `abc` ...
反单引号是用来引在表名、字段名外面的,当表名、字段名不是保留单词、不是英文以外的其它语言、符合用户自定义标识符的规范,那么是可以不用它的。而'单引号是用来引在字符串常量外面的,任何时候的表名、字段名外面都不能出现单引号,否则就是语法错误。
2.一个创建mysql表格的示例:
CREATE TABLE `cy_dishes_cook` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`merchant_id` int(11) NOT NULL COMMENT '商家id',
`name` varchar(50) DEFAULT NULL COMMENT '名称',
`sort_no` int(11) DEFAULT '999' COMMENT '排序值',
`cooking_type_id` varchar(36) NOT NULL COMMENT '烹饪方式id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1142 DEFAULT CHARSET=utf8 COMMENT='商家菜品烹饪方式表'
其中,用到了“ENGINE=InnoDB”,如果想使用外键,事务等功能,记得用innodb引擎。“AUTO_INCREMENT=1142”表示自动增长的起始值为1142
3.在使用PostMan测试接口时,需要以JSON的方式输入数据。我以前以为在Controller类中被@RequestBody注解的参数所有属性都必须在JSON中写出来,其实不是这样的。例如在我的项目中,@RequestBody标记的参数是StudentRequest类,是以这个类为参数的,这个类的属性有两个:Header类和Student类。其中Header类的属性有两个:String ck和String v;Student类的属性有id、name、age、profession、create_at、update_at这几个。我以前以为必须把Header和Student的属性都输入才可以,其实不是:
(1){
"header":
{
"ck":"comhkj",
"v":"adfsadfas"
},
"student" :
{
"name":"caoxiaoman",
"age":"24",
"profession":"python",
"create_at":1233542342342,
"update_at":1321231231
}
}
(2){
"student" :
{
"name":"caoxiaoman",
"age":"24",
"profession":"python",
"create_at":1233542342342,
"update_at":1321231231
}
}
上面这两种写法都可以。但是不能写成这样:
(3){
"name":"caoxiaoman",
"age":"24",
"profession":"python",
"create_at":1233542342342,
"update_at":1321231231
}
4.在StudentMapper.xml文件中写sql语句时,要注意不能只写个表名,应该把数据库的名字也写上,例如:应该写"insert into caojunqi_1.student_3..."而不能只写"insert into student_3",正确写法:库名.表名。
【出现的问题(已解决)】
1.在DEBUG的时候卡住了,在堆栈信息框中一直显示:Class<T>.getDeclaredConstructors0(boolean) line:not available[native method]。解决方法:打开断点视图,把所有的断点都删除掉就可以了。
2.在使用PostMan测试接口时,发现"create_at":"123455",这种写法总是报错,错误类型是400 BAD Resquest,无论是改变数据库的字段类型还是JAVA实体类中的属性类型,都无法解决这个问题。后来我先调用了一下"http://localhost:8080/ITtask_2_2/student/findbyid"这个方法,看了一下返回来的数据格式,发现是这样写的:"createTime":"123455",恍然大悟。现在总结一下经验教训:
当创建实体类的时候,特别需要注意属性的setter和getter,它们的方法名会决定你通过JSON传递数据时的格式,例如:
(1)public Long getCreate_at() {
return create_at;
}
public void setCreate_at(Long create_at) {
this.create_at = create_at;
}
这种写法时,当你使用JSON传递数据时,应该这样写:"create_at":"123442123"
(2)public Long getCreateTime() {
return create_at;
}
public void setCreateTime(Long create_at) {
this.create_at = create_at;
}
这种写法时,当你使用JSON传递数据时,应该这样写:"createTime":"1213123123"
3.这两天一直卡在测试接口这一块,关键原因是StudentMapper.xml文件中有两处拼写错误,一处是把create_at写成了ceate_at;一处是把findCountByCondition写成了findByCondition。这两处都是粗心大意导致,而且都很难检查出来,之所以能检查出findCountByCondition这个错误,是因为在DEBUG模式下Console控制台视图中显示除了一个Error,但是这个Error是在控制台很上面的位置显示出来的,我一直都忽略了,今天偶然发现的,由此可见,以后Console里面的信息要仔细从头到尾看,不能只看底部。
【出现的问题(未解决)】
【疑问】
【任务完成结果】
1.数据库刚开始时的样子
2.GET方法测试成功
3.添加数据成功
4.添加后的数据库
5.查找数据成功
评论