javaEE 持久层初探

1. 自己封装的持久层工具类和mybatis的对比

都要写javabean和dao接口,
不同的是
具体接口实现时:
自己写的工具类需要调用很多次get和set方法
mybatis用一个xml配置sql语句并自动从javabean中取值设值,类似mvvm,databinding,比自己写要简洁.

javaEE 持久层初探_第1张图片
自己封的工具类使用时
javaEE 持久层初探_第2张图片
mybatis在xml中配置增删改查语句

建表

两者都没有自动建表功能,
可以自己连接数据库手动建表,也可以再写一个工具方法,动态执行(需要的时候再执行)建表语句
有人已经开源了mybatis下写的工具类:
http://blog.csdn.net/sun5769675/article/details/51757867

表结构

javaEE 持久层初探_第3张图片
Paste_Image.png

对应的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的工具添加索引

javaEE 持久层初探_第4张图片
Paste_Image.png

一些问题

插入一条数据时报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

javaEE 持久层初探_第5张图片
Paste_Image.png

你可能感兴趣的:(javaEE 持久层初探)