數據庫表設計
數據庫表在設計中必須帶有如下字段,此爲mysql數據,如使用oracle數據庫請替換對應數據類型
字段 | 類型 | 說明 |
---|---|---|
id | varchar(40) | 主鍵 |
creator | varchar(40) | 創建人 |
create_time | datetime | 創建時間 |
modifier | varchar(40) | 修改人 |
modified_time | datetime | 修改時間 |
ts | datetime | 事件戳 |
dr | varchar(1) | 刪除標記 |
代碼部分
一、實體類相關
1、實體類繼承 AbstractBaseEntity基類
2、類註解 @TableName(name = " ") name中填寫數據庫表名
3、屬性註解 @Exclude 該屬性不參與持久化
4、實體類全類名必須爲 aaa.aaa.entity.Aaaa 格式,同時全類名中只允許出現一次entity包名
示例代碼:
package *.*.demon.entity;
import com.*.base.annotation.Exclude;
import com.*.base.annotation.TableName;
import com.*.base.entity.AbstractBaseEntity;
@TableName(name = "demon")
public class Demon extends AbstractBaseEntity {
private String code;
private String name;
private String sex;
private Integer age;
@Exclude
private String option;
二、service類與mapper類相關
1、service類繼承AbstractBaseService基類
2、mapper接口繼承BaseMapper接口
3、mapper全類名必須爲 aaa.aaa.mapper.AaaaMapper格式,同時全類名中只允許出現一次mapper包名
實例代碼
@Service
public class DemoService extends AbstractBaseService<Demo, DemoMapper> {
}
@MyBatisDao
public interface DemoMapper extends BaseMapper<Demo> {
}
三、調用API相關實例
在controller層調用service基類方法,無XML實現單表基本操作。
package com.*.demo.web;
import com.*.base.entity.RequestPage;
import com.*.demo.entity.Demo;
import com.*.demo.service.DemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("demoWeb")
public class DemoWeb {
@Autowired
private DemoService demoService;
@RequestMapping("add")
public Demo add(){
Demo demo = new Demo();
demo.setCode("123");
demo.setName("測試");
demo.setSex("男");
demo.setAge(12);
return demoService.save(demo);
}
@RequestMapping("update")
public Demo update(){
Demo demo = new Demo();
demo.setId("7bb977db-6934-44fe-9162-0614f1d3393e");
demo.setCode("123修改");
demo.setName("測試修改");
demo.setSex("女");
demo.setAge(20);
return demoService.update(demo);
}
@RequestMapping("findOne")
public Demo findOne(){return demoService.findOne("7bb977db-6934-44fe-9162-0614f1d3393e");}
@RequestMapping("findAll")
public List<Demo> findAll(){return demoService.findAll();}
@RequestMapping("findPage")
public RequestPage findPage(){return demoService.findAll(new RequestPage(1,15));}
@RequestMapping("delete")
public void delete(){demoService.delete("4f1d7c0d");}
@RequestMapping("delAll")
public void delAll(){demoService.deleteAll("78aa00b5,7ca25f3a,913c0c52");}
}
四、未完成部分
- 添加自定義數據庫字段名稱註解
- 查詢方法添加排序與條件查詢
- 編寫BaseController基類,真正實現後臺無代碼
- 主子表的級聯保存,單條數據主子的級聯查詢
- 編寫前端模版代碼,配合後臺,實現自動生成網頁的目的
- 分頁總條數查詢優化
五、鳴謝
此框架是基於mybatis的@InsertProvider @UpdateProvider @SelectProvider 與 Interceptor攔截器基礎上實現的,在這過程中遇到查詢結果封裝問題,特鳴謝 @ YingTao8 @weixin_34228387 兩位文章的幫助
mybatis 拓展 – 通用mapper 和 動態 resultMap
mybatis抽取基類BaseMapper(通用增/刪/改/查)
本文實例代碼及具體實現代碼已上傳 github有興趣的同學歡迎交流學習