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
driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/test username=root password=123456
SqlMapper.xml是iBATIS的配置文件,其代碼以下:apache
<?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 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
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
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
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代碼以下:學習
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; } }
最後是表的建立:
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;