前言
之前一段时间写了【Spring源码分析】系列的文章,感觉对Spring的原理及使用各方面都掌握了不少,趁热打铁,开始下一个系列的文章【MyBatis源码分析】,在【MyBatis源码分析】文章的基础之上,可以继续分析数据库连接池、Spring整合MyBatis源码、Spring事物管理tx等等。
【MyBatis源码分析】整个文章结构相较【Spring源码分析】稍微改一改,后者会在每一部分源码分析的开头列出要分析的源码的实例,比如:
【MyBatis源码分析】系列文章,在本文中会一次性地将所有的代码示例写完,之后就针对这些代码一部分一部分进行分析,探究MyBatis原理。
其实MyBatis代码示例,我在之前的文章里面记得至少写了两遍,完全可以拿之前的文章作为例子,但是这里要再写一遍,就希望分享给网友朋友们一点态度:作为一个程序员,还是应当多去写代码,多去实践,不要认为之前写过的东西就没必要再写一遍,之前懂的内容就没必要再学习一遍,温故知新,写得越多用得越熟练,思考得越多成长越快。
SQL准备
首先还是建表,这里准备一段SQL:
drop table if exists mail; create table mail ( id int auto_increment not null comment '主键id', create_time datetime not null comment '创建时间', modify_time timestamp not null comment '修改时间', web_id int not null comment '站点id,1表示新浪,2表示QQ,3表示搜狐,4表示火狐', mail varchar(50) not null comment '邮箱名', use_for varchar(30) comment '邮箱用途', primary key(id), index use_for(use_for), unique index web_id_mail(web_id, mail) )charset=utf8 engine=innodb comment='邮箱表';
很多人可能有不止一个邮箱,新浪的、腾讯的、搜狐的,每个邮箱可能又有不一样的用途,这里就拿邮箱做一个例子。
建立每张表的时候应当注意唯一约束,图纸加密,像这里,一个网站下的邮箱一定是唯一的,不可能在新浪下同时存在两个名为”123@sina.com”的邮箱名,因此对web_id+mail做唯一索引。
建立实体类
建立完毕SQL之后,第二步一定是为表建立在Java层面的实体类,在SQL层面不同的词语使用”_”分割,在Java层面不同的词语则使用驼峰命名法:
现在为mail表建立实体类:
public class Mail { /** * 主键id */ private long id; /** * 创建时间 */ private Date createTime; /** * 修改时间 */ private Date modifyTime; /** * 网站id,1表示新浪,2表示QQ,3表示搜狐,4表示火狐 */ private int webId; /** * 邮箱 */ private String mail; /** * 用途 */ private String useFor; public Mail() { } public Mail(int webId, String mail, String useFor) { this.webId = webId; this.mail = mail; this.useFor = useFor; } public long getId() { return id; } public void setId(long id) { this.id = id; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public Date getModifyTime() { return modifyTime; } public void setModifyTime(Date modifyTime) { this.modifyTime = modifyTime; } public int getWebId() { return webId; } public void setWebId(int webId) { this.webId = webId; } public String getMail() { return mail; } public void setMail(String mail) { this.mail = mail; } public String getUseFor() { return useFor; } public void setUseFor(String useFor) { this.useFor = useFor; } @Override public String toString() { return "MailDO [id=" + id + ", createTime=" + createTime + ", modifyTime=" + modifyTime + ", webId=" + webId + ", mail=" + mail + ", useFor=" + useFor + "]"; } }
注意实体类一定要重写toStirng()方法,便于定位问题。
建立数据访问层
下一步,个人喜好是建立数据访问层,对于数据访问层通常有如下约定: