使用iBATIS3.0完成增刪改查

使用iBATIS3.0完成增刪改查

iBATIS3.0和之前的版本有一些改變,不過學過之前版本的再學習3.0應該不是太難,3.0要求JDK1.5支持,由於其中增長了註解和泛型,這些都是JDK1.5纔有的。好了廢話很少說,先來利用iBATIS3作下簡單的增刪改查吧。java

    首先到Apache(http://www.apache.org/)網站下載iBATIS3的jar 包,我下載的是ibatis-3-core-3.0.0.227.zip,解壓後吧那個jar文件(ibatis-3-core-3.0.0.227.jar)添加到工程就能夠了,還有一個文件(ibatis-3-core-src-3.0.0.227.zip)是源代碼,能夠用來查看源代碼的,使用eclipse能夠用它來關聯源代碼。mysql

    在MyEclipse新建一個Java Project,結構以下圖sql

    在jdbc.properties文件是映射文件要使用的,其內容以下:apache

Properties代碼 收藏代碼編程

  1. driver=com.mysql.jdbc.Driver 
  2. url=jdbc\:mysql\://localhost\:3306/test 
  3. username=root 
  4. password=123456

SqlMapper.xml是iBATIS的配置文件,其代碼以下:session

Xml代碼 收藏代碼架構

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration 
  3. PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN" 
  4. "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
  5. <configuration>
  6. <properties resource="jdbc.properties"/>
  7. <typeAliases>
  8. <typeAlias type="cn.ibatis3.test.Person" alias="Person"/>
  9. </typeAliases>
  10. <environments default="development">
  11. <environment id="development">
  12. <transactionManager type="JDBC"/>
  13. <dataSource type="POOLED">
  14. <property name="driver" value="${driver}"/>
  15. <property name="url" value="${url}"/>
  16. <property name="username" value="${username}"/>
  17. <property name="password" value="${password}"/>
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <mappers>
  22. <mapper resource="cn/ibatis3/test/person.xml"/>
  23. </mappers>
  24. </configuration>

上面文件中的sql映射文件person.xml代碼以下:app

Xml代碼 收藏代碼eclipse

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mapper 
  3. PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
  4. "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
  5. <!--  -->
  6. <mapper namespace="cn.ibatis3.test.PersonMapper">
  7. <select id="selectPerson" parameterType="java.lang.Integer"
  8. resultType="Person">
  9.         select * from person where id = #{id} 
  10. </select>
  11. <select id="selectAll" resultType="Person">
  12.         select * from person 
  13. </select>
  14. <select id="selectPersonsByName" resultType="Person" parameterType="String">
  15.         select * from person where name like #{name} 
  16. </select>
  17. <insert id="insertPerson" parameterType="Person">
  18.         insert into person(name,birthday,sex) 
  19.         values(#{name},#{birthday},#{sex}) 
  20. </insert>
  21. <delete id="deletePerson" parameterType="Person">
  22.         delete from person where id=#{id} 
  23. </delete>
  24. <update id="updatePerson" parameterType="Person">
  25.         update person set name=#{name},birthday=#{birthday},sex=#{sex} 
  26.         where id=#{id} 
  27. </update>
  28. </mapper>

     注意:在iBATIS3中,屬性parameterMap是不推薦使用的,在之後的版本可能會去掉這個屬性。ide

Person.java的代碼以下:

Java代碼 收藏代碼

  1. package cn.ibatis3.test; 
  2. import java.util.Date; 
  3. public class Person { 
  4. private int id = 0; 
  5. private String name = ""; 
  6. private String sex = "male"; 
  7. private Date birthday = null; 
  8. public Person() { 
  9.     } 
  10. //省略getter 和 setter 方法
  11. @Override
  12. public String toString() { 
  13. return "id=" + id + "\t" + "name=" + name + "\t" + "sex=" + sex + "\t"
  14.                 + "birthday=" + new java.sql.Date(birthday.getTime()).toString(); 
  15.     } 

    iBATIS官方推薦咱們使用單例模式建立一個sessionFactory,我這裏也提供一個sessionFactory.java,呵呵,僅供參考:

Java代碼 收藏代碼

  1. package cn.ibatis3.test; 
  2. import java.io.IOException; 
  3. import java.io.Reader; 
  4. import org.apache.ibatis.io.Resources; 
  5. import org.apache.ibatis.session.SqlSessionFactory; 
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder; 
  7. public final class SessionFactory { 
  8. private String resource="cn/ibatis3/test/SqlMapper.xml"; 
  9. private SqlSessionFactory sqlSessionFactory=null; 
  10. private static SessionFactory sessionFactory=new SessionFactory(); 
  11. private SessionFactory() { 
  12. try { 
  13.             Reader reader=Resources.getResourceAsReader(resource); 
  14.             sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader); 
  15.         } catch (IOException e) { 
  16.             System.out.println("#IOException happened in initialising the SessionFactory:"+e.getMessage()); 
  17. throw new ExceptionInInitializerError(e); 
  18.         } 
  19.     } 
  20. public static SessionFactory getInstance() { 
  21. return sessionFactory; 
  22.     } 
  23. public SqlSessionFactory getSqlSessionFactory() { 
  24. return sqlSessionFactory; 
  25.     } 

    基於接口的編程(還有就是iBATIS3的註解也是在接口方法上的,關於註解之後有機會再講,它也是iBATIS3的一個新特性),DAO層的接口PersonMapper.java代碼以下:

Java代碼 收藏代碼

  1. package cn.ibatis3.test; 
  2. import java.util.List; 
  3. public interface PersonMapper { 
  4.     Person selectById(Integer id); 
  5.     List<Person> selectAll(); 
  6.     List<Person> selectPersonsByName(String name); 
  7. void insert(Person person); 
  8. void delete(Person person); 
  9. void update(Person person); 

接口的實現類PersonDao.java代碼以下:

Java代碼 收藏代碼

  1. package cn.ibatis3.test; 
  2. import java.util.ArrayList; 
  3. import java.util.List; 
  4. import org.apache.ibatis.session.SqlSession; 
  5. import org.apache.ibatis.session.SqlSessionFactory; 
  6. public class PersonDao implements PersonMapper { 
  7. private SqlSessionFactory sessionFactory = SessionFactory.getInstance() 
  8.             .getSqlSessionFactory(); 
  9. public Person selectById(Integer id) { 
  10.         Person person = new Person(); 
  11.         SqlSession session = null; 
  12. try { 
  13.             session = sessionFactory.openSession(); 
  14.             person = (Person) session.selectOne( 
  15. "cn.ibatis3.test.PersonMapper.selectPerson", id); 
  16.         } finally { 
  17.             session.close(); 
  18.         } 
  19. return person; 
  20.     } 
  21. @SuppressWarnings("unchecked") 
  22. public List<Person> selectAll() { 
  23.         List<Person> persons = new ArrayList<Person>(); 
  24.         SqlSession session = null; 
  25. try { 
  26.             session = sessionFactory.openSession(); 
  27.             persons = session 
  28.                     .selectList("cn.ibatis3.test.PersonMapper.selectAll"); 
  29.         } finally { 
  30.             session.close(); 
  31.         } 
  32. return persons; 
  33.     } 
  34. public void delete(Person person) { 
  35.         SqlSession session = null; 
  36. try { 
  37.             session = sessionFactory.openSession(); 
  38.             session.delete("cn.ibatis3.test.PersonMapper.deletePerson", person); 
  39.             session.commit(); 
  40.         } finally { 
  41.             session.close(); 
  42.         } 
  43.     } 
  44. public void insert(Person person) { 
  45.         SqlSession session = null; 
  46. try { 
  47.             session = sessionFactory.openSession(); 
  48.             session.insert("cn.ibatis3.test.PersonMapper.insertPerson", person); 
  49.             session.commit(); 
  50.         } finally { 
  51.             session.close(); 
  52.         } 
  53.     } 
  54. public void update(Person person) { 
  55.         SqlSession session = null; 
  56. try { 
  57.             session = sessionFactory.openSession(); 
  58.             session.insert("cn.ibatis3.test.PersonMapper.updatePerson", person); 
  59.             session.commit(); 
  60.         } finally { 
  61.             session.close(); 
  62.         } 
  63.     } 
  64. @SuppressWarnings("unchecked") 
  65. public List<Person> selectPersonsByName(String name) { 
  66.         List<Person> persons = new ArrayList<Person>(); 
  67.         SqlSession session = null; 
  68. try { 
  69.             session = sessionFactory.openSession(); 
  70.             System.out.println(name); 
  71.             persons = session.selectList( 
  72. "cn.ibatis3.test.PersonMapper.selectPersonsByName", "%"
  73.                             + name + "%"); 
  74.             session.commit(); 
  75.         } finally { 
  76.             session.close(); 
  77.         } 
  78. return persons; 
  79.     } 

最後是表的建立:

Sql代碼 收藏代碼

  1. DROP TABLE IF EXISTS `test`.`person`; 
  2. CREATE TABLE  `test`.`person` ( 
  3.   `id` int(10) unsigned NOT NULL auto_increment, 
  4.   `name` varchar(20) default NULL, 
  5.   `sex` varchar(8) default NULL, 
  6.   `birthday` datetime default NULL, 
  7. PRIMARY KEY  (`id`) 
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

好了,作爲一次新技術的體驗吧,歡迎你們指出其中的錯誤或者是不恰當的地方。

17

6

分享到:

iBATIS3.0學習(二)使用iBATIS3.0註解完 ...

評論

14 樓 lyb520320 2012-02-01   引用

ibatis3沒有試驗過打印sql,ibatis2經過jdk動態代理使用log4j打印sql,估計ibatis3也差很少,看下這個鏈接,主要看log4j.properties配置,這個文件要放到src目錄下
http://winyee.iteye.com/blog/457216

13 樓 grandboy 2012-02-01   引用

這個我在網上搜索了好長時間,也試了網上說的一些辦法,就是沒法把產生的sql打印出來,不知道各位有沒有成功經驗?若是有人成功,請告訴詳細方法或者給兄弟一個連接。
要親自實驗成功的方法。多謝。

12 樓 lyb520320 2012-01-31   引用

qwj528 寫道

樓主<mapper namespace="cn.ibatis3.test.PersonMapper"> namespace這個屬性有什麼做用嗎? 可是必需要有namespace。 從你這個例子來看好像是個接口。

namespace僅僅是爲了區分不一樣的xml的一個名稱,至因而什麼看你本身的代碼習慣

11 樓 qwj528 2012-01-31   引用

樓主<mapper namespace="cn.ibatis3.test.PersonMapper"> namespace這個屬性有什麼做用嗎? 可是必需要有namespace。 從你這個例子來看好像是個接口。

10 樓 fengyie007 2010-06-21   引用

Java代碼 收藏代碼

  1. public List<Person> selectAll() {   
  2.         List<Person> persons = new ArrayList<Person>();   
  3.         SqlSession session = null;   
  4. try {   
  5.             session = sessionFactory.openSession();   
  6.             persons = session   
  7.                     .selectList("cn.ibatis3.test.PersonMapper.selectAll");   
  8.         } finally {   
  9.             session.close();   
  10.         }   
  11. return persons;   
  12.     }  
相關文章
相關標籤/搜索