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

使用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. }
  16. }

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

基于接口的编程(还有就是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);
  10. }

接口的实现类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. }
  80. }

最后是表的创建:

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注解完 ...

  • 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

使用iBATIS3.0完成增删改查相关推荐

  1. Mysql —— C语言链接mysql数据库,命令行形式(getopt()函数),用户、用户组增删改查(用户组表内有用户控制的策略字段)

    函数说明--getopt(): 函数说明 getopt()用来分析命令行参数.参数argc和argv分别代表参数个数和内容,跟main()函数的命令行参数是一样的. optstring中的指定的内容的 ...

  2. 【Python数据处理篇——DataFrame数据准备】DataFrame的创建、增删改查、数据导入等

    欢迎访问我搞事情的[知乎账号]:Coffee 以及我的[B站漫威剪辑账号]:VideosMan 若我的笔记对你有帮助,请用小小的手指,点一个大大的赞哦. 关于DataFrame的相关知识,我还进行了汇 ...

  3. 004--Django(定义模型类、数据的增删改查、F和Q对象)

    1.创建数据库 mysql -uroot -pmysqlcreate database django_demo charset=utf8; 2.配置mysql数据库 在settings.py 中配置数 ...

  4. MVC新手教程三:Entity Framework 4.0 来实现MVC的增删改查功能,10分钟搞定

    在这一节,我们使用VS2010自带的EF4.0来实现MVC的增删查改功能,为什么用EF呢?因为如果你自己手写sqlhelper之类,或者是用动软,和我们用EF的速度比,太慢太慢··· 当然,新手还是用 ...

  5. [py]flask从0到1-模板/增删改查

    flask知识点 1.后端渲染html到前端render_template 2.后端获取前端数据request.args.get 3.前端获取后端数据模板4.警示消息 flash {{ get_fla ...

  6. SSH(Struts 2.3.31 + Spring 4.1.6 + Hibernate 5.0.12 + Ajax)框架整合实现简单的增删改查(包含分页,Ajax 无刷新验证该用户是否存在)...

    软件152 余建强 该文将以员工.部门两表带领大家进入SSH的整合教程: 源码下载:http://download.csdn.net/detail/qq_35318576/9877235 SSH 整合 ...

  7. VUE2.0增删改查附编辑添加model(弹框)组件共用

    为什么80%的码农都做不了架构师?>>> Vue实战篇(增删改查附编辑添加model(弹框)组件共用) 前言 最近一直在学习Vue,发现一份crud不错的源码 预览链接 https: ...

  8. mysql8.0增删改查语句_MySQL增删改查语句

    /数据表,显示表的结构) l 创建数据库 create database student l 删除数据库 drop database student l 创建数据表 create table admi ...

  9. 带头节点单链表的增删改查

    单链表有很多结构循环单链表,有头节点的单链表,无头节点的单链表,双节点单链表,以下源码是以有一个头节点的单链表为例写的增删改查的各种功能,就是下图 然后各个注释也在函数后面写着,这玩意确实还挺难,源码 ...

最新文章

  1. 设计模式 - 迭代器模式(iterator pattern) 具体解释
  2. ai人工智能服务器操作系统,全球首款100%纯国产的AI操作系统来了,但说媲美Windows有意义吗...
  3. 最讨厌心灵鸡汤 所有失败最终都是人不行
  4. P4301-[CQOI2013]新Nim游戏【线性基】
  5. cad在布局怎么调比例_CAD中如何在布局空间调整图形比例?
  6. php中is null,php中empty(), is_null(), isset()函数区别
  7. 关于centos启动报错:Failed to start Crash recovery kernel arming的解决方案
  8. 六部工坊ros启智机器人定点导航技术_【展品抢鲜看】程天科技外骨骼机器人亮相峰会,让每个人享受机器人的服务!...
  9. 本特利前置器330180-50-00
  10. 怎样快速熟悉公司产品
  11. 读懂LaTeX中cls文件
  12. 南卡和OPPO蓝牙耳机哪个好用?高品质的蓝牙耳机测评
  13. Tex, LaTex, pdflatex, xelatex, xetex等的区别和关系
  14. html网址中的各个标签代表什么意思
  15. 安装Office2010提示无法将数值写入注册表
  16. JAVA毕设项目甜趣网上蛋糕店订购系统(java+VUE+Mybatis+Maven+Mysql)
  17. android获取ro._Android群控黑盒调用 - Sekiro食用手册
  18. Hashmap源码详解
  19. 数据分析之AB testing实战(附Python代码)
  20. DP背包问题及优化详解(全)

热门文章

  1. string相关库函数
  2. 关闭用playsound函数的WAV文件
  3. 你是否发现 职业能力危机,请 警惕
  4. Apache Subversion 1.7.2发布,开源版本控制工具
  5. 为何大部分人成不了技术专家?
  6. 264编码基本概念 FFMpeg的解码流程
  7. 解决 VS Code 保存时候自动格式化
  8. BZOJ 3329: Xorequ(数位dp+递推)
  9. Silverlight Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)
  10. Moving Average