日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MyBatis增删改示例——MyBatis学习笔记之二

發布時間:2025/3/18 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MyBatis增删改示例——MyBatis学习笔记之二 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? 上篇博文介紹了MyBatis的一個入門示例,今天介紹如何實現數據庫的增加、刪除和修改記錄的操作。為簡潔起見,與上個示例重復的注釋將被刪除(少數重要的除外)。若影響了您的理解,可參考上篇博文。

??????本示例的任務是增加、刪除和修改學生信息。筆者在自己機器上的E:\DemoPrograms目錄下建立目錄MyBatis02,來保存本示例的工程。工程的lib目錄和上個示例一樣,保存著MyBatis-3.0.6.jar和MySQL的JDBC驅動包mysql-connector-java-5.1.20-bin.jar;與此同時,也同樣是在src目錄下的resources目錄中保存MyBatis的配置文件:configuration.xml和StudentMapper.xml;另外,與以前一樣,JAVA源代碼文件的組織,也是按照其包的層次結構,以后不再贅述。configuration.xml在本例中不需要修改,因此不再介紹。

??????為了方便地獲取SqlSessionFactory實例,先寫一個工具類SqlSessionFactoryGen,用以生成SqlSessionFactory實例,代碼如下:?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 package?com.util; import?java.io.IOException; import?java.io.Reader; import?org.apache.ibatis.io.Resources; import?org.apache.ibatis.session.SqlSessionFactory; import?org.apache.ibatis.session.SqlSessionFactoryBuilder; import?org.apache.ibatis.session.SqlSession; public?class?SqlSessionFactoryGen { private?static?SqlSessionFactory factory; //靜態代碼塊。在類初始化時被執行,如第一次 //引用類的靜態變量,創建類的第一個實例 static { String resource =?"resources/configuration.xml"; Reader reader =?null; try{ reader = Resources.getResourceAsReader(resource); }catch(IOException e) { e.printStackTrace(); } factory? =?new?SqlSessionFactoryBuilder().build(reader); } public?static?SqlSessionFactory getSqlSessionFactory() { return?factory; } }

???????由于整個程序只需要一個SqlSessionFactory實例,因此通過調用SqlSessionFactoryGen的getSqlSessionFactory()方法獲取的是同一個SqlSessionFactory實例。

??????這次要執行的類是AddUpdDelDemo,其初始代碼如下:?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 package?com.demo; import?org.apache.ibatis.session.SqlSessionFactory; import?org.apache.ibatis.session.SqlSession; import?com.abc.mapper.StudentMapper; import?com.abc.domain.Student; import?com.util.SqlSessionFactoryGen; public?class?AddUpdDelDemo { //獲取SqlSessionFactory實例 private?static?SqlSessionFactory factory =SqlSessionFactoryGen.getSqlSessionFactory(); public?static?void?main(String[] args) { } }

???????下面分別介紹如何在上個示例的基礎上,實現學生信息的增加、刪除和修改操作。

一、增加

??????首先在接口StudentMapper中聲明執行增加操作的方法,代碼如下所示:

1 2 3 4 5 6 7 package?com.abc.mapper; import?com.abc.domain.Student; public?interface?StudentMapper { public?Student getById(int?id); //增加一名學生 public?void?add(Student student); }

???????接著在StudentMapper.xml中編寫相應的insert語句。代碼如下(24行):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?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"> <mapper?namespace="com.abc.mapper.StudentMapper"> <resultMap?id="studentResultMap"?type="Student"> <id?property="id"?column="id"/> <result?property="name"?column="name"/> <result?property="gender"?column="gender"/> <result?property="major"??column="major"/> <result?property="grade"???column="grade"/> </resultMap> <select?id="getById"?parameterType="int"?resultMap="studentResultMap"> SELECT * FROM student? WHERE id = #{id} </select> <!--執行增加操作的SQL語句。id和parameterType 分別與StudentMapper接口中的add方法的名字和 參數類型一致。以#{name}的形式引用Student參數 的name屬性,MyBatis將使用反射讀取Student參數 的此屬性。#{name}中name大小寫敏感。引用其他 的gender等屬性與此一致。seGeneratedKeys設置 為"true"表明要MyBatis獲取由數據庫自動生成的主 鍵;keyProperty="id"指定把獲取到的主鍵值注入 到Student的id屬性--> <insert?id="add"?parameterType="Student" useGeneratedKeys="true"?keyProperty="id"> insert into student(name,gender,major,grade) values(#{name},#{gender},#{major},#{grade}) </insert> </mapper>

??????(注:由于上述配置文件有中文注釋,為預防出現“Invalid?byte?1?of?1-byte?UTF-8?sequence.”的錯誤,讀者不要復制本文的配置文件。點擊文章下方的“附件下載”,可下載本示例的完整代碼。)

???????然后在AddUpdDelDemo類中編寫add方法,調用上述的insert語句,執行插入操作。代碼如下:?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 public?static?void?add() { SqlSession sqlSession = factory.openSession(); Student student =?new?Student(); student.setName("陳一斌"); student.setGender("男"); student.setMajor("計算機科學與技術"); student.setGrade("2011"); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); mapper.add(student); //提交事務,否則不會實際添加到數據庫中 sqlSession.commit(); System.out.println("數據庫生成的ID: " + student.getId()); sqlSession.close(); }

二、修改

??????照樣是首先在接口StudentMapper中聲明執行修改操作的方法,代碼如下所示:

1 2 3 4 5 6 7 8 package?com.abc.mapper; import?com.abc.domain.Student; public?interface?StudentMapper { public?Student getById(int?id); public?void?add(Student student); //修改學生信息 public?void?update(Student student); }

???????接著在StudentMapper.xml中編寫相應的update語句。代碼如下(23行):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <?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"> <mapper?namespace="com.abc.mapper.StudentMapper"> <resultMapid="studentResultMap"type="Student"> <id?property="id"?column="id"/> <result?property="name"?column="name"/> <result?property="gender"?column="gender"/> <result?property="major"?column="major"/> <result?property="grade"?column="grade"/> </resultMap> <select?id="getById"?parameterType="int" resultMap="studentResultMap"> SELECT * FROM student? WHERE id = #{id} </select> <insert?id="add"?parameterType="Student" useGeneratedKeys="true"?keyProperty="id"> insert into student(name,gender,major,grade) values(#{name},#{gender},#{major},#{grade}) </insert> <!--執行修改操作的SQL語句。id和parameterType 屬性以及“#{}”的形式的含義與上述insert語句一致。--> <update?id="update"?parameterType="Student"> update student set name=#{name}, gender=#{gender}, major=#{major}, grade=#{grade} where id=#{id} </update> </mapper>

???????然后在AddUpdDelDemo類中編寫update方法,調用上述的update語句,執行插入操作。代碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public?static?void?update() { SqlSession sqlSession = factory.openSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); //獲取id為1的學生 Student student = mapper.getById(1); System.out.println("修改前的專業:" + student.getMajor()); //修改其專業 student.setMajor("電子信息工程"); mapper.update(student); //提交事務,否則不會實際修改到數據庫中 sqlSession.commit(); student = mapper.getById(1); System.out.println("修改后的專業:" + student.getMajor()); sqlSession.close(); }

三、刪除

??????還是先在接口StudentMapper中聲明執行刪除操作的方法,代碼如下所示:?

1 2 3 4 5 6 7 8 9 package?com.abc.mapper; import?com.abc.domain.Student; public?interface?StudentMapper { public?Student getById(int?id); public?void?add(Student student); public?void?update(Student student); //刪除學生信息 public?void?delete(int?id); }

???????接著在StudentMapper.xml中編寫相應的delete語句。代碼如下(29行):?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <?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"> <mapper?namespace="com.abc.mapper.StudentMapper"> <resultMap?id="studentResultMap"?type="Student"> <id?property="id"?column="id"/> <result?property="name"?column="name"/> <result?property="gender"?column="gender"/> <result?property="major"??column="major"/> <result?property="grade"??column="grade"/> </resultMap> <select?id="getById"?parameterType="int" resultMap="studentResultMap"> SELECT * FROM student? WHERE id = #{id} </select> <insert?id="add"?parameterType="Student" useGeneratedKeys="true"?keyProperty="id"> insert into student(name,gender,major,grade) values(#{name},#{gender},#{major},#{grade}) </insert> <update?id="update"?parameterType="Student"> update student set name=#{name}, gender=#{gender}, major=#{major}, grade=#{grade} where id=#{id} </update> <!--#{id}引用參數id的值--> <delete?id="delete"?parameterType="int"> delete from student where id=#{id} </delete> </mapper>

???????然后在AddUpdDelDemo類中編寫delete方法,調用上述的delete語句,執行刪除操作。代碼如下:

1 2 3 4 5 6 7 8 9 10 public?static?void?delete() { SqlSession sqlSession = factory.openSession(); StudentMapper mapper = sqlSession.getMapper(StudentMapper.class); mapper.delete(1); //提交事務,否則不會實際刪除數據庫中的記錄 sqlSession.commit(); sqlSession.close(); }

???????現在來運行上述的方法。為此應先修改ant的生成文件build.xml,在“run”這個target的“java”task中,將其classname屬性值改為"com.demo.AddUpdDelDemo",表明運行此類;并為此task增加元素<arg?value="${para}"/>。這表明將讀取屬性para的值作為參數,傳遞給AddUpdDelDemo的main方法(稍后將演示如何指定屬性para的值)。并而main方法將根據傳遞來的值,決定執行哪個方法。main方法如下所示:?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 public?static?void?main(String[] args) { if(args[0].equals("add")) { add(); } else?if(args[0].equals("update")) { update(); } else?if(args[0].equals("delete")) { delete(); } else { System.out.println("參數錯誤!"); } }

???????在命令窗口下,進入到目錄E:\DemoPrograms\?MyBatis02下。若想要執行增加操作,則運行命令:ant?run?–Dpara=add。在-D選項后面定義屬性para并指定值,ant將把此值傳遞給AddUpdDelDemo的main方法。運行結果如下:?

???????運行命令:ant?run?–Dpara=update,執行修改操作。結果如下:?

???????運行命令:ant?run?–Dpara=delete,執行刪除操作。結果如下:?

???????進入數據庫查詢,數據已被刪除。










本文轉自 NashMaster2011 51CTO博客,原文鏈接:http://blog.51cto.com/legend2011/913063,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的MyBatis增删改示例——MyBatis学习笔记之二的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。