MyBatis學習總結(二)——使用MyBatis對表執行CRUD操作

MyBatis學習總結(二)——使用MyBatis對表執行CRUD操作

  上一篇博文MyBatis學習總結(一)——MyBatis快速入門中我們講了如何使用Mybatis查詢users表中的數據,算是對MyBatis有一個初步的入門了,今天講解一下如何使用MyBatis對users表執行CRUD操作。本文中使用到的測試環境是上一篇博文中的測試環境。

一、使用MyBatis對表執行CRUD操作——基于XML的實現

1、定義sql映射xml文件

  userMapper.xml文件的內容如下:

復制代碼
 1 <?xml version="1.0" encoding="UTF-8" ?>2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">3 <!-- 為這個mapper指定一個唯一的namespace,namespace的值習慣上設置成包名+sql映射文件名,這樣就能夠保證namespace的值是唯一的4 例如namespace="me.gacl.mapping.userMapper"就是me.gacl.mapping(包名)+userMapper(userMapper.xml文件去除后綴)5  -->6 <mapper namespace="me.gacl.mapping.userMapper">7     <!-- 在select標簽中編寫查詢的SQL語句, 設置select標簽的id屬性為getUser,id屬性值必須是唯一的,不能夠重復8     使用parameterType屬性指明查詢時使用的參數類型,resultType屬性指明查詢返回的結果集類型9     resultType="me.gacl.domain.User"就表示將查詢結果封裝成一個User類的對象返回
