iBATIS 一词来源于“internet”和“abatis”的组合,是一个由 Clinton Begin 在 2001 年发起的开放源代码项目。于 2010 年 6 月 16 号被谷歌托管,改名为 MyBatis。是一个基于 SQL 映射支持 JAVA 和 .NET 的持久层框架。
开发环境搭建
| 软件 |
版本 |
| DM 数据库 |
DM 8.0 及以上版本 |
| JDK |
JDK 8 |
| Eclipse |
2018-12 (4.10.0) |
| iBatis |
2.3.3 |
安装 DM 数据库
请参考 DM 数据库快速上手指南。
数据库安装过程中,请勾选创建 BOOKSHOP,DMHR 示例库,作为数据库模拟环境,如下图所示:

安装 Java 开发工具包–JDK
双击安装包进行安装,安装步骤简单,点击【下一步】安装即可。以安装目录 D:\java\jdk1.8.0_111 为例,安装完成如下图所示:

安装成功后需要配置 JDK 环境变量,即将 JDK 安装路径的 bin 路径复制到环境变量 path 里,如下图所示:

环境变量配置成功后,可使用 win+R 打开命令提示符,输入 java -version 命令,可以正常出现 JDK 版本号,即环境变量配置成功,如下图所示:

注意JDK 安装完成后还需配置环境变量,环境变量配置不正确会导致项目启动报错。
因环境变量配置错误导致的常见错误代码如下:
Unable to find a javac compiler; Perhaps JAVA_HOME does not point to the JDK;
|
安装集成开发环境 eclipse
正确配置 Java 环境变量后,eclipse 可正常打开。
开发示例
ibatis 的引入
- 准备所需的 jar 包。
所需jar包
- 新建项目 JAVA_iBatis,并导入项目所需 jar 包,如下图所示:
注意复制 jar 包到 lib 文件夹后,要选择所有 jar 包,鼠标右键,Build path-->Add to Build path。

- 在 src 源码目录下创建如下包名,完整项目目录结构如下图所示:

- 书写 ibatis 的主配置文件:
SqlMapConfig.xml,存放在 src 目录下。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"> <sqlMapConfig> <properties resource ="jdbc.properties" /> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" errorTracingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5" useStatementNamespaces="false" /> <transactionManager type="JDBC"> <dataSource type="SIMPLE" > <property name="JDBC.Driver" value="${jdbc.driver}"/> <property name="JDBC.ConnectionURL" value="${jdbc.url}"/> <property name="JDBC.Username" value="${jdbc.username}"/> <property name="JDBC.Password" value="${jdbc.password}"/> </dataSource> </transactionManager> <sqlMap resource="com/pojo/ProductCategory.xml"/> <sqlMap resource="com/pojo/BigData.xml"/> </sqlMapConfig>
|
- 添加 jdbc.properties 配置文件(主要配置 driver、url、username、password 等)。
修改数据库连接信息,只修改 jdbc.properties 里的字段即可。jdbc.properties 文件如下所示:
jdbc.driver=dm.jdbc.driver.DmDriver jdbc.url=jdbc:dm://localhost:5236 jdbc.username=SYSDBA jdbc.password=SYSDBA
|
基本绑定变量操作示例
基本操作使用的数据表为示例库中 Product 的 PRODUCT_CATEGORY 表,对应于数据库表添加实体类 PRODUCT_CATEGORY,其位置放于 com.pojo 下。
操作数据库对应的实体类
PRODUCT_CATEGORY.java 文件如下所示:
package com.pojo; public class PRODUCT_CATEGORY { private int PRODUCT_CATEGORYID; private String NAME; public int getPRODUCT_CATEGORYID() { return PRODUCT_CATEGORYID; } public void setPRODUCT_CATEGORYID(int pRODUCT_CATEGORYID) { PRODUCT_CATEGORYID = pRODUCT_CATEGORYID; } public String getNAME() { return NAME; } public void setNAME(String nAME) { NAME = nAME; } public PRODUCT_CATEGORY(int pRODUCT_CATEGORYID, String nAME) { super(); PRODUCT_CATEGORYID = pRODUCT_CATEGORYID; NAME = nAME; } public PRODUCT_CATEGORY() { super(); } }
|
集中管理 SQL 语句的配置文件 ProductCategory.xml
此配置文件由 SqlMapConfig.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="ProductCategory"> <typeAlias alias="ProductCategory" type="com.pojo.ProductCategory"/>
<resultMap class="com.pojo.ProductCategory" id="ProductCategory"> <result property="productCategoryId" column="PRODUCT_CATEGORYID"/> <result property="name" column="NAME"/> </resultMap>
<select id="selectProductCategoryById" parameterClass="java.lang.Integer" resultMap="ProductCategory"> select * from PRODUCTION.PRODUCT_CATEGORY WHERE PRODUCT_CATEGORYID = #productCategoryId#; </select>
<select id="selectCount" resultClass="java.lang.Integer"> elect count(*) from PRODUCTION.PRODUCT_CATEGORY; </select>
<select id="selectAll" resultMap="ProductCategory"> select * from PRODUCTION.PRODUCT_CATEGORY; </select>
<insert id="insertProductCategory" parameterClass="ProductCategory" > INSERT into PRODUCTION.PRODUCT_CATEGORY(name)VALUES ( #name# ); </insert>
<delete id="deleteById" parameterClass="int"> delete from PRODUCTION.PRODUCT_CATEGORY where PRODUCT_CATEGORYID = #productCategoryId#; </delete>
<update id="updateProductCategory" parameterClass="com.pojo.ProductCategory"> update PRODUCTION.PRODUCT_CATEGORY set NAME = #name# where PRODUCT_CATEGORYID = #productCategoryId# </update> </sqlMap>
|
测试类
TestProduct.java 文件如下所示:
package com.test; import java.io.IOException; import java.io.Reader; import java.sql.SQLException; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.ibatis.common.resources.Resources; import com.ibatis.sqlmap.client.SqlMapClient; import com.ibatis.sqlmap.client.SqlMapClientBuilder; import com.pojo.ProductCategory; public class TestProduct { SqlMapClient sqlMap = null; Reader reader = null; @Before public void before() { try { reader = Resources.getResourceAsReader("SqlMapConfig.xml"); sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); } catch (IOException e) { e.printStackTrace(); } } @Test public void testInstert(){ try { sqlMap.insert("insertProductCategory",new ProductCategory(null, "物理")); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testUpdate(){ ProductCategory productCategory; try { productCategory = (ProductCategory) sqlMap.queryForObject("selectProductCategoryById",4); productCategory.setName("英语2"); sqlMap.update("updateProductCategory", productCategory); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testSelectPersonById(){ ProductCategory productCategory; try { productCategory = (ProductCategory) sqlMap.queryForObject("selectProductCategoryById",4); System.out.println(productCategory); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testSelectAll(){ List<ProductCategory> list; try { list = sqlMap.queryForList("selectAll"); for(ProductCategory p: list){ System.out.println(p); } } catch (SQLException e) { e.printStackTrace(); } } @Test public void testDelete(){ try { sqlMap.delete("deleteById",5); } catch (SQLException e) { e.printStackTrace(); } }
@After public void after() { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } public static void main(String[] args) { TestProduct test = new TestProduct(); test.before(); test.testInstert(); test.testUpdate(); test.testSelectPersonById(); test.testSelectAll(); test.testDelete(); } }
|
运行后控制台截图如下所示:

运行后数据库表截图如下所示:

大字段操作示例
- 创建需要操作的含大字段类型的数据表。
CREATE TABLE "PRODUCTION"."TEST_BIG_DATE" ( "ID" INT IDENTITY(1, 1) NOT NULL, "PHOTO" IMAGE, "DESCRIBE" BLOB, "TXT" CLOB, NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "BOOKSHOP", CLUSTERBTR) ;
|
- 在 D 盘根目录下,创建
DM8 特点.jpg、达梦产品简介.txt 两个文件,作为大字段存储,如下图所示:

操作数据库对应的实体类
BigData.java 文件如下所示:
package com.pojo;
public class BigData { private Long id; private byte[] photo; private byte[] describe; private String txt; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public byte[] getPhoto() { return photo; } public void setPhoto(byte[] photo) { this.photo = photo; } public byte[] get 「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」 【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
|