iBatis 的优缺点:

优点:

1、 减少代码量,简单;

2、 性能增强;

3、 Sql 语句与程序代码分离;

4、 增强了移植性;

缺点:

1、 和Hibernate 相比,sql 需要自己写;

2、 参数数量只能有一个,多个参数时不太方便;

搭建iBatis 开发环境:
1 、导入相关的jar 包,ibatis-2.3.0.677.jar 、mysql-connector-java-5.1.6-bin.jar
2 、编写配置文件:
              Jdbc 连接的属性文件
              总配置文件, SqlMapConfig.xml
              关于每个实体的映射文件(Map 文件)
Demo :
Student.java:

package com.iflytek.entity;

import java.sql.Date;

/**
 * @author xudongwang 2011-12-31
 *
 *         Email:xdwangiflytek@gmail.com
 *
 */
public class Student {
    // 注意这里需要保证有一个无参构造方法,因为包括Hibernate在内的映射都是使用反射的,如果没有无参构造可能会出现问题
    private int id;
    private String name;
    private Date birth;
    private float score;

public int getId() {
        return id;
    }

public void setId(int id) {
        this.id = id;
    }

public String getName() {
        return name;
    }

public void setName(String name) {
        this.name = name;
    }

public Date getBirth() {
        return birth;
    }

public void setBirth(Date birth) {
        this.birth = birth;
    }

public float getScore() {
        return score;
    }

public void setScore(float score) {
        this.score = score;
    }

@Override
    public String toString() {
        return "id=" + id + "\tname=" + name + "\tmajor=" + birth + "\tscore="
                + score + "\n";
    }

}

SqlMap.properties :

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ibatis
username=root
password=123

Student.xml :

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
   "http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>
    <!-- 通过typeAlias使得我们在下面使用Student实体类的时候不需要写包名 -->
    <typeAlias alias="Student" type="com.iflytek.entity.Student" />

<!-- 这样以后改了sql,就不需要去改java代码了 -->
    <!-- id表示select里的sql语句,resultClass表示返回结果的类型 -->
    <select id="selectAllStudent" resultClass="Student">
        select * from
        tbl_student
    </select>

<!-- parameterClass表示参数的内容 -->
    <!-- #表示这是一个外部调用的需要传进的参数,可以理解为占位符 -->
    <select id="selectStudentById" parameterClass="int" resultClass="Student">
        select * from tbl_student where id=#id#
    </select>

<!-- 注意这里的resultClass类型,使用Student类型取决于queryForList还是queryForObject -->
    <select id="selectStudentByName" parameterClass="String"
        resultClass="Student">
        select name,birth,score from tbl_student where name like
        '%$name$%'
    </select>

