iBATIS介绍.doc_第1页
iBATIS介绍.doc_第2页
iBATIS介绍.doc_第3页
iBATIS介绍.doc_第4页
iBATIS介绍.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

介绍iBATIS是以SQL为中心的持久化层框架。能支持懒加载、关联查询、继承等特性。iBATIS不同于一般的OR映射框架。OR映射框架,将数据库表、字段等映射到类、属性,那是一种元数据(meta-data)映射。iBATIS则是将SQL查询的参数和结果集映射到类。所以,iBATIS做的是SQL Mapping的工作。它把SQL语句看成输入以及输出,结果集就是输出,而where后面的条件参数则是输入。iBATIS能将输入的普通POJO对象、Map、XML等映射到SQL的条件参数上,同时也可以将查询结果映射到普通POJO对象(集合)、Map、XML等上面。iBATIS使用xml文件来映射这些输入以及输出。简单示例基于ibatis-77版本。1、 创建新的项目,并引入jar包a) ibatis-77.jarb) mysql驱动2、 在类路径中提供ibatis的配置文件:sqlMapConfig.xml 3、创建实体类:User.javapackage com.bjsxt.crm.model;public class User private int id;private String username;private String password;public int getId() return id;public void setId(int id) this.id = id;public String getPassword() return password;public void setPassword(String password) this.password = password;public String getUsername() return username;public void setUsername(String username) this.username = username;4、创建针对User对象的CRUD的xml映射配置:User.xml select * from t_user select * from t_user where id=#id# insert into t_user values ( null,#username#,#password# ) update t_user set username = #username#,password=#password# where id=#id# delete from t_user where id=#id# 5、创建测试程序测试:package com.bjsxt.crm.model;import java.io.Reader;import java.util.Iterator;import java.util.List;import mon.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;/* * 最简单的形式! * author Lee * */public class UserTest /* * param args */public static void main(String args) throws Exception/从配置文件中得到SqlMapClient对象 Reader reader = Resources.getResourceAsReader(sqlMapConfig.xml);SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);reader.close();/创建用户数据for(int i=0; i10; i+)User user = new User();user.setUsername(用户+i);user.setPassword(密码+i);sqlMapper.insert(insertUser, user);/查询用户数据List users = sqlMapper.queryForList(selectAllUsers);for (Iterator iter = users.iterator(); iter.hasNext();) User user = (User) iter.next();System.out.println(user.getUsername();/查询特定用户的数据User user = (User)sqlMapper.queryForObject(selectUser, 1);System.out.println(用户【id=+1+】的名称是:+user.getUsername();/更新用户的信息user = new User();user.setId(3);user.setUsername(更改之后的用户名称);user.setPassword(密码被更改);sqlMapper.update(updateUser, user);/删除用户的信息sqlMapper.delete(deleteUser, 6);SqlMapClient对象这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作。这个类是我们使用iBATIS的最主要的类。它是线程安全的。通常,将它定义为单例。(与hibernate中sessionFactory的定义类似)。如:import java.io.Reader;import mon.resources.Resources;import com.ibatis.sqlmap.client.SqlMapClient;import com.ibatis.sqlmap.client.SqlMapClientBuilder;public class IbatisSQLMapConfig private static final SqlMapClient sqlMap; /在静态区块中初试化返回 static try /声明配置文件的名称(映射文件被定义在其中) String resource = sql_map_config.xml; /利用工具类Resources来读取到配置文件 Reader reader = Resources.getResourceAsReader(resource); /创建SqlMapClient接口的变量实例 sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader); catch (Exception e) e.printStackTrace(); throw new RuntimeException( Error initializing MyAppSqlConfig class. Cause: + e); public static SqlMapClient getSqlMapInstance() /提供静态方法返回静态区块中得到的SqlMapClient return sqlMap; How To如何获得刚插入记录的自增长ID值? insert into t_user values ( null,#username#,#password# ) SELECT IDENTITY AS ID User user = new User();user.setUsername(张三);user.setPassword(张三密码);/如果主键是自动生成的,则其返回值可以通过标签来设置/如果不通过标签来设置,则返回值为空!/中的keyProperty,是指定User中的id属性,当调用结束之后,/user对象的id值和insert方法的返回值都是这条记录的ID值!Object obj = sqlMapper.insert(insertUser, user);parameterClass的使用 insert into t_user values ( null,#username#,#password# ) SELECT IDENTITY AS ID insert into t_user values ( null,#username#,#password# ) SELECT IDENTITY AS ID insertUser使用了parameterClass,所以必需传入User类型的对象User user = new User();user.setUsername(张三);user.setPassword(张三密码);/传递进去的对象,必须是User类型Object obj = sqlMapper.insert(insertUser, user);insertUser2没有使用parameterClass,所以可以传入任意具有相应属性值的对象JustAnObject anobj = new JustAnObject();anobj.setUsername(用户名);anobj.setPassword(用户密码);/如果没有指定parameterClass属性,则任何一个具有相应属性值/的对象都可以被传递进去Object obj = sqlMapper.insert(insertUser2, anobj);parameterMap的使用 insert into t_user values ( null,?,? ) SELECT IDENTITY AS ID parameterMap用于传入参数,以便匹配SQL语句中的?号User user = new User();user.setUsername(张三dd);user.setPassword(张三密码dd);Object obj = sqlMapper.insert(insertUser, user);利用parameterMap,可以定义参数对象的属性如何映射到SQL查询语句的动态参数上,注意parameterMap中标签的先后顺序不能颠倒!如何将查询结果映射到不同的对象?(resultClass的使用) select username as prop1, password as prop2 from t_user where id=#value# /查找t_user表,将其结果映射到一个属性名不同的对象中!OtherObject obj = (OtherObject)sqlMapper.queryForObject(selectUserForOtherObject, 1);System.out.println(obj.getProp1()+,+obj.getProp2();如何将查询结果集映射到不同的对象?(resultMap的基本使用) select username, password from t_user where id=#value# /查找t_user表,将其结果映射到一个属性名不同的对象中!OtherObject obj = (OtherObject)sqlMapper.queryForObject(selectUserForOtherObject2, 17);System.out.println(obj.getProp1()+,+obj.getProp2();如何将查询结果集映射为xml格式的数据? select * from t_user where id=#value# select * from t_user /查找t_user表,将其结果映射到xml!/返回值是xml形式的字符串Object obj = (Object)sqlMapper.queryForObject(selectXmlData, 1);System.out.println(obj);/查找t_user表,将其结果映射到xml!List list = (List)sqlMapper.queryForList(selectXmlDatas);System.out.println(list);如何用Map类型的对象作为传入参数? insert into t_user values ( null,#username#,#password# ) Map user = new TreeMap();user.put(username, Map用户);user.put(password, Map用户密码);sqlMapper.insert(insertUser,user);如何将查询结果集的元素转换为Map类型的对象? select * from t_user List list = (List)sqlMapper.queryForList(selectMapUsers);System.out.println(list);for (Iterator iter = list.iterator(); iter.hasNext();) Map map = (Map) iter.next();/可在此输出map的数据关联数据的存取(一对多,从多查询一)学生和班级Student类public class Student private int id;private String name;private String sex;private Classes classes;public int getId() return id;public void setId(int id) this.id = id;public String getName() return name;public void setName(String name) = name;public String getSex() return sex;public void setSex(String sex) this.sex = sex;public Classes getClasses() return classes;public void setClasses(Classes classes) this.classes = classes;Classes类public class Classes private int id;private String cname;public int getId() return id;public void setId(int id) this.id = id;public String getCname() return cname;public void setCname(String cname) ame = cname;第一种方法,通过命别名Student的xml文件insert into t_student values (null,#name#,#sex#,#classes.id#),s.sex,s.cid as classes.id,ame as amefrom t_student s,t_classes cwhere s.cid = c.id and s.id = #id#Classes的xml文件insert into t_classes values (null,#cname#)select identity as id测试public class ClassesAnStudentTest extends TestCase public void testSaveClassesAndStudent() throws Exception/从配置文件中得到SqlMapClient对象 Reader reader = Resources.getResourceAsReader(sqlMapConfig.xml);SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);reader.close();Classes c1 = new Classes();c1.setCname(测试班级);sqlMapper.insert(saveClasses, c1);Student s1 = new Student();s1.setName(学生+new Random().nextInt(9999);s1.setSex(男);s1.setClasses(c1);sqlMapper.insert(saveStudent, s1);public void testFindStudent() throws Exception/从配置文件中得到SqlMapClient对象 Reader reader = Resources.getResourceAsReader(sqlMapConfig.xml);SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);reader.close();Student s = (Student)sqlMapper.queryForObject(findStudent, 1);System.out.println(s.getName()+属于班级:+s.getClasses().getCname();第二种方法,通过第二条查询语句Classes的xml文件insert into t_classes values (null,#cname#)select identity as idselect * from t_classes where id = #cid#Student的xml文件insert into t_student values (null,#name#,#sex#,#classes.id#)select*from t_studentwhere id = #id#关联数据的存取(一对多,从一查询多)Student类public class Student private int id;private String name;private String sex;private Classes classes;Classes类public class Classes private int id;private String cname;private Set students;Student的xml文件insert into t_student values (null,#name#,#sex#,#classes.id#)select*from t_studentwhere id = #id#select * from t_student where cid = #cid#Classes的xml文件insert into t_classes values (null,#cname#)select identity as idselect * from t_classes where id = #cid#select * from t_classes where id = #id#关联数据的存取(双向)启用懒加载,双向中用List,不用Set,否则会有异常Student类public class Student private int id;private String name;private String sex;private Classes classes;Classes类public class Classes private int id;private String cname;private List students;iBATIS主配置文件,启用懒加载 Student的xml文件insert into t_student values (null,#name#,#sex#,#classes.id#)select*from t_studentwhere id = #id#select * from t_student where cid = #cid#Classes的xml文件insert into t_classes values (null,#cname#)select identity as id!- select * from t_classes where id = #cid

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论