1. 自己封装的持久层工具类和mybatis的对比
都要写javabean和dao接口,
不同的是
具体接口实现时:
自己写的工具类需要调用很多次get和set方法
mybatis用一个xml配置sql语句并自动从javabean中取值设值,类似mvvm,databinding,比自己写要简洁.
建表
两者都没有自动建表功能,
可以自己连接数据库手动建表,也可以再写一个工具方法,动态执行(需要的时候再执行)建表语句
有人已经开源了mybatis下写的工具类:
http://blog.csdn.net/sun5769675/article/details/51757867
表结构
对应的sql语句为:
CREATE TABLE qxinli_memember_address(
user_id int NOT NULL,
name varchar(64) NOT NULL,
address varchar(256) NOT NULL,
postcode varchar(32),
phone int NOT NULL ,
status int default 1,
create_time timestamp,
update_time timestamp,
id int PRIMARY KEY
);
CREATE TABLE qxinli_goods_tag(
category_id int NOT NULL,
title varchar(64) NOT NULL,
status int default 1,
create_time timestamp,
update_time timestamp,
id int PRIMARY KEY
);
建立另外的两个索引的语法:
CREATE INDEX status_index ON qxinli_memember_address (status);
不知为何不起作用,用sql-front的工具添加索引
一些问题
插入一条数据时报Field 'id' doesn't have a default value
写sql语句的时候没有加上auto_increment,所以在数据存储的时候老是报Field 'id' doesn't have a default value
存11位的手机号,用int来存,报Data truncation: Out of range value for column 'phone' at row 1
如果在建表时不指定字段int类型的长度时,系统则默认生成长度为11的字段。11也是int类型的最大长度,其中第一位表示符号+或者-,后面十位表示数字。 而这十位不是十个比特位,也不是十个字节,就是十个十进制位.
所以,存储手机号应该用bigint