最近一月工作室開發流程總結
阿新 • • 發佈:2019-02-01
一、資料庫建立:
1.設計好每一張實體表,關聯表,確定欄位是否非空,是否需要建立唯一索引
2.lastModifiedTime欄位設定注意:需要設定為自動更新為當前時間
ALTER TABLE `t_training_course`
MODIFY COLUMN `last_modified_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最後修改時間'
二、實體建立(Class):
1.一個表(包括關聯表)對應一個實體,其目的是方便對資料庫進行增刪改查;
(1)類中變數定義時型別必須是類 ;service用簡單型別;容器中一般用類型別List<Integer>防止其不能接收null物件;
(2)類註解:@Entity @Table(name = "資料庫表名");
(3)變數註解:@Id 變數名稱需要與資料庫中名稱對應 @Column(name = "last_modified_time");
(4)物件序列化問題:private static final long serialVersionUID = -6411614473004852343L;(序列號自動生成);
(5)Alt+Insert 新增get set方法;
三、DTO建立( Class):
1.Dto用於方便介面顯示幾張表(關聯表中關聯的表)中的資料時直接將資料從資料庫中聯表查詢出來存到Dto型別的容器中即可
(1)此類不需要類註解;
(2)變數型別為類型別;
(3)Id變數:不需要註解,最好定義一個其他的名稱(如sId)查詢出關聯表的Id與其對應;如果不取別名sId可能會出現查詢出的Dto的Id 值為空的情況;
(4)其餘變數註解:與類實體相同, @Column(name = "對應資料庫中的對應欄位");
四、Mapper.java 建立(interface):
1.主要是定義一些與mapper.xml對應的查詢方法,丟擲異常Exception
五、Mapper.xml 建立:
1.檔案頭部分定義內容(編碼+mybatis的引用吧);
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
2.在其中新增SQL語句
<mapper namespace="com.quality.mapper.PrinterMapper"> ----此處對應相關的Mapper檔案位置
sql查詢語句·········
</mapper> 六、SQL語句使用: 注意(1)只有有對應實體類才能resultMap="pw.Printer" (2)否則resultType="int" (3)刪除更新沒有返回值 1.根據傳入的關鍵字排序(排序時接受變數時:#{} `${}`使用區別(程式中使用前者排序不生效)): <select id="listByPage" resultMap="pw.Printer"> SELECT * FROM `t_quality_printer` ORDER BY `${orderName}` <if test="type==0"> DESC </if> limit #{offset}, #{size} </select> 2.子表查詢: 根據關聯中的欄位值查詢出 一個id值 再根據其id值查詢出另外一個表中的資料 <select id="queryPrinterByPartyId" resultMap="pw.Printer"> SELECT printer.* FROM t_quality_printer printer, t_quality_printer_group g WHERE printer.id = g.`printer_id` AND g.`party_id` = #{partyId} </select> 3.刪除:根據ID刪除一個表中的資料以及其關聯表中與其相關的資料 <delete id="delUserAndPrinterByPrinterId"> DELETE t_quality_printer,t_quality_printer_group FROM t_quality_printer LEFT JOIN t_quality_printer_group ON t_quality_printer.id = t_quality_printer_group.printer_id WHERE t_quality_printer.id = #{id} </delete> 4.更新資料庫表資訊 <update id="updatePrinter"> UPDATE `t_quality_printer` SET `code` = #{code}, `ip` = #{ip}, `desc` = #{desc} WHERE `id` = #{id} </update> 5.根據條件查詢資料量 <select id="countIpIsExist" resultType="int"> SELECT COUNT(1) FROM t_quality_printer WHERE `ip` = #{ips} </select> 6.聯表查詢 <select id="listPartyByPrinterId" resultType="PrinterGroupDTO"> SELECT t_quality_printer_group.id AS sid, t_quality_printer_group.printer_id AS printerId, t_quality_printer_group.party_id AS partyId, t_party_group.party_name AS partyName, t_party_group.english_name AS englishName, t_party_group.`desc` AS descOfParty FROM t_quality_printer_group LEFT JOIN t_party_group ON t_quality_printer_group.party_id = t_party_group.party_id WHERE t_quality_printer_group.printer_id = #{printerId} </select> 七、Service實現 1、service介面定義(interface):定義一些邏輯介面 throws SSexception(工作室定義) 2、service介面實現(class): (1)在類之前需要 @Service("printerService")----首字母小寫(即使類名大寫); (2)選中類名Alt+Enter,選擇“Implement merhods”即可新增所有的方法實現體; (3)使用Mapper或者其他Service時需要注入: 不注入則會導致使用的物件找不到(出現空指標問題,遇到過問題:沒有@Qualifier("commonDao")出現空指標錯誤));
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
2.在其中新增SQL語句
<mapper namespace="com.quality.mapper.PrinterMapper"> ----此處對應相關的Mapper檔案位置
sql查詢語句·········
</mapper> 六、SQL語句使用: 注意(1)只有有對應實體類才能resultMap="pw.Printer" (2)否則resultType="int" (3)刪除更新沒有返回值 1.根據傳入的關鍵字排序(排序時接受變數時:#{} `${}`使用區別(程式中使用前者排序不生效)): <select id="listByPage" resultMap="pw.Printer"> SELECT * FROM `t_quality_printer` ORDER BY `${orderName}` <if test="type==0"> DESC </if> limit #{offset}, #{size} </select> 2.子表查詢: 根據關聯中的欄位值查詢出 一個id值 再根據其id值查詢出另外一個表中的資料 <select id="queryPrinterByPartyId" resultMap="pw.Printer"> SELECT printer.* FROM t_quality_printer printer, t_quality_printer_group g WHERE printer.id = g.`printer_id` AND g.`party_id` = #{partyId} </select> 3.刪除:根據ID刪除一個表中的資料以及其關聯表中與其相關的資料 <delete id="delUserAndPrinterByPrinterId"> DELETE t_quality_printer,t_quality_printer_group FROM t_quality_printer LEFT JOIN t_quality_printer_group ON t_quality_printer.id = t_quality_printer_group.printer_id WHERE t_quality_printer.id = #{id} </delete> 4.更新資料庫表資訊 <update id="updatePrinter"> UPDATE `t_quality_printer` SET `code` = #{code}, `ip` = #{ip}, `desc` = #{desc} WHERE `id` = #{id} </update> 5.根據條件查詢資料量 <select id="countIpIsExist" resultType="int"> SELECT COUNT(1) FROM t_quality_printer WHERE `ip` = #{ips} </select> 6.聯表查詢 <select id="listPartyByPrinterId" resultType="PrinterGroupDTO"> SELECT t_quality_printer_group.id AS sid, t_quality_printer_group.printer_id AS printerId, t_quality_printer_group.party_id AS partyId, t_party_group.party_name AS partyName, t_party_group.english_name AS englishName, t_party_group.`desc` AS descOfParty FROM t_quality_printer_group LEFT JOIN t_party_group ON t_quality_printer_group.party_id = t_party_group.party_id WHERE t_quality_printer_group.printer_id = #{printerId} </select> 七、Service實現 1、service介面定義(interface):定義一些邏輯介面 throws SSexception(工作室定義) 2、service介面實現(class): (1)在類之前需要 @Service("printerService")----首字母小寫(即使類名大寫); (2)選中類名Alt+Enter,選擇“Implement merhods”即可新增所有的方法實現體; (3)使用Mapper或者其他Service時需要注入: 不注入則會導致使用的物件找不到(出現空指標問題,遇到過問題:沒有@Qualifier("commonDao")出現空指標錯誤));
@Autowired(4)對接收的引數進行判斷處理(封裝工具類):Assert (5)異常程式碼規範問題:不要把語句都放在Try語句中( Controller中不需要拋異常): a.能預料其會出現異常的程式碼需要做處理(如:沒有目錄建立目錄); b.能丟擲具體的異常的程式碼放在try程式碼外,用throw跑出異常; c.普通的定義變數等放在try外面; d.被呼叫方法已經有trycatch保護,且異常等級比呼叫者更低(更具體)或者同等級,則該被呼叫方法不應該放在try裡面; 八、Controller與套介面 (1)類註解與許可權、請求地址等 @Module(ModuleEnums.Party)---------------許可權 ModuleEnums為許可權配置(抑或是URL的列舉??) @RequiresPermissions("Party:Printer")--------許可權 @Controller-----------controller必須註解 @RequestMapping("admin/party/printer")--------請求地址 (2)
@Qualifier("commonDao") private CommonDao commonDao; @Autowired private PrinterMapper printerMapper; @Autowired PrinterGroupService printerGroupService;