`
zhyt710
  • 浏览: 206488 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ibatis初接触--矛盾心情

阅读更多

也许这个时间让我自己都有些害怕。

 

知道有很多项目用的不是hibernate,而是ibatis.早就想看看ibatis是什么货色了。但出于长久以来用的都是hibernate,多少对ibaits有点不屑的情绪。不过今天也算看了看,并且按照它的tutorial写了第一个小例子。对ibaits的优点平这样是找不到什么感觉的。不过有一点,它依赖的包很少,这个例子只需要一个ibatis-x.x.x.xxx.jar就可以了,当然还要有用到的jdbc驱动程序。

 

//成文1小时后添加的内容start////////////////////////////////////////////////

刚才也看了ibatis的guide。加上目录仅仅60多页而已。也就是好说,你可以在三个小时左右,掌握ibatis。可见ibaits的学习门槛很低。当然对于jee的老手才如此。如果平时用hibernate多,学起来会觉得更容易和简单。

//成文1小时后添加的内容end/////////////////////////////////////////////////

 

在官网上下的tutorial是一个很早的翻译成中文版本的,应该感谢译者的辛苦工作,虽然这个指导的例子连贯性并不是很好,而且缺乏“完整性”,给人一种不安全感。我想对于不怎么熟悉o/r映射的人员应该很容易出问题的。

我在这里不妨把经过我整改和调试通过的整个代码都贴出来,目录结构也是经我改过的。运行代码是个基于junit3.8的junit测试。

 

先把建立数据库的ddl贴出,在运行测试之前,先建立数据库和表

drop database if exists ibatis;
create database ibatis DEFAULT CHARACTER SET utf8;

use ibatis;

drop table if exists person;
CREATE TABLE PERSON(
    PER_ID int NOT NULL,
    PER_FIRST_NAME VARCHAR (40) NOT NULL,
    PER_LAST_NAME VARCHAR (40) NOT NULL,
    PER_BIRTH_DATE DATETIME ,
    PER_WEIGHT_KG decimal(4, 2) NOT NULL,
    PER_HEIGHT_M decimal(4, 2) NOT NULL,
    PRIMARY KEY (PER_ID)
);

 

tutorial/domain/Person.java

package tutorial.domain;

import java.util.Date;

public class Person {
	private int id;
	private String firstName;
	private String lastName;
	private Date birthDate;
	private double weightInKilograms;
	private double heightInMeters;

	public int getId() {
		return id;
	}

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

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getLastName() {
		return lastName;
	}

	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	public Date getBirthDate() {
		return birthDate;
	}

	public void setBirthDate(Date birthDate) {
		this.birthDate = birthDate;
	}

	public double getWeightInKilograms() {
		return weightInKilograms;
	}

	public void setWeightInKilograms(double weightInKilograms) {
		this.weightInKilograms = weightInKilograms;
	}

	public double getHeightInMeters() {
		return heightInMeters;
	}

	public void setHeightInMeters(double heightInMeters) {
		this.heightInMeters = heightInMeters;
	}
}

 

tutorial/maps/Person.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="Person">
	<select id="getPerson" resultClass="tutorial.domain.Person">
		SELECT PER_ID as id, 
		PER_FIRST_NAME as firstName, 
		PER_LAST_NAME
		as lastName, 
		PER_BIRTH_DATE as birthDate, 
		PER_WEIGHT_KG as
		weightInKilograms, 
		PER_HEIGHT_M as heightInMeters 
		FROM PERSON
		WHERE PER_ID = #value#
	</select>
	
	<insert id="insertPerson" parameterClass="tutorial.domain.Person">
		INSERT INTO
		PERSON (PER_ID, PER_FIRST_NAME, PER_LAST_NAME,
		PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M)
		VALUES (#id#, #firstName#, #lastName#,
		#birthDate#, #weightInKilograms#, #heightInMeters#)
    </insert>
    
	<update id="updatePerson" parameterClass="tutorial.domain.Person">
		UPDATE PERSON
		SET PER_FIRST_NAME = #firstName#,
		PER_LAST_NAME = #lastName#, PER_BIRTH_DATE = #birthDate#,
		PER_WEIGHT_KG = #weightInKilograms#,
		PER_HEIGHT_M = #heightInMeters#
		WHERE PER_ID = #id#
	</update>
	
	<delete id="deletePerson" parameterClass="tutorial.domain.Person">
		DELETE FROM PERSON
		WHERE PER_ID = #id#
	</delete>
</sqlMap>

 

tutorial/MyAppSqlConfig.java

package tutorial;

import java.io.Reader;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class MyAppSqlConfig {
	private static final SqlMapClient sqlMap;
	static {
		try {
			String resource = "tutorial/SqlMapConfig.xml";
			Reader reader = Resources.getResourceAsReader(resource);
			sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);

		} catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(
					"Error initializing MyAppSqlConfig class. Cause: " + e);
		}
	}

	public static SqlMapClient getSqlMapInstance() {
		return sqlMap;
	}
}

 

tutorial/SqlMapConfig.xml

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

<!-- Always ensure to use the correct XML header as above! -->
<sqlMapConfig>

<properties
	resource="tutorial/SqlMapConfig.properties" />

<settings cacheModelsEnabled="true" enhancementEnabled="true"
	lazyLoadingEnabled="true" maxRequests="32" maxSessions="10"
	maxTransactions="5" useStatementNamespaces="false" />


<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="tutorial/maps/Person.xml" />

</sqlMapConfig>

 

tutorial/SqlMapConfig.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ibatis?useUnicode=true&characterEncoding=utf8
username=your-dbuser-name
password=your-dbuser-password

 

tutorial/test/ersonTest.java

package tutorial.test;

import java.util.Date;

import junit.framework.Assert;
import junit.framework.TestCase;
import tutorial.MyAppSqlConfig;
import tutorial.domain.Person;

import com.ibatis.sqlmap.client.SqlMapClient;

public class PersonTest extends TestCase {
	
	public void testInsert() throws Exception {
		SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
		Person newPerson = new Person();
		newPerson.setId(1);
		newPerson.setFirstName("Clinton");
		newPerson.setLastName("Begin");
		newPerson.setBirthDate (new Date());
		newPerson.setHeightInMeters(1.83);
		newPerson.setWeightInKilograms(86.36);
		sqlMap.insert("insertPerson", newPerson);
	}
	
	public void testGetPerson() throws Exception {
		SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
		Person newPerson = (Person) sqlMap.queryForObject("getPerson", new Integer("1"));
		Assert.assertNotNull(newPerson);
	}
	
	public void testUpdate()  throws Exception {
		SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
		Person person = (Person) sqlMap.queryForObject("getPerson", new Integer("1"));
		person.setFirstName("三");
		person.setLastName("张");
		sqlMap.update("updatePerson", person);
	}
	
	public void testDelete() throws Exception {
		SqlMapClient sqlMap = MyAppSqlConfig.getSqlMapInstance();
		Person person = (Person) sqlMap.queryForObject("getPerson", new Integer("2"));
		sqlMap.delete("deletePerson", person);
	}

}

 

ok,小功告成。这就算是ibaits的hello world了。也许要发觉它的优点,只有在以后真正的应用到的时候。不过我奇怪的是这样的工具很简单,很容易学,我以前也写过类似的工具,某些企业的技术hr如果拿着这种经验当考核求职者的要件,那真是让人觉得可笑了。

分享到:
评论

相关推荐

    ibatis-3-core-3.0.0.242.jar.zip

    ibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zipibatis-3-core-3.0.0.242.jar.zip

    ibatis-3-core-3.0.0.200

    ibatis-3-core-3.0.0.200

    apache开源项目源码ibatis-3-core-src-3.0.0.227(ibatis框架java源程序)

    apache开源项目源码ibatis-3-core-src-3.0.0.227 ibatis框架java源程序 spring,struts,hibernate,ibatis,框架源码 各种ibatis框架应用源码,你会从中得到意想不到的效果! apache开源组织开发的开源项目源码,其...

    ibatis-3-core-3.0.0.242.zip

    ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip ibatis-3-core-3.0.0.242.zip

    ibatis-core-3.0.jar.zip

    《深入解析iBatis核心库:ibatis-core-3.0.jar》 iBatis,一个优秀的持久层框架,以其轻量级、易用性、灵活性等特性深受开发者喜爱。在Java开发领域,iBatis作为数据访问层的解决方案,为数据库操作提供了强大的...

    ibatis-dao-2.jar

    ibatis-dao-2.jar gggggggggggg

    ibatis-common-2.jar

    ibatis-common-2.jar...........

    ibatis-sqlmap-2.jar

    ibatis-sqlmap-2.jar 对数据库进行操作的jar包 很方便使用

    ibatis-3-core-3.0.0.204

    ibatis-3-core-3.0.0.204 最新官方下载版

    ibatis-sqlmap-2.jar.zip

    《深入解析iBatis-SQLMap 2》 在Java Web开发领域,iBatis作为一个优秀的持久层框架,因其灵活性和高效性而深受开发者喜爱。本文将深入探讨iBatis-SQLMap 2版本,主要关注`ibatis-sqlmap-2.jar.zip`这个压缩包中的...

    ibatis-sqlmap-2.3.4.726-sources.jar.zip_birth84v_cutting1v2_ibat

    《深入解析iBatis-SQLMap 2.3.4.726源码》 在Java开发领域,iBatis作为一个优秀的持久层框架,深受广大开发者喜爱。它将SQL语句与Java代码分离,提高了代码的可读性和可维护性。本篇将围绕iBatis-SQLMap 2.3.4.726...

    IBatis-SQL-MAPs 开发指南

    IBatis-SQL-MAPs 开发指南IBatis-SQL-MAPs 开发指南IBatis-SQL-MAPs 开发指南IBatis-SQL-MAPs 开发指南IBatis-SQL-MAPs 开发指南

    Ibatis基本配置---[环境搭建

    Ibatis基本配置---[环境搭建

    ibatis-3-core-3.0.0.227.z

    本文将围绕"ibatis-3-core-3.0.0.227.z"这个压缩包,详细介绍其包含的元素以及相关的知识要点。 首先,"ibatis-3-core-3.0.0.227.jar"是iBatis的核心库文件,包含了iBatis框架的主要功能。这个JAR文件包含了所有...

    ibatis缓存介绍 - 勇泽 - 博客园.mht

    ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园

    ibatis-core-3.0.jar org.apache.ibatis.annotations.Param

    `ibatis-core-3.0.jar`是MyBatis的核心库文件,包含了MyBatis框架的主要功能。`org.apache.ibatis.annotations.Param`是MyBatis中的一个重要注解,用于处理方法参数映射。 `@Param`注解主要用于SQL查询中的动态参数...

    iBATIS-SqlMaps-2-Tutorial_cn.pdf

    iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...

Global site tag (gtag.js) - Google Analytics