iBatis入門

iBatis簡介:

iBatis是apache的一個開源項目,一個O/RMapping解決方案,iBatis最大的特點就是小巧,上手很快。如果不需要太多複雜的功能,iBatis是能夠滿足你的要求又足夠靈活的最簡單的解決方案,現在的iBatis已經改名爲Mybatis了。

官網爲:http://www.mybatis.org/

搭建iBatis開發環境:

1、導入相關的jar包,ibatis-2.3.0.677.jar、mysql-connector-java-5.1.6-bin.jar

2、編寫配置文件:

Jdbc連接的屬性文件

總配置文件,SqlMapConfig.xml

關於每個實體的映射文件(Map文件)

Demo

Student.java:

Java代碼複製代碼收藏代碼
  1. packagecom.iflytek.entity;

  2. importjava.sql.Date;

  3. /**

  4. *@authorxudongwang2011-12-31

  5. *

  6. *Email:[email protected]

  7. *

  8. */

  9. publicclassStudent{

  10. //注意這裏需要保證有一個無參構造方法,因爲包括Hibernate在內的映射都是使用反射的,如果沒有無參構造可能會出現問題

  11. privateintid;

  12. privateStringname;

  13. privateDatebirth;

  14. privatefloatscore;

  15. publicintgetId(){

  16. returnid;

  17. }

  18. publicvoidsetId(intid){

  19. this.id=id;

  20. }

  21. publicStringgetName(){

  22. returnname;

  23. }

  24. publicvoidsetName(Stringname){

  25. this.name=name;

  26. }

  27. publicDategetBirth(){

  28. returnbirth;

  29. }

  30. publicvoidsetBirth(Datebirth){

  31. this.birth=birth;

  32. }

  33. publicfloatgetScore(){

  34. returnscore;

  35. }

  36. publicvoidsetScore(floatscore){

  37. this.score=score;

  38. }

  39. @Override

  40. publicStringtoString(){

  41. return"id="+id+"\tname="+name+"\tmajor="+birth+"\tscore="

  42. +score+"\n";

  43. }

  44. }

SqlMap.properties:

Properties代碼複製代碼收藏代碼
  1. driver=com.mysql.jdbc.Driver

  2. url=jdbc:mysql://localhost:3306/ibatis

  3. username=root

  4. password=123

Student.xml:

