2021SC@SDUSC
出现了些事故 本周分析项目后端文件夹sdudoc-mbg内的代码
sdudoc-mbg
MBG是Mybatis generator英文的缩写,是根据数据库中的表,反向生成实体类,DAO,Mapper文件的插件
pom.xml:
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.7</version>
</dependency>
项目中结构:
ds1与ds2完全一致 暂时不知道为什么
更新:ds:data source,两个dataSource,大概是为了分布式
关于repository和DAO:
Repository是对象的仓库,也就是保存对象的地方,可以说是一个OO系统,业务层是围绕活动的对象进行,活动的对象是从仓库中获取的,也是通过交给仓库进行对象长久保管、保存到数据库。而DAO则没有如此OO概念,DAO是Data access Object,DAO中是数据概念。
代码分析
以entity Book为例分析,首先此类继承了Serializable标识接口,定义private static final long serialVersionUID = 1L; 其实也可以不定义这一Id,但是默认的id对class敏感,在反序列化时可能会导致抛出InvalidClassException。
@ApiModelProperty()用于方法,字段; 表示对model属性的说明或者数据操作更改
value–字段说明
name–重写属性名字
dataType–重写属性类型
required–是否必填
example–举例说明
hidden–隐藏
class中定义了book下的属性:addtime,author,dynasty…
定义相应的get和set方法,属于常规操作
package cn.edu.sdu.entity.ds1;
import io.swagger.annotations.ApiModelProperty;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.Date;
@Entity(name = "ds1Book")
@Table(name = "book")
public class Book implements Serializable {
@Id
@ApiModelProperty(value = "添加时间")
private Date addtime;
@ApiModelProperty(value = "书籍作者")
private String bookauthor;
@ApiModelProperty(value = "朝代")
private String dynasty;
@ApiModelProperty(value = "书籍名称")
private String bookname;
@ApiModelProperty(value = "成书日期")
private Date pulishedtime;
@ApiModelProperty(value = "文章数目")
private String totalarticle;
@ApiModelProperty(value = "创建者id")
private String uid;
private static final long serialVersionUID = 1L;
public Date getAddtime() {
return addtime;
}
public void setAddtime(Date addtime) {
this.addtime = addtime;
}
public String getBookauthor() {
return bookauthor;
}
public void setBookauthor(String bookauthor) {
this.bookauthor = bookauthor == null ? null : bookauthor.trim();
}
public String getDynasty() {
return dynasty;
}
public void setDynasty(String dynasty) {
this.dynasty = dynasty == null ? null : dynasty.trim();
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname == null ? null : bookname.trim();
}
public Date getPulishedtime() {
return pulishedtime;
}
public void setPulishedtime(Date pulishedtime) {
this.pulishedtime = pulishedtime;
}
public String getTotalarticle() {
return totalarticle;
}
public void setTotalarticle(String totalarticle) {
this.totalarticle = totalarticle == null ? null : totalarticle.trim();
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid == null ? null : uid.trim();
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", addtime=").append(addtime);
sb.append(", bookauthor=").append(bookauthor);
sb.append(", dynasty=").append(dynasty);
sb.append(", bookname=").append(bookname);
sb.append(", pulishedtime=").append(pulishedtime);
sb.append(", totalarticle=").append(totalarticle);
sb.append(", uid=").append(uid);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}
totalarticle、uid、dynasty处
this.uid = uid == null ? null : uid.trim();
//删除字符串首部和尾部的空格
trim()的处理源码如下:
public String trim() {
String ret = isLatin1() ? StringLatin1.trim(value)
: StringUTF16.trim(value);
return ret == null ? this : ret;
}
经常与toString一起使用(可以取出用户不规范输入的空格),如
String text = t.getText().toString().trim();
最终要以所形成book的一串文本存入数据库,string的生成:
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
/*
* Constructs a string builder with no characters in it and an
* initial capacity of 16 characters.
@HotSpotIntrinsicCandidate
public StringBuilder() {
super(16);
}
*/
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", addtime=").append(addtime);
sb.append(", bookauthor=").append(bookauthor);
sb.append(", dynasty=").append(dynasty);
sb.append(", bookname=").append(bookname);
sb.append(", pulishedtime=").append(pulishedtime);
sb.append(", totalarticle=").append(totalarticle);
sb.append(", uid=").append(uid);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
其他实体逻辑与book同理。