- 浏览: 144475 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (129)
- framework (18)
- Java (25)
- web2.0 (7)
- Oracle (23)
- 框架师 (20)
- design pattern (5)
- j2ee (6)
- 日常问题收集 (51)
- linux (12)
- Oralce优化 (4)
- life (3)
- sqlplus (1)
- sql (2)
- C# (4)
- mysql (9)
- 拿来主义 (12)
- 标签 (0)
- ThinkPHP (1)
- python (1)
- mybatis (2)
- html5 (1)
- jquery (2)
- hadoop (3)
- git (1)
- struts2 (1)
- shiro (1)
- struts (1)
最新评论
-
xiao88xian:
...
jQuery常用经典技巧
最近做了些ibatis 的练习,以及spring对ibatis的整合。
对ibatis的配置文件的书写做以下总结:
(1)insert 返回的为插入的主键值,但必须在配置文件中加入<selectKey/>
如果主键值为String
<selectKey resultClass="string" keyProperty="id"> SELECT @@IDENTITY AS ID </selectKey>
如果主键值为Int型
<selectKey resultClass="java.lang.Integer" keyProperty="id" > SELECT @@IDENTITY AS ID </selectKey>
或者
<selectKey resultClass="int" keyProperty="id"> SELECT @@IDENTITY AS ID </selectKey>
注:@@IDENTITY只是SQL Server的写法,其他数据库也有相关的属性。
(2).Update,和Delete返回为修改数据影响的条数;
.SQL模糊查询的两种方法
(1).如果是模糊查询,在关键字传入前加‘%’; 例:String keyword=”%”+keyword+”%”;
(2).配置文件的写法: select name,sex from t_user where name like '%$name$%'
.在ibatis的bean.xml配置文件中,日期的转换
<![CDATA[ select count( 1 ) from dbu_window where ( ( DATE_FORMAT( '$dateStartTemp$', '%Y-%m-%d' ) >= f_start_date and DATE_FORMAT( '$dateStartTemp$', '%Y-%m-%d' ) <= f_end_date ) or ( DATE_FORMAT( '$dateEndTemp$', '%Y-%m-%d' ) >= f_start_date and DATE_FORMAT( '$dateEndTemp$', '%Y-%m-%d' ) <= f_end_date ) ) ]]>
.$sql$即程序预定义sql语句的应用
java代码:
String selSql = "select count(*) from `bbs_config`;"; sqlMapClient.queryForObject( "execSelSqlStr" , selSql );
bean.xml文件:
<select id="execSelSqlStr" resultClass="int" parameterClass="string"> <![CDATA[ $sql$ ]]> </select>
.ResultClass和ResultMap的区别
resultClass:可以把结果自动映射到相应的JAVA类中,但无法指定输出字段的类型,会对性能产生轻微的影响。
resultMap:可以预先定义resultMap元素,可以控制数据如何从结果集中取出,以及哪个属性匹配哪个字段,
parameterClass和parameterMap的区别
parameterClass属性值是JAVA类的全限定名,目的是限制输入参数的类型为指定的JAVA类,如果不指定,任何带有合适属性(get/set方法)的JAVA BEAN都可以作为输入参数
parameterMap:预先定义parameterMap的属性值,用于有次序的参数匹配JDBC符号
.“#”和“$”的区别
“#” 为占为符,#在是用prepareStatement的?插入参数,$是文本替换
“$”为直接替换,但为出现SQL引入问题和性能上的影响,like,limit和表名的引入必须使用“$”
.where 条件的组装
<isEqual> 比较属性值和静态值或另一个属性值是否相等
<idNotEqual> 比较属性值和静态值或另一个属性值是否不相等
<isGreaterThan> 比较属性值是否大于静态值或另一个属性值
<isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值
<isLessThan> 比较属性值是否小于静态值或另一个属性值
<isLessEqual> 比较属性值是否小于等于静态值或另一个属性值
<isNull> 检查属性是否为NULL
<isNotNull> 检查属性是否不为NULL
<isEmpty> 检查属性是否为NULL或空
<isNotEmpty> 检查属性是否不为NULL或不为空
<isPropertyAvailable> 检查是否存在该属性
<isNotPropertyAvailable> 检查是否不存在该属性
.<![CDATA[ ]]>的含义
用了特殊字符的SQL语句(比如>,<)不能直接使用。必须用<![CDATA[ ]]>
.ibatis自带缓存的运用
<cacheModel id=”person-cache” implementation=”LRU”> <flushInterval hours=”24”/> //可以用hours/minutes/second <flushOnExecute statement=”selectperson”/> //需要缓存的方法,可以为多个 <property name=”size” value=”1000”/> </cacheModel>
缓存策略:
LRU:最近最少使用
MEMORY:适用于没有统一的对象重用模式,property的属性值必须是STRONG,
SOFT,WEAK,这三个值分别对应于JVM不同内存reference类型。
WEAK,大多数情况下,WEAK是最佳选择,缺省值就是WEAK,它能大大提高常用查询的性能,对于当前不被使用的查询数据,将被清除
SOFT,在查询结果对象不被使用,可以减少内存不足的可能性
STRONG,对查询的结果一直保留在内存中,可以使用在数据量很少或者静态数据的时
FIFO:先进先出
OSCACHE:配置oscache.properties
.value的使用
假如没有必要写JAVA BEAN作为参数,可以直接使用基本类型,也可以直接传入参数值。如果是直接传入参数值就配置文件中必须写 #value#做为参数传入
.事务的处理
startTransacton();
commitTransaction();
rollbackTransaction();
批处理
如果有很多非查询的(insert/update/delete)语句要处理,为了减少网络通讯的流量,可以进行批处理
sqlMaClientp.startBatch(); sqlMapClient.endBatch();
.iterate在ibatis里的运用,List参数名后面一定要加“[]”,防止解析器简单的把List解析成String
<select id="getUserInfoByName" resultMap="userResult" parameterClass="java.util.List"> select * from tuserinfo where f_user_code in <iterate open="(" close=")" conjunction="," > <![CDATA[ #value[]# ]]> </iterate> </select>
.xmlResultName的运用 详细输出结果,直接把查存出来的结果映射成XML document
<select id="getUser" parameterClass="user" resultClass="xml" xmlResultName="person">
<![CDATA[
select name,sex from t_user where id = #id#
]]>
</select>
String xml= (String)sqlMapClient.queryForObject("getUser",user );
System.out.println(xml);
<?xml version="1.0" encoding="UTF-8"?>
<person>
<name>we are good !</name>
<sex>2</sex>
</person>
.分页功能的实现
). 用ibatis自带的分页功能,但是自带分页是把所有数据读入内存再分页的,所以必须自己覆写LimitSqlExecutor方法,
). 直接使用limit实现
.ibatis的IDE:http://ibatis.apache.org/ibator.html
.容易出错的地方 :
) 在parameterMap和resultMap中,字段数据类型是java.sql.Types类定义的常量名称。常用的数据类型包括BLOB,CHAR,CLOB,DATE,LONGVARBINARY, INTEGER,NULL,NUMERIC,TIME,TIMESTAMP和VARCHAR等。
) 对于数据表中NULLBALE的字段,必须在parameterMap和resultMap中指定字段的数据类型。
) 对于数据类型是DATE,CLOB或BLOB的字段,最好在parameterMap和resultMap中指定数据类型。
) 对于二进制类型的数据,可以将LONGVARBINARY映射成byte[]。
) 对于文本类型较大的数据,可以将CLOB映射成String。
) Java Bean必须拥有缺省的构造器(即无参数的构造器)。
) Java Bean最好实现Serializable接口,以备应用的进一步扩展。
.曾经写了一个ibatis动态查询的例子:
排序代码如下:
<dynamic prepend=" order by"> <isNotNull property="sortName"> <isNotEqual property="sortName" compareValue=""> <![CDATA[#sortName# ]]> </isNotEqual> </isNotNull> <isNotNull property="sortSequence"> <isNotEqual property="sortSequence" compareValue=""> <![CDATA[ #sortSequence# ]]> </isNotEqual> </isNotNull> </dynamic>
竟然无法排序,后来查了下资料,把“#”改成了“$”就可以了。
现总结下经验:#xxx# xxx代表是属性值,map里面的key或者是你的pojo对象里面的属性,ibatis会自动在它的外面加上引号,表现在sql语句是这样的 where xxx = 'xxx' ;而$xxxx$ 则是把xxxx作为字符串拼接到你的sql语句中,比如 order by topicId , 如果你不用$来拼接而用#的话,外面就会被加上引号,比如你的语句这样写 ... order by #xxx# (xxx就是你传进来的字符串topicId),ibatis 就会把他翻译成 order by 'topicId' 这样就报错了,用$的结果就是这样 order by topicId。
.ibatis通用sql语句可以单独定义如:
<sql id="whereTemplate"> <dynamic prepend="where"> <isNotNull prepend="and" property="id"> <![CDATA[ id = #id# ]]> </isNotNull> </dynamic> </sql> <select id="coreGetCountAll" resultClass="java.lang.Integer" parameterClass="coreNote"> <![CDATA[ SELECT COUNT( 1 ) FROM note ]]> <include refid="whereNoteTemplate" /> </select>
发表评论
-
MyBatis延迟加载
2013-05-26 20:15 848当你要使用one to one,many to one 就 ... -
mybatis 自身关联 映射
2013-05-22 14:48 3257使用mybatis的时候遇到关联问题。 可以参考如下 ... -
ThinkPHP学习笔记
2013-05-11 23:09 836from:http://www.thinkphp.cn/in ... -
解决subclipse报错:svn: Can't open file 'D:\project\Xxx.java.svn-base': 系统找不到指定的文件
2013-03-23 16:49 1957环境为:XP, eclipse, subclipse。 我想 ... -
hibernate4+spring3.1整合常见问题解决方法
2013-03-21 19:21 814由于目前网上很少有关于hibernate4+spring3. ... -
解决maven仓库中找不到ojdbc驱动的问题
2013-02-21 16:51 890maven仓库中的ojdbc下载需要oracle的官方授权, ... -
Ant-Ivy使用
2013-02-21 12:27 1078转至:http://blog.csdn.net/leon70 ... -
spring-ibatis-ext-plugin.1.0.0 扩展ibaits原生SQL(转载)
2012-04-01 16:25 1029转载至http://download.csdn.net/ ... -
ibatis初学001
2012-03-31 14:25 1098目录:一、iBatis简介二、iBatis基础操作演示三、如何 ... -
spring2.5+hibernate2.3整合 annotation
2011-12-31 21:48 941晚上花了点时间写了个spring+hibernate的整合 ... -
Hibernate学习总结001-hibernate概述
2011-10-06 21:35 838说到hiberna ... -
Spring-AOP底层原理-JDK动态代理---转载
2011-10-07 19:29 1657原文http://blog.zdnet.com.cn/html ... -
struts2_ognl表达式
2011-12-27 09:07 737OGNL是Object Graphic Navigati ... -
文件上传 Struts2 fileupload
2011-12-25 22:17 1496struts2文件上传下载非常的简单。 给我们提供了非 ... -
Action中result的各种转发类型——struts2_003
2012-03-31 14:25 1191<action name="hellow ... -
Action配置中的各项默认值——struts2_002
2011-12-23 12:36 1043<package name="it ... -
Action名称的搜索顺序——struts2_001
2011-12-23 12:33 7661.获得请求路径的URI,例如url是:http://se ...
相关推荐
springmvc+maven+ibatis+jetty的pom配置文件,平时书写太麻烦
1. **SqlMapConfig.xml**:这是iBatis的全局配置文件,包含了数据源、事务管理器和SqlSessionFactory的配置。 2. **Mapper XML文件**:每个Mapper文件对应一个Java接口,里面包含了具体的SQL语句和结果映射。 3. *...
为了提高开发效率和代码的可读性,iBATIS引入了一系列内置别名,用于简化配置文件中的全限定类名书写。本文将详细介绍iBATIS内置别名列表中所包含的各种类型及其具体含义。 #### 二、事务管理器别名 事务管理器是...
在ibatis中,可以通过XML配置文件或者注解的方式定义SQL语句。以下是一些常见的SQL语句类型及其编写方式: ##### 3.1 查询(SELECT) 查询操作是最常见的数据库操作之一,用于从数据库中检索数据。 ```xml ...
- **代码简化**:iBatis 通过 XML 配置文件来管理 SQL 语句,这使得开发者无需在 Java 代码中书写复杂的 JDBC 代码。 - **SQL 与 Java 分离**:iBatis 将 SQL 语句定义在外部 XML 文件中,这不仅提高了 SQL 的可读性...
Ibatis 的配置主要分为两部分:主配置文件(mybatis-config.xml)和映射文件(mapper.xml)。主配置文件包含了数据库连接信息、全局配置等;映射文件则包含具体的 SQL 语句和结果映射。 四、Mapper 映射文件 ...
1. SQL Map XML配置文件:这是Ibatis的核心,定义了SQL语句、参数映射和结果映射,使得SQL与业务代码解耦。 2. SqlSession接口:它是与数据库进行交互的主要接口,提供了执行SQL和管理事务的方法。 3. Mapper接口和...
2. **总配置文件**:即`SqlMapConfig.xml`,配置全局环境如事务管理、缓存策略等。 3. **关于每个实体的映射文件(map文件)**:用于定义实体类与数据库表之间的映射关系,通常以`.xml`格式存放。 **C. 属性文件** ...
MyBatis 的配置文件通常包含以下几个部分: - **settings**:全局配置,如缓存、事务管理器等。 - **mappers**:映射器的配置,可以是XML文件路径或者全限定类名。 - **typeAliases**:类型别名,简化Java类在XML...
2. **iBatis 概述** iBatis 是一个持久层框架,它简化了 SQL 与 Java 代码的交互,将 SQL 查询直接映射到 Java 对象,避免了传统的 JDBC 编程中大量手动的代码编写。 3. **整合目的** 整合 SpringMVC 和 iBatis ...
Step1-定义DomainModelStep2-书写SQLMapConfig文件Step3-定义出来DAOInterfaceStep4-书写DAO实现类Step5-书写iBATIS的配置档案Step6-配置iBATIS的DAOinterface与implementclassStep7-如何获取单个DomainObjectStep8-...
修改时,我们主要修改的是代表模型的实体对象、XML 配置文件中的 SQL 和/或配置文件的 ResultMap(很多时候是不需要的)。同时,SQL 和代码分离,我们不用在代码的 StringBuffer 的 append 方法之间寻找需要修改的 ...
但代价是必须要写 XML 配置文件,相对 Hibernate 还要写很多 SQL。 使用 iBATIS 我们可以做到代码和 SQL 的分离,只要 SQL 能够解决的问题,iBATIS 就能帮助我们较容易地解决,同时也使我们的项目对某一框架的依赖...
- **通过XML配置文件**:推荐使用类路径下的资源文件进行配置。 - 使用`Resources`工具类加载配置文件。 - 示例代码: ```java String resource = "org/mybatis/example/Configuration.xml"; Reader reader = ...
Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、E、电子、国际化、校验和调度功能。 1.3 Spring AOP 通过配置管理特性,Spring AOP 模块直接将面向方面的...
* Spring 上下文:是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。 * Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向...