10     User類就是users表所對應的實體類
11     -->
12     <!-- 
13         根據id查詢得到一個user對象
14      -->
15     <select id="getUser" parameterType="int" 
16         resultType="me.gacl.domain.User">
17         select * from users where id=#{id}
18     </select>
19     
20     <!-- 創建用戶(Create) -->
21     <insert id="addUser" parameterType="me.gacl.domain.User">
22         insert into users(name,age) values(#{name},#{age})
23     </insert>
24     
25     <!-- 刪除用戶(Remove) -->
26     <delete id="deleteUser" parameterType="int">
27         delete from users where id=#{id}
28     </delete>
29     
30     <!-- 修改用戶(Update) -->
31     <update id="updateUser" parameterType="me.gacl.domain.User">
32         update users set name=#{name},age=#{age} where id=#{id}
33     </update>
34     
35     <!-- 查詢全部用戶-->
36     <select id="getAllUsers" resultType="me.gacl.domain.User">
37         select * from users
38     </select>
39     
40 </mapper>
復制代碼

  單元測試類代碼如下:

復制代碼
 1 package me.gacl.test;2 3 import java.util.List;4 import me.gacl.domain.User;5 import me.gacl.util.MyBatisUtil;6 import org.apache.ibatis.session.SqlSession;7 import org.junit.Test;8 9 public class TestCRUDByXmlMapper {
10 
11     @Test
12     public void testAdd(){
13         //SqlSession sqlSession = MyBatisUtil.getSqlSession(false);
14         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
15         /**
16          * 映射sql的標識字符串,
17          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標簽的namespace屬性的值,
18          * addUser是insert標簽的id屬性值,通過insert標簽的id屬性值就可以找到要執行的SQL
19          */
20         String statement = "me.gacl.mapping.userMapper.addUser";//映射sql的標識字符串
21         User user = new User();
22         user.setName("用戶孤傲蒼狼");
23         user.setAge(20);
24         //執行插入操作
25         int retResult = sqlSession.insert(statement,user);
26         //手動提交事務
27         //sqlSession.commit();
28         //使用SqlSession執行完SQL之后需要關閉SqlSession
29         sqlSession.close();
30         System.out.println(retResult);
31     }
32     
33     @Test
34     public void testUpdate(){
35         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
36         /**
37          * 映射sql的標識字符串,
38          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標簽的namespace屬性的值,
39          * updateUser是update標簽的id屬性值,通過update標簽的id屬性值就可以找到要執行的SQL
40          */
41         String statement = "me.gacl.mapping.userMapper.updateUser";//映射sql的標識字符串
42         User user = new User();
43         user.setId(3);
44         user.setName("孤傲蒼狼");
45         user.setAge(25);
46         //執行修改操作
47         int retResult = sqlSession.update(statement,user);
48         //使用SqlSession執行完SQL之后需要關閉SqlSession
49         sqlSession.close();
50         System.out.println(retResult);
51     }
52     
53     @Test
54     public void testDelete(){
55         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
56         /**
57          * 映射sql的標識字符串,
58          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標簽的namespace屬性的值,
59          * deleteUser是delete標簽的id屬性值,通過delete標簽的id屬性值就可以找到要執行的SQL
60          */
61         String statement = "me.gacl.mapping.userMapper.deleteUser";//映射sql的標識字符串
62         //執行刪除操作
63         int retResult = sqlSession.delete(statement,5);
64         //使用SqlSession執行完SQL之后需要關閉SqlSession
65         sqlSession.close();
66         System.out.println(retResult);
67     }
68     
69     @Test
70     public void testGetAll(){
71         SqlSession sqlSession = MyBatisUtil.getSqlSession();
72         /**
73          * 映射sql的標識字符串,
74          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper標簽的namespace屬性的值,
75          * getAllUsers是select標簽的id屬性值,通過select標簽的id屬性值就可以找到要執行的SQL
76          */
77         String statement = "me.gacl.mapping.userMapper.getAllUsers";//映射sql的標識字符串
78         //執行查詢操作,將查詢結果自動封裝成List<User>返回
79         List<User> lstUsers = sqlSession.selectList(statement);
80         //使用SqlSession執行完SQL之后需要關閉SqlSession
81         sqlSession.close();
82         System.out.println(lstUsers);
83     }
84 }
復制代碼

二、使用MyBatis對表執行CRUD操作——基于注解的實現

  1、定義sql映射的接口

  UserMapperI接口的代碼如下:

復制代碼
 1 package me.gacl.mapping;2 3 import java.util.List;4 import me.gacl.domain.User;5 import org.apache.ibatis.annotations.Delete;6 import org.apache.ibatis.annotations.Insert;7 import org.apache.ibatis.annotations.Select;8 import org.apache.ibatis.annotations.Update;9 
10 /**
11  * @author gacl
12  * 定義sql映射的接口,使用注解指明方法要執行的SQL
13  */
14 public interface UserMapperI {
15 
16     //使用@Insert注解指明add方法要執行的SQL
17     @Insert("insert into users(name, age) values(#{name}, #{age})")
18     public int add(User user);
19     
20     //使用@Delete注解指明deleteById方法要執行的SQL
21     @Delete("delete from users where id=#{id}")
22     public int deleteById(int id);
23     
24     //使用@Update注解指明update方法要執行的SQL
25     @Update("update users set name=#{name},age=#{age} where id=#{id}")
26     public int update(User user);
27     
28     //使用@Select注解指明getById方法要執行的SQL
29     @Select("select * from users where id=#{id}")
30     public User getById(int id);
31     
32     //使用@Select注解指明getAll方法要執行的SQL
33     @Select("select * from users")
34     public List<User> getAll();
35 }
復制代碼

  需要說明的是,我們不需要針對UserMapperI接口去編寫具體的實現類代碼,這個具體的實現類由MyBatis幫我們動態構建出來,我們只需要直接拿來使用即可。

  2、在conf.xml文件中注冊這個映射接口

復制代碼
 1 <?xml version="1.0" encoding="UTF-8"?>2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">3 <configuration>4     <environments default="development">5         <environment id="development">6             <transactionManager type="JDBC" />7             <!-- 配置數據庫連接信息 -->8             <dataSource type="POOLED">9                 <property name="driver" value="com.mysql.jdbc.Driver" />
10                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
11                 <property name="username" value="root" />
12                 <property name="password" value="XDP" />
13             </dataSource>
14         </environment>
15     </environments>
16     
17     <mappers>
18         <!-- 注冊userMapper.xml文件, 
19         userMapper.xml位于me.gacl.mapping這個包下,所以resource寫成me/gacl/mapping/userMapper.xml-->
20         <mapper resource="me/gacl/mapping/userMapper.xml"/>
21         <!-- 注冊UserMapper映射接口-->
22         <mapper class="me.gacl.mapping.UserMapperI"/>
23     </mappers>
24     
25 </configuration>
復制代碼

  單元測試類的代碼如下:

復制代碼
 1 package me.gacl.test;2 3 import java.util.List;4 import me.gacl.domain.User;5 import me.gacl.mapping.UserMapperI;6 import me.gacl.util.MyBatisUtil;7 import org.apache.ibatis.session.SqlSession;8 import org.junit.Test;9 
10 public class TestCRUDByAnnotationMapper {
11 
12     @Test
13     public void testAdd(){
14         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
15         //得到UserMapperI接口的實現類對象,UserMapperI接口的實現類對象由sqlSession.getMapper(UserMapperI.class)動態構建出來
16         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
17         User user = new User();
18         user.setName("用戶xdp");
19         user.setAge(20);
20         int add = mapper.add(user);
21         //使用SqlSession執行完SQL之后需要關閉SqlSession
22         sqlSession.close();
23         System.out.println(add);
24     }
25     
26     @Test
27     public void testUpdate(){
28         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
29         //得到UserMapperI接口的實現類對象,UserMapperI接口的實現類對象由sqlSession.getMapper(UserMapperI.class)動態構建出來
30         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
31         User user = new User();
32         user.setId(3);
33         user.setName("孤傲蒼狼_xdp");
34         user.setAge(26);
35         //執行修改操作
36         int retResult = mapper.update(user);
37         //使用SqlSession執行完SQL之后需要關閉SqlSession
38         sqlSession.close();
39         System.out.println(retResult);
40     }
41     
42     @Test
43     public void testDelete(){
44         SqlSession sqlSession = MyBatisUtil.getSqlSession(true);
45         //得到UserMapperI接口的實現類對象,UserMapperI接口的實現類對象由sqlSession.getMapper(UserMapperI.class)動態構建出來
46         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
47         //執行刪除操作
48         int retResult = mapper.deleteById(7);
49         //使用SqlSession執行完SQL之后需要關閉SqlSession
50         sqlSession.close();
51         System.out.println(retResult);
52     }
53     
54     @Test
55     public void testGetUser(){
56         SqlSession sqlSession = MyBatisUtil.getSqlSession();
57         //得到UserMapperI接口的實現類對象,UserMapperI接口的實現類對象由sqlSession.getMapper(UserMapperI.class)動態構建出來
58         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
59         //執行查詢操作,將查詢結果自動封裝成User返回
60         User user = mapper.getById(8);
61         //使用SqlSession執行完SQL之后需要關閉SqlSession
62         sqlSession.close();
63         System.out.println(user);
64     }
65     
66     @Test
67     public void testGetAll(){
68         SqlSession sqlSession = MyBatisUtil.getSqlSession();
69         //得到UserMapperI接口的實現類對象,UserMapperI接口的實現類對象由sqlSession.getMapper(UserMapperI.class)動態構建出來
70         UserMapperI mapper = sqlSession.getMapper(UserMapperI.class);
71         //執行查詢操作,將查詢結果自動封裝成List<User>返回
72         List<User> lstUsers = mapper.getAll();
73         //使用SqlSession執行完SQL之后需要關閉SqlSession
74         sqlSession.close();
75         System.out.println(lstUsers);
76     }
77 }
復制代碼

  用到的MyBatisUtil工具類代碼如下:

復制代碼
 1 package me.gacl.util;2 3 import java.io.InputStream;4 5 import org.apache.ibatis.session.SqlSession;6 import org.apache.ibatis.session.SqlSessionFactory;7 import org.apache.ibatis.session.SqlSessionFactoryBuilder;8 9 public class MyBatisUtil {
10 
11     /**
12      * 獲取SqlSessionFactory
13      * @return SqlSessionFactory
14      */
15     public static SqlSessionFactory getSqlSessionFactory() {
16         String resource = "conf.xml";
17         InputStream is = MyBatisUtil.class.getClassLoader().getResourceAsStream(resource);
18         SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
19         return factory;
20     }
21     
22     /**
23      * 獲取SqlSession
24      * @return SqlSession
25      */
26     public static SqlSession getSqlSession() {
27         return getSqlSessionFactory().openSession();
28     }
29     
30     /**
31      * 獲取SqlSession
32      * @param isAutoCommit 
33      *         true 表示創建的SqlSession對象在執行完SQL之后會自動提交事務
34      *         false 表示創建的SqlSession對象在執行完SQL之后不會自動提交事務,這時就需要我們手動調用sqlSession.commit()提交事務
35      * @return SqlSession
36      */
37     public static SqlSession getSqlSession(boolean isAutoCommit) {
38         return getSqlSessionFactory().openSession(isAutoCommit);
39     }
40 }
復制代碼

  ?以上的相關代碼是全部測試通過的,關于使用MyBatis對表執行CRUD操作的內容就這么多。

轉載于:https://www.cnblogs.com/zxtceq/p/8316766.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/453643.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453643.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453643.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

cifs mount 掛載共享目錄_安裝cifsutils解決linux掛載windows共享文件夾

1、安裝mount.cifs軟件包yum install cifs-utils -y如果是離線環境&#xff0c;請參考我的另一篇文章https://blog.csdn.net/qq_37119960/article/details/1083313732、開始掛載mount.cifs //192.168.1.110/share /usr/local/winshare -o useradministrator,pass123456參數說明…

JFinal框架

FJinal過濾器(tomcat) 創建java類繼承JFinalConfig 會實現六個方法(有一個是攔截器的方法好像是,那個我好像看的跟struts2一樣但是又沒看懂暫時不寫) Controller層的測試方法 Entity實體類 常用方法 查詢 增加 刪除 修改 轉載于:https://www.cnblogs.com/guanzhuang/p/8317949.…

掌握 Linux 調試技術 使用 GDB 調試 Linux 軟件

簡介&#xff1a; 您可以用各種方法來監控運行著的用戶空間程序&#xff1a;可以為其運行調試器并單步調試該程序&#xff0c;添加打印語句&#xff0c;或者添加工具來分析程序。本文描述了幾種可以用來調試在 Linux 上運行的程序的方法。我們將回顧四種調試問題的情況&#xf…

集合之二:迭代器

迭代器的簡單使用 在遍歷容器時&#xff0c;我們可以使用for循環或者是增強for循環&#xff0c;但是不同的集合結構在遍歷時&#xff0c;我們要針對集合特點采取不同的方式&#xff0c;比如List是鏈表&#xff0c;我們可以直接當做數組處理&#xff0c;但Map是Key—Value的形式…

簡單使用ansible-playbook

1.使用以下命令給客戶端安裝httpd服務&#xff1a; [rootserver ~]# ansible testhost -m yum -a "namehttpd" 192.168.77.128 | SUCCESS > {"changed": true, "msg": "", "rc": 0, "results": ["Loaded …

原則

昨天例會上&#xff0c;領導分享了他最近看過的一本書《原則》。試想&#xff0c;工作上&#xff0c;生活中我的原則是什么呢&#xff1f;關于技術學習的原則。一開始的時候&#xff0c;一般都是遇到不會的再去學習&#xff0c;我一直比較喜歡帶著問題&#xff0c;這樣會學習效…

Python內置函數簡記

一、數學運算類 abs(x)求絕對值 1、參數可以是整型&#xff0c;也可以是復數 2、若參數是復數&#xff0c;則返回復數的模complex([real[, imag]])創建一個復數divmod(a, b)分別取商和余數 注意&#xff1a;整型、浮點型都可以float([x])將一個字符串或數轉換為浮點數。如果無參…

開源Java反編譯工具

Java 反編譯器 1. JD-GUI JD-GUI 是一個用 C 開發的 Java 反編譯工具&#xff0c;由 Pavel Kouznetsov開發&#xff0c;支持Windows、Linux和蘋果Mac Os三個平臺。 而且提供了Eclipse平臺下的插件JD-Eclipse。JD-GUI不需要安裝&#xff0c;直接點擊運行&#xff0c;可以反編譯j…

基于MPI的H.264并行編碼代碼移植與優化

2010 03 25基于MPI的H.264并行編碼代碼移植與優化范 文洛陽理工學院計算機信息工程系 洛陽 471023摘 要 H.264獲得出色壓縮效果和質量的代價是壓縮編碼算法復雜度的增加。為了尋求更高的編碼速度&#xff0c;集群并行計算被運用到H.264的視頻編碼計算中。分析H.264可實現并行計…

python自動取款機程序_python ATM取款機----運維開發初學(上篇)

自動取款機基本功能&#xff1a;可以存取轉賬&#xff0c;刷卡信息查詢&#xff0c;銀行卡號歷史信息查詢&#xff0c;消費記錄查詢&#xff0c;修改密碼。思維導圖如下&#xff1a;數據庫設計&#xff1a;mysql> desc balan_list; #保存賬號交易記錄option_type-----------…

java的運行參數

貼個java的運行參數&#xff1a; Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the "client" VM -server to select t…

阿里服務器+Centos7.4+Tomcat+JDK部署

適用對象 本文檔介紹如何使用一臺基本配置的云服務器 ECS 實例部署 Java web 項目。適用于剛開始使用阿里云進行建站的個人用戶。 配置要求 這里列出的軟件版本僅代表寫作本文檔使用的版本。操作時&#xff0c;請您以實際軟件版本為準。 操作系統&#xff1a;CentOS 7.4Tomcat …

php輸出mysqli查詢出來的結果

php連接mysql我有文章已經寫過了&#xff0c;這篇文章主要是介紹從mysql中查詢出結果之后怎么輸出的問題。 一&#xff1a;mysqli_fetch_row(); 查詢結果&#xff1a;array([0]>小王) 查詢&#xff1a; [php] view plaincopy while ($row mysqli_fetch_assoc($result)) …

rhel mysql安裝_RHEL6.4下MySQL安裝方法及簡單配置

1.MySQL安裝方法簡介 1.rpm包yum安裝 2.通用二進制包安裝 3.源碼編譯安裝 注意&#xff1a;實驗所采用的系統平臺為&#xff1a;RHEL6.4 2.rpm ins首頁 → 數據庫技術背景&#xff1a;閱讀新聞RHEL6.4下MySQL安裝方法及簡單配置[日期&#xff1a;2014-04-08]來源&#xff1a;Li…

H.264算法的DSP移植與優化

摘要&#xff1a;在TMS320DM643平臺上實現H&#xff0e;264基檔次編碼器的移植與優化顯得格外實用和必要。基于對DSP平臺的結構特性和H&#xff0e;264的計算復雜度分析&#xff0c;主要從核心算法、數據傳輸和存儲器&#xff0f;Cache使用幾方面對H&#xff0e;264編碼器進行了…

IDA*與A*

我實在懶得寫博客了&#xff0c;直接放上來之前講課做的的PPT得了。 PPT_Source Code.zip 轉載于:https://www.cnblogs.com/zzzc18/p/8323927.html

java 子類 父類 轉換_Java子類與父類之間的類型轉換

1.向上轉換父類的引用變量指向子類變量時&#xff0c;子類對象向父類對象向上轉換。從子類向父類的轉換不需要什么限制&#xff0c;只需直接蔣子類實例賦值給父類變量即可&#xff0c;這也是Java中多態的實現機制。2.向下轉換在父類變量調用子類特有的、不是從父類繼承來的方法…

H.264視頻編解碼的代碼移植和優化

基于DSP系統開發的視頻編解碼系統&#xff0c;國內幾乎都是走的移植&#xff0c;優化的路線&#xff0c;并且移植的代碼&#xff0c;都是開源的。畢竟花費大量的人力&#xff0c;物力去開發一套自己的代碼&#xff0c;并不見得比一些成熟的開源代碼效率更高&#xff0c;健壯性更…

SublimeText2 快捷鍵

SublimeText2 快捷鍵&#xff0c;與對應功能一覽表&#xff1a; 快捷鍵功能ctrlshiftn打開新Sublimectrlshiftw關閉Sublime&#xff0c;關閉所有打開文件ctrlshiftt重新打開最近關閉文件ctrln新建文件ctrls保存ctrlshifts另存為ctrlf4關閉文件ctrlw關閉ctrlk, ctrlb切換側邊欄顯…

java-linux-eclipse配置

轉載于:https://www.cnblogs.com/sheying/p/8327517.html