使用iBATIS3.0完成增删改查

为什么80%的码农都做不了架构师?>>>   hot3.png

使用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

SqlMapper.xml是iBATIS的配置文件,其代码如下:

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代码如下:

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. <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是不推荐使用的,在以后的版本可能会去掉这个属性。

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

分享到: sina.jpg tec.jpg

iBATIS3.0学习(二)使用iBATIS3.0注解完 ...

  • 2010-02-03 13:00
  • 浏览 11154
  • 评论(14)
  • 收藏
  • 分类:企业架构
  • 相关推荐
评论

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.     }  

转载于:https://my.oschina.net/wzzz/blog/206635

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle-11g-R2监听文件配置

客户端连接oracle数据库时出现如下错误&#xff1a; Listener refused the connection with the following error: ORA-12514, TNS:listener does not currently know of service requested in connect descriptor 首先看看Oracle服务是否开启&#xff1a; 然后找到listener.or…

【C】strcpy()需谨慎使用;

大家都知道C中的strcpy()函数是用来复制字符串的库函数。先附上代码看看strcpy()函数的功能&#xff1a; 1 #include<stdio.h>2 #include<string.h>3 #define MAX 204 5 int main(void)6 {7 char a[MAX]"abc";8 char b[MAX]"abcdefghi"…

多重指针操作

之前对多重指针操作心存忐忑&#xff0c;不能很熟练使用&#xff0c;本质原因是不了解其实质&#xff0c;因此对其进行了学习。 一、简单的代码如下 #include <stdio.h> #include <stdlib.h> #include <string.h>void myArray(char ***p2, int num) {int i0;…

C++ 初始化与赋值

1、初始化与赋值的区别&#xff1a; 二者的区别不是看&#xff0c;是否有这个赋值操作符&#xff0c;而是看操作的时候&#xff0c;对象是否已经有值。 初始化&#xff1a;创建对象&#xff0c;并给它设置初始值。 赋值&#xff1a;对象已经有值&#xff0c;擦除对象的当前值&a…

如何找出MySQL数据库中的低效SQL语句

面对业务的迅猛发展&#xff0c;DBA的一项重要工作就是及时发现数据库中的低效SQL语句&#xff0c;有的可以立刻着手解决&#xff08;比如缺少合适的索引&#xff09;&#xff0c;有的需要尽快反馈给开发人员进行修改。 MySQL数据库有几个配置选项可以帮助我们及时捕获低效SQL语…

搜集的一些有意思的牛人博客地址

我要去桂林-田春峰的IT网志 http://blog.donews.com/accesine/ SEO优化的内容 转载于:https://www.cnblogs.com/zhangweilong/archive/2012/11/19/2777719.html

memory拷贝与string拷贝的区别

1、memory拷贝&#xff0c;根据拷贝的字节个数&#xff0c;从src一个一个字节拷贝到dst&#xff0c;拷贝过程不管src的取值&#xff0c;也不管dst是否能容纳。2、因此&#xff0c;对于memory拷贝&#xff0c;src中NULL字符&#xff08;取值为0的字符&#xff09;后面的字符也能…

【转载】#323 - A Generic Class is a Template for a Class

A generic classs is a class that takes one or more type parameters, which it then uses in the definition of the class. It can be thought of as a template for a class. 1 public class ThingContainer<TParam> 2 { 3   private TParam theThing; 4 5   p…

黑马程序员--ADO.Net中的知识点和难点

------- Windows Phone 7手机开发、.Net培训、期待与您交流&#xff01; ------- 1、 ADO.Net基础 程序要和数据库交互要通过ADO.Net进行&#xff0c;通过ADO.Net就能在程序中执行SQL了。 直接在项目中内嵌mdf文件的方式使用SQLServer数据库&#xff08;基于服务的数据库&#…

leetcode——15.3Sum

#include<stdio.h> #include<stdlib.h>int** threeSum(int* nums, int numsSize, int* returnSize) {if (numsSize<3)return NULL;int comNum numsSize*(numsSize - 1)*(numsSize - 2) / 6;int** ret (int**)malloc(sizeof(int*)*comNum);//先创建“用来存储一…

[New Portal]Windows Azure Virtual Machine (17) Virtual Machine成本分析

《Windows Azure Platform 系列文章目录》 在Windows Azure VM里&#xff0c;计费模式是和以下几个因素有关&#xff1a; 成本1: VM Type and VM Size 具体的计费模式请参考这里 http://www.windowsazure.com/en-us/pricing/details/virtual-machines/#service-windows 我们知道…

Servlet与JSP间的传值问题

Servlet与JSP 之间的传值有两种情况&#xff1a;JSP -> Servlet&#xff0c; Servlet -> JSP。通过对象 request和 session (不考虑 application)完成传值。一、JSP -> servletJSP页面有3种方法向 servlet传值&#xff1a; form表单、URL<!-- JSP page --> ...…

java 访问修饰符

java 访问修饰符 类、方法、成员变量和局部变量的可用修饰符 修饰符 类 成员访求 构造方法 成员变量 局部变量 abstract&#xff08;抽象的&#xff09; √ √ &#xff0d; &#xff0d; &#xff0d; static &#xff08;静态的&#xff09; &#xff0d; √ …

嵌入式Linux系统的构成和启动总结

以下内容源于网络资源的整理&#xff0c;如有侵权请告知删除。 一、嵌入式Linux系统典型结构 Flash划分成以下4个区&#xff1a; &#xff08;1&#xff09;Bootloader区。存放的是Bootloader&#xff0c;它负责嵌入式系统最初的硬件初始化、驱动和内核加载。 &#xff08;2&…

防止arp***方法

防止arp***&#xff1a;Win7下搞定ip与mac地址绑定对于玩系统的老手都知道&#xff0c;防止arp***实际上不需要这个防火墙那个防火墙&#xff0c;一句命令将ip与mac地址绑定即可。例如&#xff1a;arp -s 192.168.1.1 00-19-e0-c0-6f-0a不过这句话在Windows7显得这么无助&#…

根文件系统的简介

以下内容源于网络资源的整理&#xff0c;如有侵权请告知删除。 一、文件系统 文件系统是对一个存储设备上的数据进行组织的机制。这种机制有利于用户和操作系统的交互。 尽管内核是 Linux 的核心&#xff0c;但文件却是用户与操作系统交互所采用的主要工具。对Linux来说尤其如…

使用jQuery异步传递含复杂属性及集合属性的Model到控制器方法

Student类有集合属性Courses&#xff0c;如何把Student连同集合属性Courses传递给控制器方法&#xff1f; public class Student { public string StudentName { get; set; } public IList<Course> Courses { get; set; } } public class Course…

函数指针的使用

在学习群里看到的一个程序&#xff0c;基本说明了函数指针的用法。就摘录如下&#xff1a;

CreateThread和_beginthread的区别

1.程序&#xff1a;程序构成&#xff1a;(1)源代码(2)可执行的二进制代码程序是指令和数据的有序集合&#xff0c;其本身没有任何运行的含义&#xff0c;是一个静态的概念。由操作系统加载其可执行的二进制代码&#xff0c;分配相应的数据结构&#xff1a;进程控制块PCB(Proces…

重新注册dll

for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %i它的作用是用循环语句并且用regsvr32命令对Windows\System32文件夹中的所有DLL文件都进行一次注册&#xff0c;以解决诸如IE无法打开二级链接这样的问题。转载于:https://blog.51cto.com/gzkhrh/1375543