IBatis初次运用

刚进入第一家软件公司,因为公司使用struts2,spring,ibatis这三个框架,对IBatis没有接触过,故写了一些小的程序练手。

  IBatis是把实体类和sql语句之间建立了映射关系,这种策略可以允许开发人员自己来写合适的sql语句。也就是说IBatis还是需要自己动手写SQL语句,在DAO类就不用去写实现的方式。

  软件开发环境

  开发工具:MyEclipse 6.5,jdk1.6.0_24;

  数据库  :MySql5.5    (公司:oracle10g);

  JAR包  :ibatis-2.3.0.677.jar, mysql-connector-java-5.1.15-bin.jar;

  参考资料:ibatis学习(一)ibatis介绍以及用例       http://www.blogjava.net/freeman1984/archive/2007/12/07/166116.html

 学习实例:创建一个天体Astronomical object)以太空间坐标系的例子。

 (一) 建立一个java(web)  project 项目(建立好包名及类名),导入jar包。

(二)建立数据库,编写实体类。

//天体的实体类
public class AObject {

private String id; //天体的唯一标示ID
private String name; //天体的名称
private String type; //天体的类型

//天体的 以太空间坐标系 x,y,z
private float x; //x坐标
private float y; //y坐标
private float z; //z坐标

//set, get 方法
create database db_aobject;
use db_aobject;
create table tb_aobject(id varchar(50) primary key,
name varchar(50),
type varchar(50),
x float,
y float,
z float
);

(三)提供ibatis的配置文件(myibatis_config.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>

<!-- 数据源配置 starts -->
<transactionManager type="JDBC" commitRequired="false">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:mysql://127.0.0.1/db_aobject"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="123"/>
</dataSource>
</transactionManager>
<!-- 数据源配置 end -->


<!-- 导入实体sql配置 starts -->
<sqlMap resource="com/iokays/aobject/mapper/AObjectMapper.xml"/>
<!-- 导入实体sql配置 end -->

</sqlMapConfig>

(四)完成实体类(AObject)的sqlMapper映射配置(AObjectMapper.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的命名空间 -->
<sqlMap namespace = "AObject">
<!--设计 引用的实体类(com.iokays.aobject.pojo.AObject) 的别名(AObject) -->
<typeAlias alias = "AObject" type = "www.iokays.aobject.pojo.AObject"/>

<!-- 查询所有的的天体, 返回的集合属性类别为 AObject -->
<select id="selectAllAObject" resultClass = "AObject">
select * from tb_aobject
</select>

<!-- 根据id查询天体,返回的集合属性为AObject, 传入的参数类型为String -->
<select id = "selectAObject" resultClass = "AObject" parameterClass="String">
select * from tb_aobject where id = #id#
</select>

<!-- 向数据库插入一条记录 传入的参数类型:AObject -->
<insert id="insertAObject" parameterClass="AObject">
insert into tb_aobject values(#id#, #name#, #type#, #x#, #y#, #z#)
</insert>

<!-- 向表单删除一条记录 传入的参数类型:int -->
<delete id="deleteAObject" parameterClass="String">
delete from tb_aobject where id = #id#
</delete>

<!-- 更新表单的一条记录 传入的参数类型: AObject -->
<update id="updateAObject" parameterClass = "AObject">
update tb_aobject set name = #name#, type = #type#, x = #x#, y = #y#, z = #z# where id = #id#
</update>

</sqlMap>

(五)编写DAO类,关联myibatis_config.xml配置文件,形成映射关系。

public class AObjectDao {
//构造函数 获取myibatis_config.xml的配置信息到 sqlMapper 对象
public AObjectDao() throws IOException {
//读取myibatis_config.xml的配置文件
Reader reader = Resources.getResourceAsReader("myibatis_config.xml");
//加载到sqlMapClient对象
this.sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
//关闭文件流
reader.close();
}
public List selectAllAObject() throws Exception {

//调用myibaits_confing.xml id:selectAllAObject 的sql配置语句。
return this.sqlMapper.queryForList("selectAllAObject");
}
public AObject selectAObject(String id) throws Exception {
//调用myibaits_confing.xml id:selectAObject 的sql配置语句。
return (AObject)this.sqlMapper.queryForObject("selectAObject", id);
}
public void insertAObject(AObject aObject) throws Exception {
//调用myibaits_confing.xml id:insertAObject 的sql配置语句。
this.sqlMapper.insert("insertAObject", aObject);
}
public void deleteAObject(String id) throws Exception {
//调用myibaits_confing.xml id:deleteAObject 的sql配置语句。
this.sqlMapper.delete("deleteAObject", id);
}
public void updateAObject(AObject aObject) throws Exception {
//调用myibaits_confing.xml id:updateAObject 的sql配置语句。
this.sqlMapper.update("updateAObject", aObject);
}

//私有的 SqlMapClient 类 iBatis驱动
private SqlMapClient sqlMapper;
}

最后编写测试类

public class Test {

public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//建立 访问数据对象接口
AObjectDao dao = new AObjectDao();

//添加一条记录
AObject aObject = new AObject();
aObject.setId("M34-4602151-B");

aObject.setName("Earth"); //地球,没有设置中英文的问题。
aObject.setType("Planet"); //行星, 没有设置中英文的问题。

aObject.setX(12345); //以太坐标系x
aObject.setY(12346);
aObject.setZ(12347);

//执行添加操作
dao.insertAObject(aObject);

//执行查询操作
AObject _aObject = dao.selectAObject("M34-4602151-B");

//修改id:M34-4602151-B 的以太坐标系
aObject.setX(1);
aObject.setY(1);
aObject.setZ(1);
//执行修改操作
dao.updateAObject(aObject);

//执行删除操作
dao.deleteAObject("M34-4602151-B");

}
}

运行及调试

错误调试:

(1):Error parsing XML.  Cause: org.xml.sax.SAXParseException: Attribute "type" is required and must be specified for element type "typeAlias".

查看AObjectMapper.xml 文件 <typeAlias alias = "AObject" type = "www.iokays.aobject.pojo.AObject"/>

AstronomicalObject项目源码

原文地址:https://www.cnblogs.com/Leo_wl/p/2375019.html