使用iBATIS3.0完成增刪改查

 

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

    首先到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能夠用它來關聯源代碼。java

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

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

 

Properties代碼 複製代碼  收藏代碼
  1. driver=com.mysql.jdbc.Driver   
  2. url=jdbc\:mysql\://localhost\:3306/test   
  3. username=root   
  4. password=123456  
driver=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/test
username=root
password=123456

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

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>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>
	<properties resource="jdbc.properties"/>
	<typeAliases>
		<typeAlias type="cn.ibatis3.test.Person" alias="Person"/>
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${username}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="cn/ibatis3/test/person.xml"/>
	</mappers>
</configuration>

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

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

<mapper namespace="cn.ibatis3.test.PersonMapper">

	<select id="selectPerson" parameterType="java.lang.Integer"
		resultType="Person">
		select * from person where id = #{id}
	</select>
	<select id="selectAll" resultType="Person">
		select * from person
	</select>
	<select id="selectPersonsByName" resultType="Person" parameterType="String">
		select * from person where name like #{name}
	</select>
	<insert id="insertPerson" parameterType="Person">
		insert into person(name,birthday,sex)
		values(#{name},#{birthday},#{sex})
	</insert>
	<delete id="deletePerson" parameterType="Person">
		delete from person where id=#{id}
	</delete>
	<update id="updatePerson" parameterType="Person">
		update person set name=#{name},birthday=#{birthday},sex=#{sex}
		where id=#{id}
	</update>
</mapper>

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

     Person.java的代碼以下:app

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

import java.util.Date;

public class Person {
	private int id = 0;
	private String name = "";
	private String sex = "male";
	private Date birthday = null;

	public Person() {

	}

	//省略getter 和 setter 方法
	
	@Override
	public String toString() {
		return "id=" + id + "\t" + "name=" + name + "\t" + "sex=" + sex + "\t"
				+ "birthday=" + new java.sql.Date(birthday.getTime()).toString();
	}

}

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

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

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;

public final class SessionFactory {
	private String resource="cn/ibatis3/test/SqlMapper.xml";
	private SqlSessionFactory sqlSessionFactory=null;
	private static SessionFactory sessionFactory=new SessionFactory();
	
	private SessionFactory() {
		try {
			Reader reader=Resources.getResourceAsReader(resource);
			sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			System.out.println("#IOException happened in initialising the SessionFactory:"+e.getMessage());
			throw new ExceptionInInitializerError(e);
		}
	}
	public static SessionFactory getInstance() {
		return sessionFactory;
	}
	public SqlSessionFactory getSqlSessionFactory() {
		return sqlSessionFactory;
	}

}

 

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

Java代碼 複製代碼  收藏代碼
  1. package cn.ibatis3.test;   
  2.   
  3. import java.util.List;   
  4.   
  5. public interface PersonMapper {   
  6.     Person selectById(Integer id);   
  7.     List<Person> selectAll();   
  8.     List<Person> selectPersonsByName(String name);   
  9.     void insert(Person person);   
  10.     void delete(Person person);   
  11.     void update(Person person);   
  12.        
  13. }  
package cn.ibatis3.test;

import java.util.List;

public interface PersonMapper {
	Person selectById(Integer id);
	List<Person> selectAll();
	List<Person> selectPersonsByName(String name);
	void insert(Person person);
	void delete(Person person);
	void update(Person person);
	
}

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

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

import java.util.ArrayList;
import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

public class PersonDao implements PersonMapper {
	private SqlSessionFactory sessionFactory = SessionFactory.getInstance()
			.getSqlSessionFactory();

	public Person selectById(Integer id) {
		Person person = new Person();
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			person = (Person) session.selectOne(
					"cn.ibatis3.test.PersonMapper.selectPerson", id);
		} finally {
			session.close();
		}
		return person;
	}

	@SuppressWarnings("unchecked")
	public List<Person> selectAll() {
		List<Person> persons = new ArrayList<Person>();
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			persons = session
					.selectList("cn.ibatis3.test.PersonMapper.selectAll");
		} finally {
			session.close();
		}

		return persons;
	}

	public void delete(Person person) {
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			session.delete("cn.ibatis3.test.PersonMapper.deletePerson", person);
			session.commit();
		} finally {
			session.close();
		}

	}

	public void insert(Person person) {
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			session.insert("cn.ibatis3.test.PersonMapper.insertPerson", person);
			session.commit();
		} finally {
			session.close();
		}

	}

	public void update(Person person) {
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			session.insert("cn.ibatis3.test.PersonMapper.updatePerson", person);
			session.commit();
		} finally {
			session.close();
		}

	}

	@SuppressWarnings("unchecked")
	public List<Person> selectPersonsByName(String name) {
		List<Person> persons = new ArrayList<Person>();
		SqlSession session = null;
		try {
			session = sessionFactory.openSession();
			System.out.println(name);
			persons = session.selectList(
					"cn.ibatis3.test.PersonMapper.selectPersonsByName", "%"
							+ name + "%");
			session.commit();
		} finally {
			session.close();
		}

		return persons;
	}

}

 最後是表的建立:

Sql代碼 複製代碼  收藏代碼
  1. DROP TABLE IF EXISTS `test`.`person`;   
  2. CREATE TABLE  `test`.`person` (   
  3.   `id` int(10) unsigned NOT NULL auto_increment,   
  4.   `namevarchar(20) default NULL,   
  5.   `sex` varchar(8) default NULL,   
  6.   `birthday` datetime default NULL,   
  7.   PRIMARY KEY  (`id`)   
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
DROP TABLE IF EXISTS `test`.`person`;
CREATE TABLE  `test`.`person` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` varchar(20) default NULL,
  `sex` varchar(8) default NULL,
  `birthday` datetime default NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
相關文章
相關標籤/搜索