已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ibatis学习笔记1、 搭建环境:(1)、创建ibatis_test项目。(2)、添加SQL2000驱动包msbase.jar、mssqlserver.jar、msutil.jar和ibatis-20.jar包。2、配置文件:(1)、JDBC连接属性文件:在src目录下添加SqlMperties属性文件,主要包括JDBC连接的主要信息,driver=,url=,username=,password=,也可以见JDBC连接的信息直接写到总配置文件中。(2)、配置每个实体的映射文件(map文件):如Student.xml文件,其主要是包括对实体进行CURD操作的SQL语句的映射。(3)、添加总配置文件:(参见SqlMapConfig.xml文件) 其主要功能是导入SqlMperties和Student.xml文件,进行统一管理3、创建相应的类:(1)、建立实体类Student.java类。(2)、建立管理类接口StudentDao,和实现类StudentDaoImpl4、测试CRUD操作:(1)、在StudentDaoImpl类中添加读取配置(2)、测试查询所有信息的方法queryAllStudent(),在Student.xml文件中配置SQL语句映射信息。例如:select * from t_student;在queryAllStudent()方法中使用sqlMapClient的queryForList()方法进行调用:public List queryAllStudent() List studntList = null;try studntList=sqlMapClient.queryForList(selectAllStudents); catch (SQLException e) / TODO Auto-generated catch blocke.printStackTrace();return studntList;4、ibatis使用HashMap传递SQL多个参数:虽然ibatai sql map可以配置多个参数,但sqlMap只能传入一个参数,我们有两种方式,一是把我们的参数封装成一个类,通过set/get取值的方式给sql map注入参数,二是通过hashMap(可以组合一些不是同一个pojo的参数有优势):范例: select sid,sname ,major,birth,score from t_student where sname like %$sname$% and score=#score# 注意:Map中的值key和类型要和SQL语句的的参数名称和类型一样。在如: Map map=new HashMap(); map.put(name, gaoxiang); key为参数名,value位数据List list = sqlMap.queryForList(getPeopleList, map);5、分页查询,使用page-paglib标签,提供每页分几行pagesize,和排除的记录结束位置pager.offset参数进行查询。建立PagerModel模型类如: select top $pagesize$ sid,sname ,major,birth,score from t_studentwhere sid not in (select top $end$ sid from t_student order by sid) order by sid 6、存储过程的使用:(1)、在SQL SERVER创建存储过程:create procedure pro_deletesid int,-学生编号msg nvarchar(100) output-返回信息as-定义变量,初始化变量declare count int;set count=0;set msg=操作成功;beginselect count = count(*) from t_student where sid =sid;if count=0beginset msg =记录不存在。;returnendelsebeginset msg =记录删除成功。;delete from t_student where sid = sid;returnendend -测试declare msg nvarchar(100)execute pro_delete 12,msg outputselect msg(2)、配置Students.xml文件: call pro_delete (?,?) 注意:jdbcType=VARCHAR的值不要使用小写的varchar不然可能会出错。中的class值也可以使用class=java.util.Map此时程序中传入的是Map实例。比如下面格式。但要注意属性的顺序和个数要和”?”的对应,否则会出错。 call pro_select (?,?) 注意:关于parameter中的属性:javaType表示Java程序中的类型, jdbcType表示数据库中的类型,最好将jdbcType全部设置为VARCHAR(不管数据库是什么类型),而且mode的值为IN或OUT,不要设置为INOUT,这样可能会导致一些错误。(3)、程序中调用存储过程:public String proDeleteStu() Student stu = new Student();stu.setSid(12);try sqlMapClient.queryForObject(pro_delete, stu); catch (SQLException e) e.printStackTrace();return stu.getMsg();7、SQL语句包含特殊字符:因为 SQL 语句是嵌在 XML 文档中的,因此有些特殊的字符不能直接使用,例如大于号和小于号()。幸运的是,解决的办法很简单,只需将包含特殊字符的 SQL 语句放在 XML 的CDATA区里面就可以了。例如: #value# 8、使用xmlResultName 直接输出XML文档:当直接把查询结果映射成 XML document 时,属性 xmlResultName 的值等于 XML document 根元素的名称。例如: 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# 上面的查询结果将产生一个 XML document,结构如下: 1 Clinton Begin 1900-01-01 89 1.77 9、在内嵌参数中指定数据类型可以用下面的语法: insert into PRODUCT (PRD_ID, PRD_DESCRIPTION) values (#id:NUMERIC#, #description:VARCHAR#); 10、复杂类型属性(即自定义类型的属性) 因为mapped statement知道如何装入合适的数据和Java类,通过将resultMap的property和相应的 mapped statement 联系起来,可以自动地给复杂类型(即用户创建的类)的属性赋值。复杂类型用以表示在数据库中相互关系为一对一,一对多的数据。对于一对多的数据关系,拥有复杂类型属性的类作为“多”的一方,而复杂属性本身则作为“一”的一方。考虑下面的例子: result property=“id” column=“PRD_ID” select * from PRODUCT where PRD_ID = #value# statement id=“getCategory” parameterClass=“it” rsultMap=“et-category-result” select * from CATEGORY where CAT_ID = #value# 上面的例子中,Product 对象拥有一个类型为 Category 的 category 属性。因为 category是复杂类型(用户定义的类型),JDBC 不知道如何给它赋值。通过将 category 属性值和另一个 mapped statement 联系起来,为 SQL Map 引擎如何给它赋值提供了足够的信息。通过执行“getProduct”,“get-product-result”Result Map 使用 PRD_CAT_ID 字段的值去调用“getCategory”。“get-category-result”Result Map将初始化一个 Category对象并赋值给它。然后整个 Category对象将赋值给 Product 的category属性。11、事务处理:缺省情况下,调用 SqlMapClient 对象的任意 executeXxxx()方法将缺省地自动COMMIT/ROLLBACK。这意味着每次调用 executeXxxx()方法都是一个独立的事务。这确实很简单,但对于需要在同一个事务中执行多个语句的情况(即只能同时成功或失败),并不适用。这正是事务处理要关心的事情。 如果您在使用 Global Transaction(在SQL Map 配置文件中设置),您可以使用自动提交并且可以得到在同一事务中执行的效果。但为了提高性能,最好是明确地划分事务的范围,因为这样做可以减少连接池的通讯流量和数据库连接的初始化。 SqlMapClient 对象拥有让您定义事务范围的方法。使用下面 SqlMapClient 类的方法,可以开始、提交和/或回退事务: public void startTransaction () throws SQLException public void commitTransaction () throws SQLException public void endTransaction () throws SQLException 开始一个事务,意味着您从连接池中得到一个连接,打开它并执行查询和更新 SQL 操作。使用事务处理的例子如下:private Reader reader = new Resources.getResourceAsReader( com/ibatis/example/sqlMapconfig.xml); private SqlMapClient sqlMap = XmlSqlMapBuilder.buildSqlMap(reader); public updateItemDescription (String itemId, String newDescription) throws SQLException try sqlMap.startTransaction (); Item item = (Item) sqlMap.queryForObject (getItem, itemId); item.setDescription (newDescription); sqlMap.update (updateItem, item); sqlMmitTransaction (); finally sqlMap.endTransaction (); 注意!事务不能嵌套。在调用 commit()或 rollback()之前,从同一线程多次调用.startTransaction,将引起抛出例外。换句话说,对于每个 SqlMap 实例,每个线程最多只能打开一个事务。 注意!SqlMapClient 事务处理使用 Java 的 ThreadLocal 保存事务对象。这意味着在处理事务时,每个调用 startTransaction()的线程,将得到一个唯一的 Connection 对象。将一个Connection 对象返回数据源(或关闭连接)唯一的方法是调用 commitTransaction()或rollbackTransaction()方法。否则,会用光连接池中的连接并导致死锁。12、使用SqlMapClient的queryForObject(“id名称”,参数名)时候,如果传入的参数类型和传出的类型一样时,不能使用如:UsersBean bean = new UsersBean();bean = (UsersBean) sqlMapClient. queryForObject(“selectUsers”,bean);,如果这样,此时执行完bean为null的。应该使用sqlMapClient. queryForObject(“selectUsers”,bean);此时的bean就是返回的bean。但如果传入参数类型和返回值类型不一样时是可以使用如下的:int usid=1;UsersBean bean = new UsersBean();bean = (UsersBean) sqlMapClient. queryForObject(“selectUsers”,usid);此时返回的bean为查询结果。13、$和#使用的区别$将你的变量括起来,iBATIS不会给这个变量做任何的处理,直接生成你要的SQL$中间的变量就是直接替换成值的#会根据变量的类型来进行替换比如articleTitle的类型是string,值是标题的时候$articleTitle$=标题#articleTitle#=标题 14、根据数据库某字段的值动态的将查询结果封装到对应的javabean中14、在插入前先执行查询值SELECT NVL(MAX(ORDER_),0)+1 FROM HRPM_DEF_ITEM WHEREPERF_DEF_ =#performanceDefinition.id#AND REGION_ = #region#iBATIS自动生成主键相关文章
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026农银汇理基金管理有限公司校园招聘3人备考题库及答案详解(各地真题)
- 医患关系真实案例反映
- 对大自然的热爱之情感悟作文(5篇)
- 员工绩效评估及反馈沟通模板
- 2025年垃圾回收试题及答案
- 2025年重点传染病防控知识培训试卷及答案
- 学术活动合规承诺书(7篇)
- 2025年危急值报告制度培训考核试题(附答案)
- 2025助产护理健康教育考试试题及答案
- 危重孕产妇救治试题2025年答案
- 车间生产意识培训
- 检验检测机构安全生产管理制度
- DG-TJ08-401-2025 公共厕所规划和设计标准
- 贵州省2025年高二学业水平合格性考试英语试卷及答案
- 万豪知识培训课件
- 无废医院创建培训课件
- 第三单元第1课时把握色彩规律课件冀美版初中美术七年级上册
- 铁路电务应急预案课件
- Unit1 Lesson2 What will I be课件(内嵌视频)冀教版(2024)八年级上册
- 《硅片生产工艺及控制》课件-第3章 硅片研磨
- 实施指南《G B-T36483-2018悬索桥用主缆平行钢丝索股》实施指南
评论
0/150
提交评论