<insert id="addStudent" parameterClass="Student">
        insert into
        tbl_student(name,birth,score) values
        (#name#,#birth#,#score#);
        <selectKey resultClass="int" keyProperty="id">
            select @@identity as inserted
            <!-- 这里需要说明一下不同的数据库主键的生成,对各自的数据库有不同的方式: -->
            <!-- mysql:SELECT LAST_INSERT_ID() AS VALUE -->
            <!-- mssql:select @@IDENTITY as value -->
            <!-- oracle:SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL -->
            <!-- 还有一点需要注意的是不同的数据库生产商生成主键的方式不一样,有些是预先生成 (pre-generate)主键的,如Oracle和PostgreSQL。
                有些是事后生成(post-generate)主键的,如MySQL和SQL Server 所以如果是Oracle数据库,则需要将selectKey写在insert之前 -->
        </selectKey>
    </insert>

<delete id="deleteStudentById" parameterClass="int">
        <!-- #id#里的id可以随意取,但是上面的insert则会有影响,因为上面的name会从Student里的属性里去查找 -->
        <!-- 我们也可以这样理解,如果有#占位符,则ibatis会调用parameterClass里的属性去赋值 -->
        delete from tbl_student where id=#id#
    </delete>

<update id="updateStudent" parameterClass="Student">
        update tbl_student set
        name=#name#,birth=#birth#,score=#score# where id=#id#
    </update>

</sqlMap>

说明:
如果xml 中没有ibatis 的提示,则window --> Preference--> XML-->XML Catalog---> 点击add
选择uri URI: 请选择本地文件系统上
iBatisDemo1/WebContent/WEB-INF/lib/sql-map-config-2.dtd 文件;
Key Type: 选择Schema Location;
Key: 需要联网的,不建议使用;
SqlMapConfig.xml :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
    "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">

<sqlMapConfig>
    <!-- 引用JDBC属性的配置文件 -->
    <properties resource="com/iflytek/entity/SqlMap.properties" />
    <!-- 使用JDBC的事务管理 -->
    <transactionManager type="JDBC">
        <!-- 数据源 -->
        <dataSource type="SIMPLE">
            <property name="JDBC.Driver" value="${driver}" />
            <property name="JDBC.ConnectionURL" value="${url}" />
            <property name="JDBC.Username" value="${username}" />
            <property name="JDBC.Password" value="${password}" />
        </dataSource>
    </transactionManager>
    <!-- 这里可以写多个实体的映射文件 -->
    <sqlMap resource="com/iflytek/entity/Student.xml" />
</sqlMapConfig>

StudentDao :

package com.iflytek.dao;

import java.util.List;

import com.iflytek.entity.Student;

/**
 * @author xudongwang 2011-12-31
 *
 *         Email:xdwangiflytek@gmail.com
 *
 */
public interface StudentDao {

/**
     * 添加学生信息
     *
     * @param student
     *            学生实体
     * @return 返回是否添加成功
     */
    public boolean addStudent(Student student);

/**
     * 根据学生id删除学生信息
     *
     * @param id
     *            学生id
     * @return 删除是否成功
     */
    public boolean deleteStudentById(int id);

/**
     * 更新学生信息
     *
     * @param student
     *            学生实体
     * @return 更新是否成功
     */
    public boolean updateStudent(Student student);

/**
     * 查询全部学生信息
     *
     * @return 返回学生列表
     */
    public List<Student> selectAllStudent();

/**
     * 根据学生姓名模糊查询学生信息
     *
     * @param name
     *            学生姓名
     * @return 学生信息列表
     */
    public List<Student> selectStudentByName(String name);

/**
     * 根据学生id查询学生信息
     *
     * @param id
     *            学生id
     * @return 学生对象
     */
    public Student selectStudentById(int id);

}

StudentDaoImpl :

package com.iflytek.daoimpl;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.iflytek.dao.StudentDao;
import com.iflytek.entity.Student;

/**
 * @author xudongwang 2011-12-31
 *
 *         Email:xdwangiflytek@gmail.com
 *
 */
public class StudentDaoImpl implements StudentDao {

private static SqlMapClient sqlMapClient = null;

// 读取配置文件
    static {
        try {
            Reader reader = Resources
                    .getResourceAsReader("com/iflytek/entity/SqlMapConfig.xml");
            sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

public boolean addStudent(Student student) {
        Object object = null;
        boolean flag = false;
        try {
            object = sqlMapClient.insert("addStudent", student);
            System.out.println("添加学生信息的返回值:" + object);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if (object != null) {
            flag = true;
        }
        return flag;
    }

public boolean deleteStudentById(int id) {
        boolean flag = false;
        Object object = null;
        try {
            object = sqlMapClient.delete("deleteStudentById", id);
            System.out.println("删除学生信息的返回值:" + object + ",这里返回的是影响的行数");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if (object != null) {
            flag = true;

}
        return flag;

}

public boolean updateStudent(Student student) {
        boolean flag = false;
        Object object = false;
        try {
            object = sqlMapClient.update("updateStudent", student);
            System.out.println("更新学生信息的返回值:" + object + ",返回影响的行数");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        if (object != null) {
            flag = true;
        }
        return flag;
    }

public List<Student> selectAllStudent() {
        List<Student> students = null;
        try {
            students = sqlMapClient.queryForList("selectAllStudent");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return students;
    }

public List<Student> selectStudentByName(String name) {
        List<Student> students = null;
        try {
            students = sqlMapClient.queryForList("selectStudentByName",name);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return students;
    }

public Student selectStudentById(int id) {
        Student student = null;
        try {
            student = (Student) sqlMapClient.queryForObject(
                    "selectStudentById", id);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return student;
    }
}

TestIbatis.java :

package com.iflytek.test;

import java.sql.Date;
import java.util.List;

import com.iflytek.daoimpl.StudentDaoImpl;
import com.iflytek.entity.Student;

/**
 * @author xudongwang 2011-12-31
 *
 *         Email:xdwangiflytek@gmail.com
 *
 */
public class TestIbatis {

public static void main(String[] args) {
        StudentDaoImpl studentDaoImpl = new StudentDaoImpl();

System.out.println("测试插入");
        Student addStudent = new Student();
        addStudent.setName("李四");
        addStudent.setBirth(Date.valueOf("2011-09-02"));
        addStudent.setScore(88);
        System.out.println(studentDaoImpl.addStudent(addStudent));

System.out.println("测试根据id查询");
        System.out.println(studentDaoImpl.selectStudentById(1));

System.out.println("测试模糊查询");
        List<Student> mohuLists = studentDaoImpl.selectStudentByName("李");
        for (Student student : mohuLists) {
            System.out.println(student);
        }

System.out.println("测试查询所有");
        List<Student> students = studentDaoImpl.selectAllStudent();
        for (Student student : students) {
            System.out.println(student);
        }

System.out.println("根据id删除学生信息");
        System.out.println(studentDaoImpl.deleteStudentById(1));

System.out.println("测试更新学生信息");
        Student updateStudent = new Student();
        updateStudent.setId(1);
        updateStudent.setName("李四1");
        updateStudent.setBirth(Date.valueOf("2011-08-07"));
        updateStudent.setScore(21);
        System.out.println(studentDaoImpl.updateStudent(updateStudent));

}
}

转载于:https://www.cnblogs.com/ctou45/archive/2012/01/31/2333728.html

iBatis入门和开发环境搭建相关推荐

  1. JAVA入门·JAVA开发环境搭建之卸载JDK安装JDK

    JAVA开发环境搭建 卸载JDK 1.删除Java的安装目录 我的电脑--属性--高级系统设置--环境变量--系统变量--JAVA_HOME--Java的安装目录 2.删除JAVA_HOME 3.删除 ...

  2. stm08S单片机C语言编,STM8S单片机入门1(开发环境搭建)

    STM8S单片机开发环境由三大部分组成,包括PC机上的开发软件(集成开发软件.驱动程序等).调试&编程器ST-LINK.目标单片机电路板.如下图所示: 1.PC机上开发软件 PC机上的软件包括 ...

  3. Django入门之开发环境搭建1.1

    创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位 ...

  4. 【机器学习-数据科学】第二节:ipython开发环境搭建以及pandas快速入门

    ipython开发环境搭建以及pandas快速入门 0.开发环境搭建 技巧 网页版ipython:ipython notebook numpy 1.pandas 快速入门一 导入 创建对象 2. pa ...

  5. EC600 QuecPython开发环境搭建、固件下载,最方便的OpenCPU物联网4G通信解决方案

    EC600 QuecPython 官方资源汇总 开发环境搭建 1.安装windows驱动 2.验证模组的固件版本 3.烧录QuecPython固件 小试QuecPython 1.查看系统信息 2.点亮 ...

  6. 《Node.js入门》Windows 7下Node.js Web开发环境搭建笔记

    最近想尝试一下在IBM Bluemix上使用Node.js创建Web应用程序,所以需要在本地搭建Node.js Web的开发测试环境. 这里讲的是Windows下的搭建方法,使用CentOS 的小伙伴 ...

  7. 【技术文档】Jeecg-P3开发环境搭建入门(java插件开发框架)

    一.项目工程说明 jeecg-p3-web       | 启动主项目 jeecg-p3-biz-demo | 插件项目     注意:项目为maven工程,采用maven方式导入eclipse等ID ...

  8. 【官方搭建入门】JEEWX 捷微开发环境搭建必读

    [官方搭建入门]JEEWX 捷微开发环境搭建必读 下载地址: http://git.oschina.net/jeecg/jeewx 1. 标准开发环境:eclipse + maven + jdk7 + ...

  9. 【官方搭建入门】JEECG 平台开发环境搭建必读

    [官方搭建入门]JEECG 平台开发环境搭建必读 下载地址:http://git.oschina.net/jeecg/jeecg 1. 标准开发环境:eclipse + maven + jdk7 + ...

最新文章

  1. python查看删除你微信的账号
  2. 在VC下执行DOS命令(VC执行EXE)
  3. 前台特效(3) 编辑表格
  4. 用css自定义滚动条样式
  5. 二维温度场matlab编程,二维温度场重建算法(价钱可议)
  6. 剑指offer-JZ30 包含min函数的栈(C++,附自己的分析)
  7. 将之前写完的猜数字游戏改为通过javabean_【沃德英语】好玩的单词游戏
  8. 当10年BI数据总监遇到烂需求、烂数据时,他做了这几件事
  9. 木纹标识lisp_lisp 习题 用列表元素标识文件一行。
  10. 牛腩新闻发布系统-发布
  11. Ubuntu中EasyPR环境配置
  12. yjk计算书_用户手册
  13. 逻辑思维与写作-第一章,第二章-随笔笔记
  14. python函数长度单位换算_长度单位换算表-在线长度单位转换器
  15. 这款免费的低代码平台将是你创业路上的助推器
  16. Windows Server 2016域控服务器如何取消密码复杂性规则
  17. android 跨应用服务,跨应用启动Service,出现空指针
  18. c语言编程小球运行结果是,如何用C语言编程一个滚动的小球 最好是五彩的 滚动的...
  19. 数理统计——AQI预测
  20. 复旦计算机可以跨专业吗,I直达录取现场I2020,还能跨考计算机吗?

热门文章

  1. Eigen(5)Array类和元素级操作
  2. python里clear和copy_python之字典
  3. SAS的数组array介绍
  4. android.mk 模块编译,通过Android.mk添加一个编译模块到系统中的顺序如下
  5. AUTOSAR从入门到精通100讲(二)-SOME/IP及其应用
  6. Python应用实战-pandas绘制图形
  7. reduce python3_更少循环?看看这3个Python函数
  8. php中得到复选框的数据的代码,表单复选框向PHP传输数据的代码
  9. CSS3里的display
  10. 非常酷!10个基于 HTML5 的字体应用演示网站