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项目源码
作者: Leo_wl
出处: http://www.cnblogs.com/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息