iBatis 简介:
iBatis 是apache 的一个开源项目,一个O/R Mapping 解决方案,iBatis 最大的特点就是小巧,上手很快。如果不需要太多复杂的功能,iBatis 是能够满足你的要求又足够灵活的最简单的解决方案,现在的iBatis 已经改名为Mybatis 了。
今天学习下ibatis ,要学习他,首先需要搭建ibatis需要的环境
1.导入相关的jar包
2.编写配置文件
jdbc连接的属性文件
总配置文件,SqlMapConfig.xml
关于每个实体的映射文件(Map文件)
下面是我学习时做的Demo:
Emp.java
- package com.ibatis.entity;
- import java.util.Date;
- public class Emp {
- //变量的名字必须和数据库的字段名一致,否则会映射不出来
- private int empno;
- private String ename;
- private String job;
- private Integer mgr;
- private Date hiredate;
- private int sal;
- private int comm;
- private int deptno;
- public int getEmpno() {
- return empno;
- }
- public void setEmpno(int empno) {
- this.empno = empno;
- }
- public String getEname() {
- return ename;
- }
- public void setEname(String ename) {
- this.ename = ename;
- }
- public String getJob() {
- return job;
- }
- public void setJob(String job) {
- this.job = job;
- }
- public Integer getMgr() {
- return mgr;
- }
- public void setMgr(Integer mgr) {
- this.mgr = mgr;
- }
- public Date getHiredate() {
- return hiredate;
- }
- public void setHiredate(Date hiredate) {
- this.hiredate = hiredate;
- }
- public int getSal() {
- return sal;
- }
- public void setSal(int sal) {
- this.sal = sal;
- }
- public int getComm() {
- return comm;
- }
- public void setComm(int comm) {
- this.comm = comm;
- }
- public int getDeptno() {
- return deptno;
- }
- public void setDeptno(int deptno) {
- this.deptno = deptno;
- }
- @Override
- public String toString() {
- return "empno="+empno
- +"\tname="+ename
- +"\tjob="+job
- +"\tmgr="+mgr
- +"\thiredate="+hiredate;
- }
- }
SqlMap.properties
- driver=oracle.jdbc.driver.OracleDriver
- url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
- username=scott
- password=yulei123
Emp.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 alias="Emp" type="com.ibatis.entity.Emp"/>
- <!-- id表示select里的sql语句,resultClass表示返回结果的类型 -->
- <select id="selectAllEmp" resultClass="Emp">
- select * from emp
- </select>
- <!-- parameterClass表示参数的内容 -->
- <!-- #表示这是一个外部调用的需要传进的参数,可以理解为占位符 -->
- <select id="selectEmpById" parameterClass="int" resultClass="Emp">
- select * from emp
- where empno=#empno#
- </select>
- <!-- 不使用主键的方式 -->
- <insert id="addEmp" parameterClass="Emp">
- insert into
- emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)
- values(#empno#,#ename#,#job#,#mgr#,#hiredate#,#sal#,#comm#,#deptno#)
- </insert>
- <delete id="deleteEmpbyId" parameterClass="int">
- <!-- #id#里的id可以随意取,但是上面的insert则会有影响,因为上面的ename会从Emp里的属性里去查找 -->
- <!-- 我们也可以这样理解,如果有#占位符,则ibatis会调用parameterClass里的属性去赋值 -->
- delete from emp where empno=#id#
- </delete>
- <update id="updateEmpById" parameterClass="Emp">
- update emp
- set ename=#ename#
- where empno=#empno#
- </update>
- <!-- 模糊查询没有使用#,而使用了$符号 -->
- <select id="selectEmpByEname" parameterClass="String" resultClass="Emp">
- select empno,ename,sal,hiredate
- from emp
- where ename like '%$ename$%'
- </select>
- <!-- 主键插入方式 -->
- <insert id="insertEmp" parameterClass="Emp">
- <!-- 对于Oracle 需要将selectKey放在insert前面 -->
- <selectKey resultClass="int" keyProperty="empno">
- select empPkempno.Nextval as empno
- from dual
- </selectKey>
- insert into
- emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)
- values(#empno#,#ename#,#job#,#mgr#,#hiredate#,#sal#,#comm#,#deptno#)
- </insert>
- </sqlMap>
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/ibatis/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/ibatis/Emp.xml" />
- </sqlMapConfig>
IEmpDao.java
- package com.ibatis.dao;
- import java.util.List;
- import com.ibatis.entity.Emp;
- public interface IEmpDao {
- /**
- * 不使用主键的方式添加数据
- * @param emp
- */
- public void addEmp(Emp emp);
- /**
- * 使用主键的方式添加数据
- * @param emp
- */
- public void addEmpBySequence(Emp emp);
- /**
- * 根据id删除指定的员工
- * @param id
- */
- public void deleteEmpById(int id);
- /**
- * 根据id修改员工数据
- * @param emp
- */
- public void updateEmpById(Emp emp);
- /**
- * 查询所有的员工数据
- * @return
- */
- public List<Emp> queryAllEmp();
- /**
- * 模糊查询
- * @param name
- * @return
- */
- public List<Emp> queryEmpByName(String name);
- /**
- * 根据ID查询指定的员工数据
- * @param id
- * @return
- */
- public Emp queryEmpById(int id);
- }
IEmpDaoImpl.java
- package com.ibatis.impl;
- 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.dao.IEmpDao;
- import com.ibatis.entity.Emp;
- import com.ibatis.sqlmap.client.SqlMapClient;
- import com.ibatis.sqlmap.client.SqlMapClientBuilder;
- public class IEmpDaoImpl implements IEmpDao{
- private static SqlMapClient sqlMapClient=null;
- //读取配置文件start
- static{
- try {
- Reader reader=Resources.getResourceAsReader("com/ibatis/SqlMapConfig.xml");
- sqlMapClient=SqlMapClientBuilder.buildSqlMapClient(reader);
- reader.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- //end
- /**
- * 不使用主键的方式添加数据
- * @param emp
- */
- @Override
- public void addEmp(Emp emp) {
- Object object=null;
- try {
- object=sqlMapClient.insert("addEmp", emp);
- System.out.println("添加员工的返回值:"+object);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- /**
- * 使用主键的方式添加数据
- * @param emp
- */
- @Override
- public void addEmpBySequence(Emp emp) {
- try {
- //1.从数据库序列中获取主键值
- //2.往emp表中插入记录
- sqlMapClient.insert("insertEmp", emp);
- System.out.println(emp.getEmpno());
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void deleteEmpById(int id) {
- try {
- int num=sqlMapClient.delete("deleteEmpbyId", id);
- System.out.println(num);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- @Override
- public void updateEmpById(Emp emp) {
- try {
- int num=sqlMapClient.update("updateEmpById", emp);
- System.out.println(num);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- @Override
- public List<Emp> queryAllEmp() {
- List<Emp> emps=null;
- try {
- emps=sqlMapClient.queryForList("selectAllEmp");
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return emps;
- }
- /**
- * 模糊查询
- */
- @Override
- public List<Emp> queryEmpByName(String name) {
- List<Emp> empList=null;
- try {
- empList=sqlMapClient.queryForList("selectEmpByEname", name);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return empList;
- }
- /**
- * 根据id查询指定的员工值
- */
- @Override
- public Emp queryEmpById(int id) {
- Emp emp=null;
- try {
- emp=(Emp) sqlMapClient.queryForObject("selectEmpById", id);
- } catch (SQLException e) {
- e.printStackTrace();
- }
- return emp;
- }
- }
TestIbatis.java
- package com.ibatis.test;
- import java.util.Date;
- import java.util.List;
- import com.ibatis.dao.IEmpDao;
- import com.ibatis.entity.Emp;
- import com.ibatis.impl.IEmpDaoImpl;
- public class TestIbatis {
- public static void main(String[] args) {
- /**
- * 查询所有员工
- */
- IEmpDao dao=new IEmpDaoImpl();
- for(Emp emp:dao.queryAllEmp()){
- System.out.println(emp.toString());
- }
- /**
- * 根据id查找员工
- */
- System.out.println(dao.queryEmpById(7839));
- /**
- * 不使用主键的方式添加员工
- */
- Emp emp =new Emp();
- emp.setEmpno(2010);
- emp.setEname("董秀锦");
- emp.setComm(30);
- emp.setDeptno(20);
- emp.setMgr(7839);
- emp.setSal(2000);
- emp.setJob("达人");
- emp.setHiredate(new Date());
- dao.addEmp(emp);
- /**
- * 使用主键的方式添加数据
- */
- Emp emp2 =new Emp();
- emp2.setEmpno(2223); //这个不其作用了,使用的是序列生成的主键值
- emp2.setEname("董秀锦");
- emp2.setComm(30);
- emp2.setDeptno(20);
- emp2.setMgr(7839);
- emp2.setSal(2000);
- emp2.setJob("达人");
- emp2.setHiredate(new Date());
- dao.addEmpBySequence(emp2) ;
- /**
- * 删除
- */
- dao.deleteEmpById(2010);
- /**
- * 修改
- */
- Emp emp1 =new Emp();
- emp1.setEmpno(7566);
- emp1.setEname("董秀锦");
- dao.updateEmpById(emp1);
- /**
- * 模糊查询
- */
- List<Emp> empList= dao.queryEmpByName("秀");
- for(Emp e:empList){
- System.out.println(e);
- }
- }
- }
iBatis 的优缺点:
优点:
1、 减少代码量,简单;
2、 性能增强;
3、 Sql 语句与程序代码分离;
4、 增强了移植性;
缺点:
1、 和Hibernate 相比,sql 需要自己写;
2、 参数数量只能有一个,多个参数时不太方便;
相关推荐
在本教程中,我们将通过一个简单的Ibatis入门例子,带你逐步了解并掌握这个强大的框架。 首先,我们需要在项目中引入Ibatis的依赖。通常,我们会在Maven的pom.xml文件中添加以下依赖: ```xml <groupId>org....
《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...
**Ibatis 入门教程** Ibatis 是一个优秀的 Java ORM(对象关系映射)框架,它允许程序员将数据库操作与业务逻辑分离,提供灵活的 SQL 配置和映射机制,使得开发人员能够自由地编写 SQL 而不被 ORM 的复杂性所束缚。...
**iBatis入门(三)** 在本篇中,我们将深入探讨iBatis,这是一个流行的开源持久层框架,它允许开发者将SQL语句与Java代码分离,提供更灵活的数据库操作方式。iBatis的核心是SQL Maps,这些映射文件包含了SQL语句以及...
标题 "ibatis 入门" 暗示我们要探讨的是关于使用和理解开源持久层框架 iBATIS 的基础知识。iBATIS 是一个优秀的 Java 应用框架,它将 SQL 查询与 Java 代码分离,提供了更灵活的数据访问方式。这篇博客(博文链接已...
本教程将带你一步步走进iBatis的世界,通过一个最简单的入门例子来了解其基本概念和使用方法。 一、iBatis简介 iBatis(现在称为MyBatis)是由Apache软件基金会维护的一个开源项目,它解决了Java应用程序直接操作...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得...通过学习这个Ibatis入门教程,你可以了解并掌握如何在Java应用中使用Ibatis进行数据操作,为后续的进阶学习和项目开发打下坚实的基础。
**Ibatis 入门到精通详细讲解** Ibatis 是一个优秀的持久层框架,它允许开发者将 SQL 语句与 Java 代码分离,提供了一个灵活的映射框架,从而减轻了开发人员在数据库操作上的工作负担。这篇详细讲解将带你从入门到...
**ibatis入门** iBatis,一款轻量级的Java持久层框架,是MyBatis的前身,由美国华人开发团队开发。它提供了一个SQL、Java和XML的映射框架,将SQL语句与Java代码分离,使得开发者可以更加灵活地处理数据库操作,避免...
【标题】:Ibatis Ibatis入门教程 【描述】:Ibatis是一款优秀的持久层框架,它简化了Java应用与数据库之间的交互,通过提供一个映射SQL的XML或注解方式,使得开发人员能够将精力集中在业务逻辑上,而不是繁琐的...
自己写了一个Ibatis入门文件 JDK用的1.4 ibatis用的2.3.0 一定要注意版本问题,不然出现本本不兼容很费劲,我调了一上午,注意一定要用JDK1.4 ibatis2.3.0! 数据库自己建一张简单的表就行了,特别说明 只适合新手...
这个压缩包中的"ibatisJavaTest"项目应该是一个简单的Ibatis入门示例,可能包含了配置文件、映射文件、测试类等。通过分析和运行这个项目,你可以直观地了解Ibatis如何与数据库交互,以及如何编写和使用Mapper接口。...
**iBATIS入门实例测试** iBATIS是一个优秀的开源持久层框架,它简化了Java应用程序与数据库之间的交互,使得开发者可以专注于SQL语句本身,而无需处理大量的JDBC代码。本教程将通过一个简单的实例来介绍如何使用...
【标题】"ibatis入门学习经典案例"是一个针对初学者设计的教程,旨在帮助他们快速理解和掌握MyBatis(原名iBatis)这一流行的Java持久层框架。这个案例提供了完整的部署和运行环境,使学习过程更为直观和便捷。 ...
在这个"ibatis入门实例(全代码)"中,我们将探讨如何通过 Ibatis 实现对数据库的操作,包括数据库的初始化、SQL 映射文件的编写以及 Java 代码的集成。 首先,让我们了解数据库的准备工作。在实例中,提供了数据库...
**Ibatis 入门实例详解** Ibatis 是一个优秀的、开源的 Java 数据访问框架,它简化了数据库操作,使得开发者可以更加专注于 SQL 而不需处理底层的 JDBC 编码。Ibatis 提供了一个映射框架,允许将 SQL 查询与 Java ...
iBatis,现已被更名为MyBatis,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。...通过这个简单的"iBatis入门Helloworld"项目,你可以快速掌握iBatis的基础操作,并为进一步学习和应用打下坚实基础。