IBatis SQL 映射
--------------------
1. 特殊字符
<select id="getPersonsByAge" parameterClass=”int” resultClass="examples.domain.Person">
SELECT *
FROM PERSON
WHERE AGE
<![CDATA[ > ]]> #value#
</select>
2. SQL片段
<sql id="selectItem_fragment">
FROM items
WHERE parentid = 6
</sql>
<select id="selectItemCount" resultClass="int">
SELECT COUNT(*) AS total
<include refid="selectItem_fragment"/>
</select>
<select id="selectItems" resultClass="Item">
SELECT id, name
<include refid="selectItem_fragment"/>
</select>
3. 序列
<!—Oracle SEQUENCE Example -->
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">
<selectKey resultClass="int" >
SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
</selectKey>
insert into PRODUCT (PRD_ID,PRD_DESCRIPTION)
values (#id#,#description#)
</insert>
<!— Microsoft SQL Server IDENTITY Column Example -->
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product">
insert into PRODUCT (PRD_DESCRIPTION)
values (#description#)
<selectKey resultClass="int" >
SELECT @@IDENTITY AS ID
</selectKey>
</insert>
4. 存储过程
<parameterMap id="swapParameters" class="map" >
<parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
<parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
</parameterMap>
<procedure id="swapEmailAddresses" parameterMap="swapParameters" >
{call swap_email_address (?, ?)}
</procedure>
5. 模糊查询
SELECT * FROM PRODUCT WHERE PRD_DESCRIPTION LIKE '%$dog$%'
6. 配置Log4j日志
log4j.properties
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# SqlMap logging configuration...
#log4j.logger.com.ibatis=DEBUG
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
#log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
#log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
#log4j.logger.java.sql.Connection=DEBUG
#log4j.logger.java.sql.Statement=DEBUG
#log4j.logger.java.sql.PreparedStatement=DEBUG
#log4j.logger.java.sql.ResultSet=DEBUG
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
7. 动态SQL映射
<select id="dynamicGetAccountList"
cacheModel="account-cache"
resultMap="account-result" >
select * from ACCOUNT
<isGreaterThan prepend="and" property="id" compareValue="0">
where ACC_ID = #id#
</isGreaterThan>
order by ACC_LAST_NAME
</select>
上面的例子中,根据参数 bean“id”属性的不同情况,可创建两个可能的语句。如果参
数“id”大于 0,将创建下面的语句:
select * from ACCOUNT where ACC_ID = ?
或者,如果“id”参数小于等于 0,将创建下面的语句:
select * from ACCOUNT
8. 示例
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<settings
cacheModelsEnabled="true"
lazyLoadingEnabled="true"
enhancementEnabled="true"
errorTracingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"
/>
<transactionManager type="JDBC"> <!-- 定义了ibatis的事务管理器有3中(JDBC,JTA,EXTERNAL) -->
<dataSource type="SIMPLE"> <!-- type属性指定了数据源的链接类型,也有3种类型(SIMPLE,DBCP,JNDI) -->
<property name="JDBC.Driver" value="org.hsqldb.jdbcDriver" />
<property name="JDBC.ConnectionURL" value="jdbc:hsqldb:hsql://localhost/botoa" />
<property name="JDBC.Username" value="sa" />
<property name="JDBC.Password" value="" />
<property name="Pool.MaximumActiveConnections" value="10" /> <!-- 连接池维持的最大容量 -->
<property name="Pool.MaximumIdleConnections" value="5" /> <!-- 连接池允许挂起的最大连接 -->
<property name="Pool.MaximumCheckoutTime" value="120000" /> <!-- 连接被某个任务所允许占用的最大时间 -->
<property name="TimeToWait" value="500" /> <!-- 线程允许等待的最大时间 -->
</dataSource>
</transactionManager>
<sqlMap resource="cn/bisoft/java/webapp/pojo/userMap.xml" />
</sqlMapConfig>
userMap.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" "http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap>
<typeAlias alias="User" type="cn.bisoft.java.webapp.pojo.User" />
<select id="getUsers" parameterClass="java.lang.Integer"
resultClass="User">
select id, name, sex
from user
<dynamic prepend="WHERE">
<isParameterPresent prepend="AND">
id = #value#
</isParameterPresent>
</dynamic>
</select>
<select id="queryUserByCondition" parameterClass="java.lang.String"
resultClass="User">
<![CDATA[
select id,name,sex
from user
where name like '%$name$%'
]]>
</select>
<update id="updateUser" parameterClass="User">
<![CDATA[
update user set name=#name#,sex=#sex# where id=#id#
]]>
</update>
<insert id="insertUser" parameterClass="User">
insert into
user(name,sex) values(#name#,#sex#)
</insert>
<delete id="deleteUser" parameterClass="java.lang.Integer">
delete from user where
id=#value#
</delete>
</sqlMap>
UserDaoImpl.java
package cn.bisoft.java.webapp.dao.impl;
import java.sql.SQLException;
import java.util.List;
import cn.bisoft.java.webapp.dao.UserDAO;
import cn.bisoft.java.webapp.pojo.User;
import cn.bisoft.java.webapp.util.IbatisUtil;
public class UserDAOImpl implements UserDAO {
public void add(User user) {
try {
IbatisUtil.getClient().update("insertUser", user);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete(Integer id) {
try {
IbatisUtil.getClient().delete("deleteUser", id);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void update(User user) {
try {
IbatisUtil.getClient().update("updateUser", user);
} catch (SQLException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public List<User> queryAll() {
List<User> userList = null;
try {
userList = IbatisUtil.getClient().queryForList("getUsers");
} catch (SQLException e) {
e.printStackTrace();
}
for(User user : userList)
{
System.out.println(user);
}
return userList;
}
@SuppressWarnings("unchecked")
public List<User> queryByName(String name) {
List<User> userList = null;
try {
userList = IbatisUtil.getClient().queryForList("queryUserByCondition", name);
} catch (SQLException e) {
e.printStackTrace();
}
for(User user : userList)
{
System.out.println(user);
}
return userList;
}
public User query(Integer id) {
User user = null;
try {
user = (User) IbatisUtil.getClient().queryForObject("getUsers", id);
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(user);
return user;
}
}
User.java
package cn.bisoft.java.webapp.pojo;
public class User {
private Integer id;
private String name;
private Integer sex;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
@Override
public String toString() {
return "id=" + id + " name=" + name + " sex=" + sex;
}
}
分享到:
相关推荐
Ibatis 是一款轻量级的Java持久层框架,它提供了SQL映射文件和基于XML或注解的SQL语句配置,使得开发者可以更加灵活地控制SQL的编写,从而避免了传统的JDBC代码中的大量模板式代码。这个"ibatis SQL映射文件、DAO、...
Ibatis,作为一个轻量级的持久层框架,与传统的ORM(对象关系映射)工具相比,提供了更为灵活的SQL映射机制,使得开发者可以直接编写SQL语句,从而更好地掌控数据库查询性能。 该SQL生成器被设计成Web应用的形式,...
标题与描述概述的知识点主要集中在iBATIS框架的SQL映射技术上,特别是针对不同类型的输入参数如何在iBATIS中构建SQL语句。以下是对这些知识点的详细展开: ### iBATIS SQL映射技术概览 iBATIS是早期流行的Java持久...
SqlmapGenerator是一款专为IntelliJ IDEA用户设计的插件,其主要功能是自动生成iBatis SQL映射文件,从而极大地提高了开发效率。在Java Web开发中,iBatis作为一个优秀的持久层框架,常常被用来处理数据库操作,而...
4. **SQL Mapping映射文件**:在IBatis.NET中,SQL Mapping文件是XML格式的,它定义了SQL语句、存储过程以及它们与实体类之间的映射关系。通过这种方式,开发者可以在不修改业务代码的情况下,调整数据库查询逻辑。 ...
SqlMap.xml文件则是具体的SQL映射文件,它是iBATIS的核心,定义了SQL语句、结果映射、参数映射等。映射文件中的每个元素都代表了一个数据库操作,如查询、插入、更新或删除。例如,元素用于定义一个查询,它可以包含...
Ibatis的主要特点是通过XML或注解定义SQL映射文件,将SQL语句与Java对象绑定。例如,`<select>`标签用于定义查询语句,`<insert>`、`<update>`和`<delete>`分别对应增删改操作。在SQL映射文件中,可以使用动态SQL来...
《iBATIS-SqlMaps-2.pdf》可能是关于iBATIS SQL映射器的详细指南,它会介绍如何编写SQL Map配置文件,这些文件定义了数据库查询和事务处理。SQL Maps是iBATIS的核心部分,它们将数据库查询与Java对象绑定,使得...
Ibatis是一个基于Java的持久层框架,它支持定制化SQL、存储过程以及高级映射。Ibatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索,可以与简单的XML或注解进行配置和原始映射,将接口和Java的POJOs...
它的核心功能在于提供SQL映射文件,将数据库操作(增删查改)与业务逻辑代码解耦,提高代码的可读性和可维护性。SQL Maps是这些映射文件的集合,定义了如何将Java对象与数据库表之间的映射关系以及如何执行SQL语句。...
4. **Mapper XML文件**:解析SQL映射文件的结构,包括定义SQL语句、结果映射、参数映射等。 5. **动态SQL**:讲解如何使用iBATIS的动态元素来构建灵活的SQL语句,以应对复杂的查询需求。 6. **API使用**:介绍...
IBatis的核心功能包括动态SQL、事务管理以及SQL映射文件,这些在开发过程中经常需要手动编写,而使用CodeSmith生成器,可以自动化这个过程。通过定制模板,开发者可以定义如何根据数据模型自动生成Mapper接口、...
iBATIS SQL Maps 是一款优秀的数据持久层框架,它为Java开发者提供了强大的SQL映射功能,使得数据库操作变得更加简单和灵活。本入门教程将引导您逐步掌握iBATIS的核心概念和使用方法,让数据库交互不再成为开发过程...
iBATIS是一个轻量级的数据访问框架,它允许开发者将SQL语句直接写在XML配置文件中,从而实现对象与数据库的映射。 在开始使用iBATIS之前,首先理解SQL Map架构的灵活性至关重要。它并不限制数据库模型或对象模型的...
Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。在Ibatis中,`sql-map`和`sql-map-config`是两个重要的XML配置文件,...
在IT行业中,数据库操作是开发工作中的重要环节,而Ibatis作为一款优秀的持久层框架,为Java开发者提供了灵活的SQL映射功能,减轻了手动编写SQL和操作结果集的负担。SQLServer则是一款广泛使用的商业关系型数据库...