发表于: 2016-03-19 21:19:48

2 3494


【操作步骤】
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.查找数据成功



返回列表 返回列表
评论

    分享到