- 浏览: 1884541 次
- 性别:
- 来自: 合肥
文章分类
- 全部博客 (514)
- OPEN (41)
- WARN (33)
- EXPER (16)
- RESOURCE (7)
- TOOL (4)
- DWR (10)
- Struts1.x (10)
- Ibtais (18)
- MyEclipse (30)
- Sql Server (64)
- Tomcat (7)
- APACHE (4)
- JSP (18)
- SERVLET (6)
- ENGLISH (0)
- ECSide (8)
- JasperReports (7)
- JAVA (24)
- JS (42)
- XML (26)
- CVS (8)
- Mind (1)
- JQUERY (2)
- IBATIS (6)
- PROJECT (0)
- STRUTS2 (0)
- PROXOOL (0)
- SPRING (4)
- Hibernate (0)
- SSI (0)
- JBPM (11)
- FLEX (3)
- JSON (2)
- GWT (1)
- jeecms v3 (1)
- Flash (2)
- DATA (1)
- ORACLE (3)
- 查询oracle 中逗号分隔字符串中所有值 (1)
最新评论
-
小小西芹菜:
GoEasy web三步轻松实现web实时推送1. 引入goe ...
服务器推送技术 java -
kg_1997:
这个方法太棒了,可以不用to_date函数,实在是棒!!!
java/oracle日期处理 -
wodesunday:
:idea:
SQL的分段统计查询语句 -
wodesunday:
引用
SQL的分段统计查询语句 -
BlueSkator:
讲的有点浅,没有深入进去
tomcat需要的重新发布和重启服务器的几种情况
SqlSessionFactoryBuilder SqlSessionFactory build(Reader reader) SqlSessionFactory build(Reader reader, String environment) SqlSessionFactory build(Reader reader, Properties properties) SqlSessionFactory build(Reader reader, String env, Properties props) SqlSessionFactory build(Configuration config)
前四种方法前面已经叙述了,通过Reader接口读取sqlMapConfig.xml配置文件进行配置,注意properties加载顺序。基本流程如下:
String resource = "org/apache/ibatis/builder/MapperConfig.xml"; Reader reader = Resources.getResourceAsReader(resource); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(reader);
这里我们用到了Reader接口,在org.apache.ibatis.io包下,其主要接口为:
URL getResourceURL(String resource) URL getResourceURL(ClassLoader loader, String resource) InputStream getResourceAsStream(String resource) InputStream getResourceAsStream(ClassLoader loader, String resource) Properties getResourceAsProperties(String resource) Properties getResourceAsProperties(ClassLoader loader, String resource) Reader getResourceAsReader(String resource) Reader getResourceAsReader(ClassLoader loader, String resource) File getResourceAsFile(String resource) File getResourceAsFile(ClassLoader loader, String resource) InputStream getUrlAsStream(String urlString) Reader getUrlAsReader(String urlString) Properties getUrlAsProperties(String urlString) Class classForName(String className)
刚才提到最后一种build方法参数是Configation,具体可以这样使用:
DataSource dataSource = BaseDataTest.createBlogDataSource();
TransactionFactory transactionFactory = new JdbcTransactionFactory(); Environment environment = new Environment("development", transactionFactory, dataSource); Configuration configuration = new Configuration(environment); configuration.setLazyLoadingEnabled(true); configuration.setEnhancementEnabled(true); configuration.getTypeAliasRegistry().registerAlias(Blog.class); configuration.getTypeAliasRegistry().registerAlias(Post.class); configuration.getTypeAliasRegistry().registerAlias(Author.class); configuration.addMapper(BoundBlogMapper.class); configuration.addMapper(BoundAuthorMapper.class); SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(configuration);
SqlSessionFactory
主要配置一下三个属性
Transaction:是否将事务的范围定义为session,或者auto-commit。
Connection:是否让ibatis从datasource配置中获取连接,还是自己提供数据库连接。
Execution:是否重用PerparedStatement 和 批量操作
SqlSession openSession() SqlSession openSession(boolean autoCommit) SqlSession openSession(Connection connection) SqlSession openSession(ExecutorType execType) SqlSession openSession(ExecutorType execType, boolean autoCommit) SqlSession openSession(ExecutorType execType, Connection connection) Configuration getConfiguration();
默认的openSession()方法不带参数,将会默认启动以下配置:
启动事务(Not auto commit)
根据DataSource配置产生数据库连接Connection对象
不重用PreparedStatements 不启用批量操作
autoCommit 和 connection参数并不陌生,execType参数有如下三个值
ExecutorType.SIMPLE 为每条语句的执行创建一个PreparedStatement对象
ExecutorType.REUSE 重用PreparedStatement对象
ExecutorType.BATCH 批量执行
SqlSession
1、Statement Execution Methods
Object selectOne(String statement) List selectList(String statement) int insert(String statement) int update(String statement) int delete(String statement) Object selectOne(String statement, Object parameter) List selectList(String statement, Object parameter) int insert(String statement, Object parameter) int update(String statement, Object parameter) int delete(String statement, Object parameter) List selectList (String statement, Object parameter, RowBounds rowBounds) void select (String statement, Object parameter, ResultHandler handler) void select (String statement, Object parameter, RowBounds rowBounds, ResultHandler handler)
selectOne和selectList的区别在于selectOne只能返回一个结果,而在返回多个结果或者返回null时抛出异常
RwoBounds可以这样使用:
int offset = 100; int limit = 25; RowBounds rowBounds = new RowBounds(offset, limit);
ResultHandler可以自由控制数据集的每一行数据,需要继承以下接口
package org.apache.ibatis.executor.result; public interface ResultHandler { void handleResult(ResultContext context); } Transaction Control Methods void commit() void commit(boolean force) void rollback() void rollback(boolean force)
如果设置了auto commit那么这四个方法将没有效果
一般情况下不用使用rollback,ibatis会在没有调用commit的情况下自动rollback,不过还是rollback写一下的好,毕竟习惯了
保证session关闭
SqlSession session = sqlSessionFactory.openSession(); try { // following 3 lines pseudocod for “doing some work” session.insert(…); session.update(…); session.delete(…); session.commit(); } finally { session.close(); }
Using Mappers
接口:
T getMapper(Class type)
使用:
public class AuthorMapper { // (Author) selectOne(“selectAuthor”,5); Author selectAuthor(int id); // (List) selectList(“selectAuthors”) List selectAuthors(); // insert(“insertAuthor”, author) void insertAuthor(Author author); // updateAuthor(“updateAuhor”, author) void updateAuthor(Author author); // delete(“deleteAuthor”,5) void deleteAuthor(int id); }
Mapper Annotations
不喜欢使用annotations进行配置,简略列一下表格:
Annotation Target XML Equivalent
@CacheNamespace Class
@CacheNamespaceRef Class
@ConstructorArgs Method
@Arg Method
@TypeDiscriminator Method
@Case Method
@Results Method
@Result Method
@One Method
@Many Method
@Options Method Attribuates of mapped statements
@Insert
@Update
@Delete
@Select Method
@InsertProvider
@UpdateProvider
@DeleteProvider
@SelectProvider Method
@Param Parameter N/A
SelectBuilder
在java代码中创建sql语句,可以使用SelectBuilder来辅助:
public String selectBlogsSql() { BEGIN(); // Clears ThreadLocal variable SELECT("*"); FROM("BLOG"); return SQL(); } private String selectPersonSql() { BEGIN(); // Clears ThreadLocal variable SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME"); SELECT("P.LAST_NAME, P.CREATED_ON, P.UPDATED_ON"); FROM("PERSON P"); FROM("ACCOUNT A"); INNER_JOIN("DEPARTMENT D on D.ID = P.DEPARTMENT_ID"); INNER_JOIN("COMPANY C on D.COMPANY_ID = C.ID"); WHERE("P.ID = A.ID"); WHERE("P.FIRST_NAME like ?"); OR(); WHERE("P.LAST_NAME like ?"); GROUP_BY("P.ID"); HAVING("P.LAST_NAME like ?"); OR(); HAVING("P.FIRST_NAME like ?"); ORDER_BY("P.ID"); ORDER_BY("P.FULL_NAME"); return SQL(); }
等价的sql语句:
"SELECT P.ID, P.USERNAME, P.PASSWORD, P.FULL_NAME, " "P.LAST_NAME,P.CREATED_ON, P.UPDATED_ON " + "FROM PERSON P, ACCOUNT A " + "INNER JOIN DEPARTMENT D on D.ID = P.DEPARTMENT_ID " + "INNER JOIN COMPANY C on D.COMPANY_ID = C.ID " + "WHERE (P.ID = A.ID AND P.FIRST_NAME like ?) " + "OR (P.LAST_NAME like ?) " + "GROUP BY P.ID " + "HAVING (P.LAST_NAME like ?) " + "OR (P.FIRST_NAME like ?) " + "ORDER BY P.ID, P.FULL_NAME";
动态拼接sql:
private String selectPersonLike(Person p){ BEGIN(); // Clears ThreadLocal variable SELECT("P.ID, P.USERNAME, P.PASSWORD, P.FIRST_NAME, P.LAST_NAME"); FROM("PERSON P"); if (p.id != null) { WHERE("P.ID like #{id}"); } if (p.firstName != null) { WHERE("P.FIRST_NAME like #{firstName}"); } if (p.lastName != null) { WHERE("P.LAST_NAME like #{lastName}"); } ORDER_BY("P.LAST_NAME"); return SQL(); }
Method Description
BEGIN()/RESET() 重置ThreadLocal状态
SELECT(String) select 参数
FROM(String) from 表名
JOIN(String)
INNER_JOIN(String)
LEFT_OUTER_JOIN(String)
RIGHT_OUTER_JOIN(String) 表连接
WHERE(String) where子句
OR() or 子句
AND() and 子句
GROUP_BY() group by 子句
HAVING(String) having 子句
ORDER_BY(String) order by 子句
SQL() 返回拼接的sql语句
发表评论
-
There is no READABLE property named * in class 'java.lang.Integer'
2010-12-02 10:29 14070使用ibatis出现了下列问 ... -
关于ibatis中输入/输出各种类型的参数分析
2010-09-28 10:21 2155在ibatis,输入的参数对象常以parameterClass ... -
ibatis 返回新增id问题
2010-09-02 10:12 1807一般在处理ibatis新增的时候使用@@IDENTITY 来返 ... -
写在iBATIS3 GA之前-1000 words
2010-04-28 14:07 1068可以看到基本的架构没有变,唯一多的就是一个Mapper Ann ... -
写在iBATIS3 GA之前-API越来越象Hibernate
2010-04-28 14:06 1384Hibernate应该基本是这样,记得不是很清楚了: xml ... -
写在iBATIS3 GA之前-Cache
2010-04-28 14:05 1793缓存,也就是Cache 在iBATIS2中以其较粗的粒度而为 ... -
写在iBATIS3 GA之前-Dynamic SQL
2010-04-28 14:04 1614相比于iBATIS的大量难懂的动态标签,iBATIS3可谓巨大 ... -
ibatis 3 学习笔记 5
2010-04-28 10:05 2286原创 ibatis 3 学习笔记 5 收藏 动态sql语句 ... -
ibatis 学习笔记 4
2010-04-28 10:01 1714这篇实践一下一对一、一对多两种关系的映射操作,首先建立数据库 ... -
ibatis 学习笔记 3
2010-04-27 12:11 4774SQL Map XML Files ibatis最大的优点就 ... -
ibatis 3 学习笔记 2
2010-04-27 12:05 2527上篇简单调试了一个实 ... -
ibatis 3 学习笔记1
2010-04-27 12:00 1731Ibatis更新还真快!呵呵,看到csdn友博客,受益匪浅,转 ... -
IBatis简单实现(附主键自动生成)
2010-01-02 14:54 2061相对 Hibernate和Apache OJB等“一站式”OR ... -
ibatis 开发手册
2009-10-22 15:39 2254atis 开发指南 ibatis Quick ... -
iBATIS模糊查询的实现实例浅析
2009-10-22 11:41 1399iBATIS模糊查询的实现是如何的呢?让我们先看看例子,仿照J ... -
iBATIS动态查询的实现浅析
2009-10-22 11:37 1336iBATIS动态查询的实现主 ... -
iBATIS ResultMap基础浅析
2009-10-22 11:22 3180iBATIS ResultMap是我们学习iBATIS中非常重 ...
相关推荐
3.iBatis2学习笔记:单表映射 .doc 4.iBatis2学习笔记:SqlMap的配置总结(18条).doc 5.iBatis2学习笔记:入参和返回值的问题.doc 6.iBatis2学习笔记:一对多映射(双向).doc 7.iBatis2学习笔记:多对多映射(双向)...
ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记 ibatis学习笔记
IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得IBatis学习笔记以及使用心得
### ibatis教程学习笔记 #### 一、ibatis简介与特点 ibatis 是一个基于 Java 的持久层框架,它提供了一种将 SQL 映射到 Java 对象的方式,简化了 JDBC 的复杂操作。ibatis 通过 XML 配置文件或者注解的形式来描述 ...
Ibatis 是一款轻量级的Java持久层框架,它与Hibernate等ORM框架不同,Ibatis 提供了更加灵活的SQL映射机制,允许开发者直接编写自定义的SQL语句,而不像Hibernate那样进行全封装。这种设计使得Ibatis在处理复杂的SQL...
iBatis 3 学习笔记 iBatis 是一个基于 Java 的持久层框架,主要用于数据库交互。下面是 iBatis 3 的学习笔记,包括环境配置、Mapper 文件配置、POJO 类设计等内容。 一、环境配置 要使用 iBatis 3,需要在项目中...
3. 更新操作时返回受影响的行数,查询操作时返回单个对象或对象集合。 **Data Access Objects (DAO)** 是一个通用API层,封装了实体操作的细节,提供简单接口来操作数据,使得应用程序可以灵活地切换不同的数据存储...
### iBatis 学习笔记知识点总结 #### 一、iBatis 概念与特点 **1.1 iBatis 定义** - **iBatis** 是一个基于 Java 的开源持久层框架,它专注于 SQL 映射,提供了一种将对象与数据库交互过程中的 SQL 语句进行分离的...
在本篇“Spring3学习笔记(2)-集成ibatis3进行单元测试”中,我们将深入探讨如何在Spring3框架中整合Ibatis3,并利用它来进行单元测试。这个主题对于理解如何在实际项目中实现数据访问层的测试具有重要意义。在现代...
通过本文的学习笔记,我们可以了解到 iBatis 在简化数据库访问的同时提供了足够的灵活性。尽管 iBatis 相比 Hibernate 在自动化程度上略显不足,但对于需要高度定制 SQL 查询的场景来说,iBatis 的优势十分明显。...
这个压缩包集合了Ibatis的学习笔记、文档和相关资源,为想要深入理解和掌握Ibatis的人提供了一站式的自学材料。 Ibatis的核心概念是SQL Mapping,它允许开发者将SQL语句直接写在XML配置文件中,或者使用注解方式,...
这篇“ibatis学习笔记(一)”可能是博主对Ibatis基础概念、安装配置以及基本使用的介绍,让我们通过标签“源码”和“工具”来深入探讨Ibatis的相关知识。 首先,Ibatis是一个轻量级的Java ORM(对象关系映射)框架...
在提供的压缩包中,"Ibatis 学习笔记.docx"可能是对以上知识点的详细文档,包含了学习过程中的总结和例子,适合阅读理解。而"IbatisStudy"可能是一个示例项目,包含了一个简单的Ibatis应用场景,如用户管理模块,...
【ibatis学习资料及个人学习笔记】 Ibatis,作为一个轻量级的持久层框架,它在Java开发领域中占有重要地位。本资料包是针对Ibatis的学习资源集合,旨在帮助初学者快速掌握这一强大的数据库操作工具。Ibatis的核心...
### IBATIS学习笔记知识点详解 #### 一、IBATIS简介 iBatis是一个用于Java的数据持久化框架,类似于Hibernate、JDO和EJB等技术。它的主要特点是将对象映射为SQL语句,这使得开发人员可以更加灵活地控制SQL的执行,...