使用iBATIS3.0完成增删改查、 使用iBATIS3.0注解完成对数据库的简单操作

使用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可以用它来关联源代码。

在MyEclipse新建一个Java Project,结构如下图

jdbc.properties文件是映射文件要使用的,其内容如下:

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的配置文件,其代码如下:

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEconfiguration
  3. PUBLIC"-//ibatis.apache.org//DTDConfig3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
  5. <configuration>
  6. <propertiesresource="jdbc.properties"/>
  7. <typeAliases>
  8. <typeAliastype="cn.ibatis3.test.Person"alias="Person"/>
  9. </typeAliases>
  10. <environmentsdefault="development">
  11. <environmentid="development">
  12. <transactionManagertype="JDBC"/>
  13. <dataSourcetype="POOLED">
  14. <propertyname="driver"value="${driver}"/>
  15. <propertyname="url"value="${url}"/>
  16. <propertyname="username"value="${username}"/>
  17. <propertyname="password"value="${password}"/>
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <mappers>
  22. <mapperresource="cn/ibatis3/test/person.xml"/>
  23. </mappers>
  24. </configuration>
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEconfiguration
  3. PUBLIC"-//ibatis.apache.org//DTDConfig3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
  5. <configuration>
  6. <propertiesresource="jdbc.properties"/>
  7. <typeAliases>
  8. <typeAliastype="cn.ibatis3.test.Person"alias="Person"/>
  9. </typeAliases>
  10. <environmentsdefault="development">
  11. <environmentid="development">
  12. <transactionManagertype="JDBC"/>
  13. <dataSourcetype="POOLED">
  14. <propertyname="driver"value="${driver}"/>
  15. <propertyname="url"value="${url}"/>
  16. <propertyname="username"value="${username}"/>
  17. <propertyname="password"value="${password}"/>
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <mappers>
  22. <mapperresource="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. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEmapper
  3. PUBLIC"-//ibatis.apache.org//DTDMapper3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
  5. <!---->
  6. <mappernamespace="cn.ibatis3.test.PersonMapper">
  7. <selectid="selectPerson"parameterType="java.lang.Integer"
  8. resultType="Person">
  9. select*frompersonwhereid=#{id}
  10. </select>
  11. <selectid="selectAll"resultType="Person">
  12. select*fromperson
  13. </select>
  14. <selectid="selectPersonsByName"resultType="Person"parameterType="String">
  15. select*frompersonwherenamelike#{name}
  16. </select>
  17. <insertid="insertPerson"parameterType="Person">
  18. insertintoperson(name,birthday,sex)
  19. values(#{name},#{birthday},#{sex})
  20. </insert>
  21. <deleteid="deletePerson"parameterType="Person">
  22. deletefrompersonwhereid=#{id}
  23. </delete>
  24. <updateid="updatePerson"parameterType="Person">
  25. updatepersonsetname=#{name},birthday=#{birthday},sex=#{sex}
  26. whereid=#{id}
  27. </update>
  28. </mapper>
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEmapper
  3. PUBLIC"-//ibatis.apache.org//DTDMapper3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
  5. <!---->
  6. <mappernamespace="cn.ibatis3.test.PersonMapper">
  7. <selectid="selectPerson"parameterType="java.lang.Integer"
  8. resultType="Person">
  9. select*frompersonwhereid=#{id}
  10. </select>
  11. <selectid="selectAll"resultType="Person">
  12. select*fromperson
  13. </select>
  14. <selectid="selectPersonsByName"resultType="Person"parameterType="String">
  15. select*frompersonwherenamelike#{name}
  16. </select>
  17. <insertid="insertPerson"parameterType="Person">
  18. insertintoperson(name,birthday,sex)
  19. values(#{name},#{birthday},#{sex})
  20. </insert>
  21. <deleteid="deletePerson"parameterType="Person">
  22. deletefrompersonwhereid=#{id}
  23. </delete>
  24. <updateid="updatePerson"parameterType="Person">
  25. updatepersonsetname=#{name},birthday=#{birthday},sex=#{sex}
  26. whereid=#{id}
  27. </update>
  28. </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是不推荐使用的,在以后的版本可能会去掉这个属性。

Person.java的代码如下:

Java代码 收藏代码
  1. packagecn.ibatis3.test;
  2. importjava.util.Date;
  3. publicclassPerson{
  4. privateintid=0;
  5. privateStringname="";
  6. privateStringsex="male";
  7. privateDatebirthday=null;
  8. publicPerson(){
  9. }
  10. //省略getter和setter方法
  11. @Override
  12. publicStringtoString(){
  13. return"id="+id+"\t"+"name="+name+"\t"+"sex="+sex+"\t"
  14. +"birthday="+newjava.sql.Date(birthday.getTime()).toString();
  15. }
  16. }
  1. packagecn.ibatis3.test;
  2. importjava.util.Date;
  3. publicclassPerson{
  4. privateintid=0;
  5. privateStringname="";
  6. privateStringsex="male";
  7. privateDatebirthday=null;
  8. publicPerson(){
  9. }
  10. //省略getter和setter方法
  11. @Override
  12. publicStringtoString(){
  13. return"id="+id+"\t"+"name="+name+"\t"+"sex="+sex+"\t"
  14. +"birthday="+newjava.sql.Date(birthday.getTime()).toString();
  15. }
  16. }
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,呵呵,仅供参考:

Java代码 收藏代码
  1. packagecn.ibatis3.test;
  2. importjava.io.IOException;
  3. importjava.io.Reader;
  4. importorg.apache.ibatis.io.Resources;
  5. importorg.apache.ibatis.session.SqlSessionFactory;
  6. importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. publicfinalclassSessionFactory{
  8. privateStringresource="cn/ibatis3/test/SqlMapper.xml";
  9. privateSqlSessionFactorysqlSessionFactory=null;
  10. privatestaticSessionFactorysessionFactory=newSessionFactory();
  11. privateSessionFactory(){
  12. try{
  13. Readerreader=Resources.getResourceAsReader(resource);
  14. sqlSessionFactory=newSqlSessionFactoryBuilder().build(reader);
  15. }catch(IOExceptione){
  16. System.out.println("#IOExceptionhappenedininitialisingtheSessionFactory:"+e.getMessage());
  17. thrownewExceptionInInitializerError(e);
  18. }
  19. }
  20. publicstaticSessionFactorygetInstance(){
  21. returnsessionFactory;
  22. }
  23. publicSqlSessionFactorygetSqlSessionFactory(){
  24. returnsqlSessionFactory;
  25. }
  26. }
  1. packagecn.ibatis3.test;
  2. importjava.io.IOException;
  3. importjava.io.Reader;
  4. importorg.apache.ibatis.io.Resources;
  5. importorg.apache.ibatis.session.SqlSessionFactory;
  6. importorg.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. publicfinalclassSessionFactory{
  8. privateStringresource="cn/ibatis3/test/SqlMapper.xml";
  9. privateSqlSessionFactorysqlSessionFactory=null;
  10. privatestaticSessionFactorysessionFactory=newSessionFactory();
  11. privateSessionFactory(){
  12. try{
  13. Readerreader=Resources.getResourceAsReader(resource);
  14. sqlSessionFactory=newSqlSessionFactoryBuilder().build(reader);
  15. }catch(IOExceptione){
  16. System.out.println("#IOExceptionhappenedininitialisingtheSessionFactory:"+e.getMessage());
  17. thrownewExceptionInInitializerError(e);
  18. }
  19. }
  20. publicstaticSessionFactorygetInstance(){
  21. returnsessionFactory;
  22. }
  23. publicSqlSessionFactorygetSqlSessionFactory(){
  24. returnsqlSessionFactory;
  25. }
  26. }
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代码如下:

Java代码 收藏代码
  1. packagecn.ibatis3.test;
  2. importjava.util.List;
  3. publicinterfacePersonMapper{
  4. PersonselectById(Integerid);
  5. List<Person>selectAll();
  6. List<Person>selectPersonsByName(Stringname);
  7. voidinsert(Personperson);
  8. voiddelete(Personperson);
  9. voidupdate(Personperson);
  10. }
  1. packagecn.ibatis3.test;
  2. importjava.util.List;
  3. publicinterfacePersonMapper{
  4. PersonselectById(Integerid);
  5. List<Person>selectAll();
  6. List<Person>selectPersonsByName(Stringname);
  7. voidinsert(Personperson);
  8. voiddelete(Personperson);
  9. voidupdate(Personperson);
  10. }
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. packagecn.ibatis3.test;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importorg.apache.ibatis.session.SqlSession;
  5. importorg.apache.ibatis.session.SqlSessionFactory;
  6. publicclassPersonDaoimplementsPersonMapper{
  7. privateSqlSessionFactorysessionFactory=SessionFactory.getInstance()
  8. .getSqlSessionFactory();
  9. publicPersonselectById(Integerid){
  10. Personperson=newPerson();
  11. SqlSessionsession=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. returnperson;
  20. }
  21. @SuppressWarnings("unchecked")
  22. publicList<Person>selectAll(){
  23. List<Person>persons=newArrayList<Person>();
  24. SqlSessionsession=null;
  25. try{
  26. session=sessionFactory.openSession();
  27. persons=session
  28. .selectList("cn.ibatis3.test.PersonMapper.selectAll");
  29. }finally{
  30. session.close();
  31. }
  32. returnpersons;
  33. }
  34. publicvoiddelete(Personperson){
  35. SqlSessionsession=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. publicvoidinsert(Personperson){
  45. SqlSessionsession=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. publicvoidupdate(Personperson){
  55. SqlSessionsession=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. publicList<Person>selectPersonsByName(Stringname){
  66. List<Person>persons=newArrayList<Person>();
  67. SqlSessionsession=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. returnpersons;
  79. }
  80. }
  1. packagecn.ibatis3.test;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importorg.apache.ibatis.session.SqlSession;
  5. importorg.apache.ibatis.session.SqlSessionFactory;
  6. publicclassPersonDaoimplementsPersonMapper{
  7. privateSqlSessionFactorysessionFactory=SessionFactory.getInstance()
  8. .getSqlSessionFactory();
  9. publicPersonselectById(Integerid){
  10. Personperson=newPerson();
  11. SqlSessionsession=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. returnperson;
  20. }
  21. @SuppressWarnings("unchecked")
  22. publicList<Person>selectAll(){
  23. List<Person>persons=newArrayList<Person>();
  24. SqlSessionsession=null;
  25. try{
  26. session=sessionFactory.openSession();
  27. persons=session
  28. .selectList("cn.ibatis3.test.PersonMapper.selectAll");
  29. }finally{
  30. session.close();
  31. }
  32. returnpersons;
  33. }
  34. publicvoiddelete(Personperson){
  35. SqlSessionsession=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. publicvoidinsert(Personperson){
  45. SqlSessionsession=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. publicvoidupdate(Personperson){
  55. SqlSessionsession=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. publicList<Person>selectPersonsByName(Stringname){
  66. List<Person>persons=newArrayList<Person>();
  67. SqlSessionsession=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. returnpersons;
  79. }
  80. }
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. DROPTABLEIFEXISTS`test`.`person`;
  2. CREATETABLE`test`.`person`(
  3. `id`int(10)unsignedNOTNULLauto_increment,
  4. `name`varchar(20)defaultNULL,
  5. `sex`varchar(8)defaultNULL,
  6. `birthday`datetimedefaultNULL,
  7. PRIMARYKEY(`id`)
  8. )ENGINE=InnoDBDEFAULTCHARSET=utf8;
  1. DROPTABLEIFEXISTS`test`.`person`;
  2. CREATETABLE`test`.`person`(
  3. `id`int(10)unsignedNOTNULLauto_increment,
  4. `name`varchar(20)defaultNULL,
  5. `sex`varchar(8)defaultNULL,
  6. `birthday`datetimedefaultNULL,
  7. PRIMARYKEY(`id`)
  8. )ENGINE=InnoDBDEFAULTCHARSET=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;

使用iBATIS3.0注解完成对数据库的简单操作

iBATIS3.0也增加了一些简单的注解,iBATIS3的注解只能完成一些简单操作,要进行更复杂的操作,最好是在XML文件中配置。

在数据库(本人使用的mysql)中建立一个person表:

Sql代码 收藏代码
  1. DROPTABLEIFEXISTS`test`.`person`;
  2. CREATETABLE`test`.`person`(
  3. `id`int(10)unsignedNOTNULLauto_increment,
  4. `name`varchar(20)defaultNULL,
  5. `sex`varchar(8)defaultNULL,
  6. `birthday`datetimedefaultNULL,
  7. PRIMARYKEY(`id`)
  8. )ENGINE=InnoDBDEFAULTCHARSET=utf8;
  1. DROPTABLEIFEXISTS`test`.`person`;
  2. CREATETABLE`test`.`person`(
  3. `id`int(10)unsignedNOTNULLauto_increment,
  4. `name`varchar(20)defaultNULL,
  5. `sex`varchar(8)defaultNULL,
  6. `birthday`datetimedefaultNULL,
  7. PRIMARYKEY(`id`)
  8. )ENGINE=InnoDBDEFAULTCHARSET=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;

在MyEclipse新建一个Java Project,结构如下图



jdbc.properties文件是映射文件要使用的,其内容如下:

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的配置文件,其代码如下:

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEconfiguration
  3. PUBLIC"-//ibatis.apache.org//DTDConfig3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
  5. <configuration>
  6. <propertiesresource="jdbc.properties"/>
  7. <environmentsdefault="development">
  8. <environmentid="development">
  9. <transactionManagertype="JDBC"/>
  10. <dataSourcetype="POOLED">
  11. <propertyname="driver"value="${driver}"/>
  12. <propertyname="url"value="${url}"/>
  13. <propertyname="username"value="${username}"/>
  14. <propertyname="password"value="${password}"/>
  15. </dataSource>
  16. </environment>
  17. </environments>
  18. <mappers>
  19. <mapperresource="cn/ibatis3/test/annotation/person.xml"/>
  20. </mappers>
  21. </configuration>
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEconfiguration
  3. PUBLIC"-//ibatis.apache.org//DTDConfig3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
  5. <configuration>
  6. <propertiesresource="jdbc.properties"/>
  7. <environmentsdefault="development">
  8. <environmentid="development">
  9. <transactionManagertype="JDBC"/>
  10. <dataSourcetype="POOLED">
  11. <propertyname="driver"value="${driver}"/>
  12. <propertyname="url"value="${url}"/>
  13. <propertyname="username"value="${username}"/>
  14. <propertyname="password"value="${password}"/>
  15. </dataSource>
  16. </environment>
  17. </environments>
  18. <mappers>
  19. <mapperresource="cn/ibatis3/test/annotation/person.xml"/>
  20. </mappers>
  21. </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"/> <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/annotation/person.xml"/> </mappers> </configuration>

上面文件中的sql映射文件person.xml代码如下:

Xml代码 收藏代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEmapper
  3. PUBLIC"-//ibatis.apache.org//DTDMapper3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
  5. <mappernamespace="cn.ibatis3.test.annotation.PersonMapper">
  6. </mapper>
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <!DOCTYPEmapper
  3. PUBLIC"-//ibatis.apache.org//DTDMapper3.0//EN"
  4. "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
  5. <mappernamespace="cn.ibatis3.test.annotation.PersonMapper">
  6. </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.annotation.PersonMapper"> </mapper>

注意:在iBATIS3中,命名空间(namespace)是必须的,如果不使用注解的话,名字可以自己定义。一旦使用了注解,这里必须是那个使用注解类或接口的全名。

Person.java的代码请参考我的《iBATIS3学习(一)》

sessionFactory.java和我前面的《iBATIS3学习(一)》一样,只是注意将:

Java代码 收藏代码
  1. privateStringresource="cn/ibatis3/test/SqlMapper.xml";
  1. privateStringresource="cn/ibatis3/test/SqlMapper.xml";
private String resource="cn/ibatis3/test/SqlMapper.xml";
Java代码 收藏代码
  1. 改为privateStringresource="cn/ibatis3/test/annotation/SqlMapper.xml";
  1. 改为privateStringresource="cn/ibatis3/test/annotation/SqlMapper.xml";
改为private String resource="cn/ibatis3/test/annotation/SqlMapper.xml";

iBATIS3的注解可以定义在接口方法上的,也可以定义在类方法上,我这里定义在接口上,接口PersonMapper.java代码如下:

Java代码 收藏代码
  1. packagecn.ibatis3.test.annotation;
  2. importjava.util.List;
  3. importorg.apache.ibatis.annotations.CacheNamespace;
  4. importorg.apache.ibatis.annotations.Delete;
  5. importorg.apache.ibatis.annotations.Insert;
  6. importorg.apache.ibatis.annotations.Options;
  7. importorg.apache.ibatis.annotations.Select;
  8. importorg.apache.ibatis.annotations.SelectProvider;
  9. importorg.apache.ibatis.annotations.Update;
  10. @CacheNamespace(readWrite=true)
  11. publicinterfacePersonMapper{
  12. @Select("select*frompersonwhereid=#{id}")
  13. @Options(useCache=true,flushCache=false)
  14. PersonselectById(Integerid);
  15. @SelectProvider(type=SqlProvider.class,method="selectAllSql")
  16. List<Person>selectAll();
  17. @Select("select*frompersonwherenamelike#{name}")
  18. List<Person>selectPersonsByName(Stringname);
  19. @Insert({"insertintoperson(name,birthday,sex)",
  20. "values(#{name},#{birthday},#{sex})"})
  21. voidinsert(Personperson);
  22. @Delete("deletefrompersonwhereid=#{id}")
  23. voiddelete(Personperson);
  24. @Update({"updatepersonsetname=#{name},birthday=#{birthday},sex=#{sex}",
  25. "whereid=#{id}"})
  26. voidupdate(Personperson);
  27. }
  1. packagecn.ibatis3.test.annotation;
  2. importjava.util.List;
  3. importorg.apache.ibatis.annotations.CacheNamespace;
  4. importorg.apache.ibatis.annotations.Delete;
  5. importorg.apache.ibatis.annotations.Insert;
  6. importorg.apache.ibatis.annotations.Options;
  7. importorg.apache.ibatis.annotations.Select;
  8. importorg.apache.ibatis.annotations.SelectProvider;
  9. importorg.apache.ibatis.annotations.Update;
  10. @CacheNamespace(readWrite=true)
  11. publicinterfacePersonMapper{
  12. @Select("select*frompersonwhereid=#{id}")
  13. @Options(useCache=true,flushCache=false)
  14. PersonselectById(Integerid);
  15. @SelectProvider(type=SqlProvider.class,method="selectAllSql")
  16. List<Person>selectAll();
  17. @Select("select*frompersonwherenamelike#{name}")
  18. List<Person>selectPersonsByName(Stringname);
  19. @Insert({"insertintoperson(name,birthday,sex)",
  20. "values(#{name},#{birthday},#{sex})"})
  21. voidinsert(Personperson);
  22. @Delete("deletefrompersonwhereid=#{id}")
  23. voiddelete(Personperson);
  24. @Update({"updatepersonsetname=#{name},birthday=#{birthday},sex=#{sex}",
  25. "whereid=#{id}"})
  26. voidupdate(Personperson);
  27. }
package cn.ibatis3.test.annotation; import java.util.List; import org.apache.ibatis.annotations.CacheNamespace; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Options; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.SelectProvider; import org.apache.ibatis.annotations.Update; @CacheNamespace(readWrite = true) public interface PersonMapper { @Select("select * from person where id = #{id}") @Options(useCache = true, flushCache = false) Person selectById(Integer id); @SelectProvider(type=SqlProvider.class ,method="selectAllSql") List<Person> selectAll(); @Select("select * from person where name like #{name}") List<Person> selectPersonsByName(String name); @Insert( { "insert into person(name,birthday,sex)", "values(#{name},#{birthday},#{sex})" }) void insert(Person person); @Delete("delete from person where id=#{id}") void delete(Person person); @Update( {"update person set name=#{name},birthday=#{birthday},sex=#{sex}", "where id=#{id}" }) void update(Person person); }

上面的注解SelectProvider使用了一个类SqlProvider.java,其代码如下:

Java代码 收藏代码
  1. packagecn.ibatis3.test.annotation;
  2. publicclassSqlProvider{
  3. //动态的SQL语句,实际上应该使用iBATIS的动态SQL产生方法,这里仅仅是为了使用注解
  4. publicStringselectAllSql(){
  5. return"SELECT*FROMpersonp";
  6. }
  7. }
  1. packagecn.ibatis3.test.annotation;
  2. publicclassSqlProvider{
  3. //动态的SQL语句,实际上应该使用iBATIS的动态SQL产生方法,这里仅仅是为了使用注解
  4. publicStringselectAllSql(){
  5. return"SELECT*FROMpersonp";
  6. }
  7. }
package cn.ibatis3.test.annotation; public class SqlProvider { // 动态的SQL语句,实际上应该使用iBATIS的动态SQL产生方法,这里仅仅是为了使用注解 public String selectAllSql() { return "SELECT * FROM person p"; } }

接口的实现类PersonDao.java代码如下:

Java代码 收藏代码
  1. packagecn.ibatis3.test.annotation;
  2. importjava.util.ArrayList;
  3. importjava.util.List;
  4. importorg.apache.ibatis.session.SqlSession;
  5. importorg.apache.ibatis.session.SqlSessionFactory;
  6. publicclassPersonDaoimplementsPersonMapper{
  7. privateSqlSessionFactorysessionFactory=SessionFactory.getInstance()
  8. .getSqlSessionFactory();
  9. publicPersonselectById(Integerid){
  10. Personperson=newPerson();
  11. SqlSessionsession=null;
  12. try{
  13. session=sessionFactory.openSession();
  14. PersonMapperpersonMapper=session.getMapper(PersonMapper.class);
  15. person=personMapper.selectById(id);
  16. }finally{
  17. session.close();
  18. }
  19. returnperson;
  20. }
  21. @SuppressWarnings("unchecked")
  22. publicList<Person>selectAll(){
  23. List<Person>persons=newArrayList<Person>();
  24. SqlSessionsession=null;
  25. try{
  26. session=sessionFactory.openSession();
  27. PersonMapperpersonMapper=session.getMapper(PersonMapper.class);
  28. persons=personMapper.selectAll();
  29. }finally{
  30. session.close();
  31. }
  32. returnpersons;
  33. }
  34. publicvoiddelete(Personperson){
  35. SqlSessionsession=null;
  36. try{
  37. session=sessionFactory.openSession();
  38. PersonMapperpersonMapper=session.getMapper(PersonMapper.class);
  39. personMapper.delete(person);
  40. session.commit();
  41. }finally{
  42. session.close();
  43. }
  44. }
  45. publicvoidinsert(Personperson){
  46. SqlSessionsession=null;
  47. try{
  48. session=sessionFactory.openSession();
  49. PersonMapperpersonMapper=session.getMapper(PersonMapper.class);
  50. personMapper.insert(person);
  51. session.commit();
  52. }finally{
  53. session.close();
  54. }
  55. }
  56. publicvoidupdate(Personperson){
  57. SqlSessionsession=null;
  58. try{
  59. session=sessionFactory.openSession();
  60. PersonMapperpersonMapper=session.getMapper(PersonMapper.class);
  61. personMapper.update(person);
  62. session.commit();
  63. }finally{
  64. session.close();
  65. }
  66. }
  67. @SuppressWarnings("unchecked")
  68. publicList<Person>selectPersonsByName(Stringname){
  69. List<Person>persons=newArrayList<Person>();
  70. SqlSessionsession=null;
  71. try{
  72. session=sessionFactory.openSession();
  73. PersonMapperpersonMapper=session.getMapper(PersonMapper.class);
  74. persons=personMapper.selectPersonsByName("%"+name+"%");
  75. }finally{
  76. session.close();
  77. }
  78. returnpersons;
  79. }
  80. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值