码迷,mamicode.com
首页 > 其他好文 > 详细

Ibatis入门

时间:2015-05-26 14:25:48      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:ibatis

ibatis介绍

iBATIS一词来源于“internet”和“abatis”的组合,是一个由Clinton Begin在2002年发起的开放源代码项目。于2010年6月16号被谷歌托管,改名为MyBatis。是一个基于SQL映射支持Java和·NET的持久层框架。

搭建ibatis环境

jar包:

<dependency>
    <groupId>org.apache.ibatis</groupId>
    <artifactId>ibatis-sqlmap</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>com.mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.6-bin</version>
</dependency>

文件协同要素

  1. 实体类(entity)
    任何一个ORM关系映射框架都需要底层的实体类支撑,如Hibernate也同样存在entity的概念。
    如下例中的Student.java类。
  2. Dao
    同样,每一个实体类都会配备一个针对其本身的DataAccessObject(简称Dao),这也是必备的,用于定义针对该实体类的操作接口。如下例中的StudentDao.java类。
  3. DaoImpl
    实现对应的Dao接口,该DaoImpl与Hibernate中的DaoImpl有些许差别:ibatis中使用其自带的com.ibatis.sqlmap.client.SqlMapClient客户端完成对SqlMapConfigure.xml的加载,因此每一个DaoImpl都需要具备一个静态的sqlMapClient,和一个静态加载SqlMapConfigure.xml的过程。
    如下例中的StudentDaoImpl.java类。
  4. SqlMapConfig.xml
    ibatis独有的配置类xml,类似于Hibernate的hibernate-conf.xml,MySqlConfigure.xml中配置着连接数据库所用到的dataSource、操作各个实体所使用到的[Entity].xml的加载。
    如下例中的MySqlConfigure.xml
  5. [Entity].xml(Entity对应实体类,即实体类的xml配置)
    配置针对该实体bean的所有sql操作细节:映射实体bean,书写sql语句。如下例中的Student.xml文件。
  6. SqlMap.properties
    记录数据库连接信息,一般为四条:
    • driver
    • url
    • username
    • password
      如下例中的SqlMap.properties文件。

例子

Student实体

package ibatis;

import java.util.Date;

public class Student {
    private int id;
    private String name;
    private float score;
    private Date birth;
    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 float getScore() {
        return score;
    }
    public void setScore(float score) {
        this.score = score;
    }
    public Date getBirth() {
        return birth;
    }
    public void setBirth(Date birth) {
        this.birth = birth;
    }

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

StudentDao接口(为通俗起见,只有一个select功能,其他的同理):

package ibatis;

import java.util.List;


public interface StudentDao {
    public List<Student> selectAllStudent();
}

StudentDaoImpl接口实现

package ibatis;

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;

public class StudentDaoImpl implements StudentDao {
    private static SqlMapClient sqlMapClient = null;

    static{
        try {
            Reader reader = Resources.getResourceAsReader("ibatis/SqlMapConfig.xml");
            sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }



    @SuppressWarnings("unchecked")
    public List<Student> selectAllStudent() {
        List<Student> students = null;

        try {
            students = sqlMapClient.queryForList("selectAllStudent");
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return students;
    }

}

【重要】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.xml文件头要区别于Student.xml文件头,读者可对照该例子自行比较 -->
<sqlMapConfig>
    <!-- 加载数据库配置项,resource值为该properties文件的完整路径 -->
    <properties resource="ibatis/SqlMap.properties" />
    <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>
    <!-- 加载实体类配置项,resource值为该xml文件的完整路径 -->
    <sqlMap resource="ibatis/Student.xml"/>
</sqlMapConfig>

【重要】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">
<!-- 注意区分config.xml和当前xml头部 -->
<sqlMap>
    <!-- 为实体类取别名,方便分离,type为完整的类名 -->
    <typeAlias alias="Student" type="ibatis.Student"/>
    <!-- sql语句,在DaoImpl中使用sqlmapClient对id进行引用调用sql执行语句 -->
    <select id="selectAllStudent" resultClass="Student">
        select * from student
    </select>

</sqlMap>

SqlMap.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/xxxx
username=xxx
password=xxxxxxxx

如下工程目录,为搞不清楚xml引用路径的读者提供参考。
技术分享

对ibatis的感觉

相对于Hibernate:

  • 轻量了很多,不需要引用其他工厂类,在config.xml中只需配置dataSource,而Hibernate中还需要sessionFactory和其他配置.

  • 灵活了很多,sql语句完全写到配置文件中,可以随时修改移植,避免了Hibernate中为了修改sql而要修改代码的弊端。同时,sql语句可以更加灵活复杂。众所周知,Hibernate想要执行一条复杂一些的sql语句真是很费劲的,因为其HQL语句本身不支持复杂逻辑,仅仅是跟查询有关的操作。为了在Hibernate中执行sql语句还需要使用 getSession().createSQLQuery(sql)相关语句,非常繁琐。

Ibatis入门

标签:ibatis

原文地址:http://blog.csdn.net/langduhualangdu/article/details/46006743

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!