也许这个时间让我自己都有些害怕。
知道有很多项目用的不是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.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
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核心库:ibatis-core-3.0.jar》 iBatis,一个优秀的持久层框架,以其轻量级、易用性、灵活性等特性深受开发者喜爱。在Java开发领域,iBatis作为数据访问层的解决方案,为数据库操作提供了强大的...
ibatis-dao-2.jar gggggggggggg
ibatis-common-2.jar...........
ibatis-sqlmap-2.jar 对数据库进行操作的jar包 很方便使用
ibatis-3-core-3.0.0.204 最新官方下载版
《深入解析iBatis-SQLMap 2》 在Java Web开发领域,iBatis作为一个优秀的持久层框架,因其灵活性和高效性而深受开发者喜爱。本文将深入探讨iBatis-SQLMap 2版本,主要关注`ibatis-sqlmap-2.jar.zip`这个压缩包中的...
《深入解析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基本配置---[环境搭建
本文将围绕"ibatis-3-core-3.0.0.227.z"这个压缩包,详细介绍其包含的元素以及相关的知识要点。 首先,"ibatis-3-core-3.0.0.227.jar"是iBatis的核心库文件,包含了iBatis框架的主要功能。这个JAR文件包含了所有...
ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园ibatis缓存介绍 - 勇泽 - 博客园
`ibatis-core-3.0.jar`是MyBatis的核心库文件,包含了MyBatis框架的主要功能。`org.apache.ibatis.annotations.Param`是MyBatis中的一个重要注解,用于处理方法参数映射。 `@Param`注解主要用于SQL查询中的动态参数...
iBATIS-SqlMaps-2-Tutorial_cniBATIS-SqlMaps-2-Tutorial_cn.pdf.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdfiBATIS-SqlMaps-2-Tutorial_cn.pdf
iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...