MyBatis基礎操作——CRUD

MyBatis基礎操作——CRUD

前置步驟

創(chuàng)建數(shù)據(jù)庫

創(chuàng)建好需要操作的數(shù)據(jù)庫對象,插入幾條數(shù)據(jù),并測試能夠連接到主機。


創(chuàng)建實體類

實體類用 @Data 注解可以直接內部生成get,set,toString,Equal和HashCode方法。?

@NoArgsConstructor和@AllArgsConstructor注解可以內部生成無參構造和全參構造

在創(chuàng)建實體類時若數(shù)據(jù)庫中的參數(shù)含有下劃線,則使用駝峰命名去掉下劃線將下劃線后的首字母大寫


創(chuàng)建Mapper類

創(chuàng)建一個包 mapper。在mapper包下創(chuàng)建一個接口 UserMapper ,這是一個持久層接口(Mybatis的持久層接口規(guī)范一般都叫 XxxMapper)。并用注解@Mapper

在這個接口中定義的所有方法無需在實現(xiàn)類中重寫,在其他類中創(chuàng)建對象就可以直接就調用。

導入依賴并添加配置文件

配置文件中的內容如下


接下來將介紹MyBatis的基礎增刪改查操作:

1.按id刪除記錄

刪除的注解是@Delete,方法是在@Delete注解中加入刪除記錄的SQL語句后,且我們需要進行動態(tài)管理的參數(shù)使用占位符替換,在Mybatis中提供的參數(shù)占位符有兩種:${...} 、#{...}

- #{...}

? - 執(zhí)行SQL時,會將#{…}替換為?,生成預編譯SQL,會自動設置參數(shù)值

? - 使用時機:參數(shù)傳遞,都使用#{…}

- ${...}

? - 拼接SQL。直接將參數(shù)拼接在SQL語句中,存在SQL注入問題

? - 使用時機:如果對表名、列表進行動態(tài)設置時使用

如果mapper接口方法形參只有一個普通類型的參數(shù),#{…} 里面的屬性名可以隨便寫,如:#{id}、#{value}。但是為了增強代碼的可讀性建議保持名字一致。

若需要有返回值,返回值為int類型,值為影響的記錄數(shù)。


2.插入記錄

? 插入的注解是@Insert,新增記錄時,為了避免參數(shù)過于復雜,直接用實體類作為參數(shù),在調用時創(chuàng)建好實體類放入即可插入對應字段。在數(shù)據(jù)添加成功后,默認情況下,執(zhí)行插入操作時,是不會主鍵值返回的。如果我們想要拿到主鍵值,需要在Mapper接口中的方法上添加一個Options注解,并在注解中指定屬性useGeneratedKeys=true和keyProperty="實體類屬性名"。


3.按id修改記錄

修改的注解是@Update,其方法和前面說的一致,在Update注解中加入修改記錄的SQL語句后,再用占位符#{字段名}替換掉需要傳遞參數(shù)的參數(shù)即可。


4.按id查詢記錄

? 查詢的注解是@Select,查詢操作的返回值是查詢的結果記錄,如果只有一條可以用實體類(我這里是Emp)來接收,如果是多條記錄,則可以用List(Emp)來接收。


這里還有一個問題,如果按照原來的流程來寫,我們最終測試看到查詢返回的結果中大部分字段是有值的,但是deptId,createTime,updateTime這幾個字段是沒有值的,而數(shù)據(jù)庫中是有對應的字段值的。原因如下:

-實體類屬性名和數(shù)據(jù)庫表查詢返回的字段名一致,mybatis會自動封裝。

-如果實體類屬性名和數(shù)據(jù)庫表查詢返回的字段名不一致,不能自動封裝。

解決方案有三種:

(1)起別名

在@Select注解的SQL語句中,給查詢的字段添加別名,別名和實體類中的一致。

(2)結果映射

使用@Results和@Result注解來將實體類的參數(shù)映射到數(shù)據(jù)庫的字段,下面是一個示例:

@Results({

? ? ? ? ? ?@Result(column = "dept_id",property = "deptId"),

? ? ? ? ? ?@Result(column = "create_time",property = "createTime"),

? ? ? ? ? ?@Result(column = "updateTime",property = "updateTime"),

? ?})

其中colum是數(shù)據(jù)庫字段,property是實體類中的參數(shù)。

(3)開啟駝峰命名自動映射

可以直接在配置文件中加入語句啟動mybatis的駝峰命名自動映射,然后系統(tǒng)會自動將有下劃線格式的字段映射為駝峰命名,但是這種方法要求寫的代碼必須是標準的駝峰命名。

5.條件查詢

條件查詢與前面的類似,都是用占位符替換掉需要進行動態(tài)管理的參數(shù),且條件查詢的結果一般為多條,所以返回值為實體類集合List<Emp,>。

有一點需要注意,模糊查詢中我們需要替換的是引號內的內容,這里使用#{...}去替換的話由于#{...}是預編譯而不是拼接,就達不到我們的效果,有以下兩種解決方式:

(1)使用${...}拼接

模糊查詢使用${...}進行字符串拼接,這種方式呢,由于是字符串拼接,并不是預編譯的形式,所以效率不高、且存在sql注入風險。

(2)使用concat()拼接

concat是MySQL提供的字符串拼接函數(shù),其使用方法為:concat('%' , #{ } , '%')? ,可以同時實現(xiàn)拼接加預編譯。


?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容