Xml代碼複製代碼收藏代碼
  1. <?xmlversion="1.0"encoding="UTF-8"?>

  2. <!DOCTYPEsqlMapPUBLIC"-//ibatis.apache.org//DTDSQLMap2.0//EN"

  3. "http://ibatis.apache.org/dtd/sql-map-2.dtd">

  4. <sqlMap>

  5. <!--通過typeAlias使得我們在下面使用Student實體類的時候不需要寫包名-->

  6. <typeAliasalias="Student"type="com.iflytek.entity.Student"/>

  7. <!--這樣以後改了sql,就不需要去改java代碼了-->

  8. <!--id表示select裏的sql語句,resultClass表示返回結果的類型-->

  9. <selectid="selectAllStudent"resultClass="Student">

  10. select*from

  11. tbl_student

  12. </select>

  13. <!--parameterClass表示參數的內容-->

  14. <!--#表示這是一個外部調用的需要傳進的參數,可以理解爲佔位符-->

  15. <selectid="selectStudentById"parameterClass="int"resultClass="Student">

  16. select*fromtbl_studentwhereid=#id#

  17. </select>

  18. <!--注意這裏的resultClass類型,使用Student類型取決於queryForList還是queryForObject-->

  19. <selectid="selectStudentByName"parameterClass="String"

  20. resultClass="Student">

  21. selectname,birth,scorefromtbl_studentwherenamelike

  22. '%$name$%'

  23. </select>

  24. <insertid="addStudent"parameterClass="Student">

  25. insertinto

  26. tbl_student(name,birth,score)values

  27. (#name#,#birth#,#score#);

  28. <selectKeyresultClass="int"keyProperty="id">

  29. select@@identityasinserted

  30. <!--這裏需要說明一下不同的數據庫主鍵的生成,對各自的數據庫有不同的方式:-->

  31. <!--mysql:SELECTLAST_INSERT_ID()ASVALUE-->

  32. <!--mssql:select@@IDENTITYasvalue-->

  33. <!--oracle:SELECTSTOCKIDSEQUENCE.NEXTVALASVALUEFROMDUAL-->

  34. <!--還有一點需要注意的是不同的數據庫生產商生成主鍵的方式不一樣,有些是預先生成(pre-generate)主鍵的,如Oracle和PostgreSQL。

  35. 有些是事後生成(post-generate)主鍵的,如MySQL和SQLServer所以如果是Oracle數據庫,則需要將selectKey寫在insert之前-->

  36. </selectKey>

  37. </insert>

  38. <deleteid="deleteStudentById"parameterClass="int">

  39. <!--#id#裏的id可以隨意取,但是上面的insert則會有影響,因爲上面的name會從Student裏的屬性裏去查找-->

  40. <!--我們也可以這樣理解,如果有#佔位符,則ibatis會調用parameterClass裏的屬性去賦值-->

  41. deletefromtbl_studentwhereid=#id#

  42. </delete>

  43. <updateid="updateStudent"parameterClass="Student">

  44. updatetbl_studentset

  45. name=#name#,birth=#birth#,score=#score#whereid=#id#

  46. </update>

  47. </sqlMap>

說明:

如果xml中沒有ibatis的提示,則window-->Preference-->XML-->XMLCatalog--->點擊add

選擇uriURI:請選擇本地文件系統上

iBatisDemo1/WebContent/WEB-INF/lib/sql-map-config-2.dtd文件;

KeyType:選擇SchemaLocation;

Key:需要聯網的,不建議使用;

SqlMapConfig.xml:

Xml代碼複製代碼收藏代碼
  1. <?xmlversion="1.0"encoding="UTF-8"?>

  2. <!DOCTYPEsqlMapConfigPUBLIC"-//ibatis.apache.org//DTDSQLMapConfig2.0//EN"

  3. "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

  4. <sqlMapConfig>

  5. <!--引用JDBC屬性的配置文件-->

  6. <propertiesresource="com/iflytek/entity/SqlMap.properties"/>

  7. <!--使用JDBC的事務管理-->

  8. <transactionManagertype="JDBC">

  9. <!--數據源-->

  10. <dataSourcetype="SIMPLE">

  11. <propertyname="JDBC.Driver"value="${driver}"/>

  12. <propertyname="JDBC.ConnectionURL"value="${url}"/>

  13. <propertyname="JDBC.Username"value="${username}"/>

  14. <propertyname="JDBC.Password"value="${password}"/>

  15. </dataSource>

  16. </transactionManager>

  17. <!--這裏可以寫多個實體的映射文件-->

  18. <sqlMapresource="com/iflytek/entity/Student.xml"/>

  19. </sqlMapConfig>

StudentDao:

Java代碼複製代碼收藏代碼
  1. packagecom.iflytek.dao;

  2. importjava.util.List;

  3. importcom.iflytek.entity.Student;

  4. /**

  5. *@authorxudongwang2011-12-31

  6. *

  7. *Email:[email protected]

  8. *

  9. */

  10. publicinterfaceStudentDao{

  11. /**

  12. *添加學生信息

  13. *

  14. *@paramstudent

  15. *學生實體

  16. *@return返回是否添加成功

  17. */

  18. publicbooleanaddStudent(Studentstudent);

  19. /**

  20. *根據學生id刪除學生信息

  21. *

  22. *@paramid

  23. *學生id

  24. *@return刪除是否成功

  25. */

  26. publicbooleandeleteStudentById(intid);

  27. /**

  28. *更新學生信息

  29. *

  30. *@paramstudent

  31. *學生實體

  32. *@return更新是否成功

  33. */

  34. publicbooleanupdateStudent(Studentstudent);

  35. /**

  36. *查詢全部學生信息

  37. *

  38. *@return返回學生列表

  39. */

  40. publicList<Student>selectAllStudent();

  41. /**

  42. *根據學生姓名模糊查詢學生信息

  43. *

  44. *@paramname

  45. *學生姓名

  46. *@return學生信息列表

  47. */

  48. publicList<Student>selectStudentByName(Stringname);

  49. /**

  50. *根據學生id查詢學生信息

  51. *

  52. *@paramid

  53. *學生id

  54. *@return學生對象

  55. */

  56. publicStudentselectStudentById(intid);

  57. }

StudentDaoImpl:

Java代碼複製代碼收藏代碼
  1. packagecom.iflytek.daoimpl;

  2. importjava.io.IOException;

  3. importjava.io.Reader;

  4. importjava.sql.SQLException;

  5. importjava.util.List;

  6. importcom.ibatis.common.resources.Resources;

  7. importcom.ibatis.sqlmap.client.SqlMapClient;

  8. importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

  9. importcom.iflytek.dao.StudentDao;

  10. importcom.iflytek.entity.Student;

  11. /**

  12. *@authorxudongwang2011-12-31

  13. *

  14. *Email:[email protected]

  15. *

  16. */

  17. publicclassStudentDaoImplimplementsStudentDao{

  18. privatestaticSqlMapClientsqlMapClient=null;

  19. //讀取配置文件

  20. static{

  21. try{

  22. Readerreader=Resources

  23. .getResourceAsReader("com/iflytek/entity/SqlMapConfig.xml");

  24. sqlMapClient=SqlMapClientBuilder.buildSqlMapClient(reader);

  25. reader.close();

  26. }catch(IOExceptione){

  27. e.printStackTrace();

  28. }

  29. }

  30. publicbooleanaddStudent(Studentstudent){

  31. Objectobject=null;

  32. booleanflag=false;

  33. try{

  34. object=sqlMapClient.insert("addStudent",student);

  35. System.out.println("添加學生信息的返回值:"+object);

  36. }catch(SQLExceptione){

  37. e.printStackTrace();

  38. }

  39. if(object!=null){

  40. flag=true;

  41. }

  42. returnflag;

  43. }

  44. publicbooleandeleteStudentById(intid){

  45. booleanflag=false;

  46. Objectobject=null;

  47. try{

  48. object=sqlMapClient.delete("deleteStudentById",id);

  49. System.out.println("刪除學生信息的返回值:"+object+",這裏返回的是影響的行數");

  50. }catch(SQLExceptione){

  51. e.printStackTrace();

  52. }

  53. if(object!=null){

  54. flag=true;

  55. }

  56. returnflag;

  57. }

  58. publicbooleanupdateStudent(Studentstudent){

  59. booleanflag=false;

  60. Objectobject=false;

  61. try{

  62. object=sqlMapClient.update("updateStudent",student);

  63. System.out.println("更新學生信息的返回值:"+object+",返回影響的行數");

  64. }catch(SQLExceptione){

  65. e.printStackTrace();

  66. }

  67. if(object!=null){

  68. flag=true;

  69. }

  70. returnflag;

  71. }

  72. publicList<Student>selectAllStudent(){

  73. List<Student>students=null;

  74. try{

  75. students=sqlMapClient.queryForList("selectAllStudent");

  76. }catch(SQLExceptione){

  77. e.printStackTrace();

  78. }

  79. returnstudents;

  80. }

  81. publicList<Student>selectStudentByName(Stringname){

  82. List<Student>students=null;

  83. try{

  84. students=sqlMapClient.queryForList("selectStudentByName",name);

  85. }catch(SQLExceptione){

  86. e.printStackTrace();

  87. }

  88. returnstudents;

  89. }

  90. publicStudentselectStudentById(intid){

  91. Studentstudent=null;

  92. try{

  93. student=(Student)sqlMapClient.queryForObject(

  94. "selectStudentById",id);

  95. }catch(SQLExceptione){

  96. e.printStackTrace();

  97. }

  98. returnstudent;

  99. }

  100. }

TestIbatis.java:

Java代碼複製代碼收藏代碼
  1. packagecom.iflytek.test;

  2. importjava.sql.Date;

  3. importjava.util.List;

  4. importcom.iflytek.daoimpl.StudentDaoImpl;

  5. importcom.iflytek.entity.Student;

  6. /**

  7. *@authorxudongwang2011-12-31

  8. *

  9. *Email:[email protected]

  10. *

  11. */

  12. publicclassTestIbatis{

  13. publicstaticvoidmain(String[]args){

  14. StudentDaoImplstudentDaoImpl=newStudentDaoImpl();

  15. System.out.println("測試插入");

  16. StudentaddStudent=newStudent();

  17. addStudent.setName("李四");

  18. addStudent.setBirth(Date.valueOf("2011-09-02"));

  19. addStudent.setScore(88);

  20. System.out.println(studentDaoImpl.addStudent(addStudent));

  21. System.out.println("測試根據id查詢");

  22. System.out.println(studentDaoImpl.selectStudentById(1));

  23. System.out.println("測試模糊查詢");

  24. List<Student>mohuLists=studentDaoImpl.selectStudentByName("李");

  25. for(Studentstudent:mohuLists){

  26. System.out.println(student);

  27. }

  28. System.out.println("測試查詢所有");

  29. List<Student>students=studentDaoImpl.selectAllStudent();

  30. for(Studentstudent:students){

  31. System.out.println(student);

  32. }

  33. System.out.println("根據id刪除學生信息");

  34. System.out.println(studentDaoImpl.deleteStudentById(1));

  35. System.out.println("測試更新學生信息");

  36. StudentupdateStudent=newStudent();

  37. updateStudent.setId(1);

  38. updateStudent.setName("李四1");

  39. updateStudent.setBirth(Date.valueOf("2011-08-07"));

  40. updateStudent.setScore(21);

  41. System.out.println(studentDaoImpl.updateStudent(updateStudent));

  42. }

  43. }

iBatis的優缺點:

優點:

1、減少代碼量,簡單;

2、性能增強;

3、Sql語句與程序代碼分離;

4、增強了移植性;

缺點:

1、和Hibernate相比,sql需要自己寫;

2、參數數量只能有一個,多個參數時不太方便;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章