文档章节

ibatis 简单使用

阿斯兰
 阿斯兰
发布于 2016/03/06 15:35
字数 1012
阅读 96
收藏 1

贴上项目结构

然后 SqlMapConfig.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig  
PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"  
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">  

<sqlMapConfig>
	<properties resource="jdbc.properties"/>
	<!-- 
		maxRequests:同时执行SQL预计的最大线程数。 
		maxSessions:同一时间内活动的最大session数。 
		maxTransactions:同时进入SqlMapClient.startTransaction()的最大线程数。 
		cacheModelsEnabled:全局性地启用和禁用SqlMapClient的所有缓存model。 
		lazyLoadingEnabled:全局性地启用或禁用SqlMapClient的所有延迟加载。 
		enhancementEnabled:全局性地启用或禁用运行时字节码增强,以优化访问JavaBean属性的性能,同时优化延迟加载的性能。 
		useStatementNamespaces:如果启用本属性,必须使用全限定名来引用mapped statement。Mapped statement的全限定名由sql-map的名称和mapped-statement的名称合成。 
	 -->
	<settings
		cacheModelsEnabled="true"
		lazyLoadingEnabled="true"
		maxRequests="32"
		maxSessions="10"
		maxTransactions="5"
	/>
	
	<transactionManager type="JDBC">
		<dataSource type="SIMPLE">
			 <property name="JDBC.Driver" value="${jdbc.driverClassName}"/>  
             <property name="JDBC.ConnectionURL" value="${jdbc.url}"/>  
             <property name="JDBC.Username" value="${jdbc.userName}"/>  
             <property name="JDBC.Password" value="${jdbc.password}"/>  
		</dataSource>
	</transactionManager>
	
	<!-- 
		<sqlMap>元素用于包括SQL Map映射文件和其他的SQL Map配置文件。每个SqlMapClient对象使用的所有SQL Map映射文件都要在此声明。映射文件作为stream resource从类路径或URL读入
	 -->
	<sqlMap resource="jnrj.xml"/>
</sqlMapConfig>

jdbc.properties文件

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8
jdbc.userName=root  
jdbc.password=

log4j 文件

log4j.rootLogger=INFO, Console
###### Console appender definition #######

# All outputs currently set to be a ConsoleAppender.
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{3}] %m%n
#log4j.appender.Console.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n


# 以下打印SQL语句 及所传参数
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG, A1

根据数据库创建对应实体文件,编写对应xml映射文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap  
PUBLIC "-//ibatis.apache.org//DTD SQL MAP 2.0//EN"  
"http://ibatis.apache.org/dtd/sql-map-2.dtd">

<sqlMap>
	<!-- <typeAlias>元素为一个通常较长的、全限定类名指定一个较短的别名 -->
	<typeAlias alias="Jnrj" type="vo.Jnrj" />

	<!-- 查询操作 -->
	<select id="getAll" resultClass="Jnrj">
		select * from jnrj limit 0,10
	</select>

	<select id="getAllMap" resultClass="hashmap">
		select * from jnrj
	</select>

	<!-- parameterClass 所指定的JAVA类型可以简写 -->
	<select id="getJnrjVo" parameterClass="string" resultClass="Jnrj">
	 	<![CDATA[
	 		select * from jnrj where username = #username#
	 	]]>
	</select>
	
	<select id="getJnrjWhere" parameterClass="hashmap" resultClass="Jnrj">
		select * from jnrj
		<dynamic prepend="where">
			<isNotEmpty prepend="and" property="username">
				username like #username#
			</isNotEmpty>
			<isNotEmpty prepend="and" property="account">
				account = #account#
			</isNotEmpty>
		</dynamic>
		order by $order$ desc
	</select>

	<sql id="insertSQL">
		insert into
		jnrj(account,username,senddate,sendtime,books,contents,nums,path)
		values(#account#,#username#,#senddate#,#sendtime#,#books#,#contents#,#nums#,#path#)
	</sql>
	
	<insert id="insertJnrj" parameterClass="Jnrj">
		<include refid="insertSQL" />
	</insert>
	
	<!-- 使用 include 包含sql ,结果不能正常返回插入的主键 -->
	<insert id="insertJnrjKey" parameterClass="Jnrj">
		insert into
		jnrj(account,username,senddate,sendtime,books,contents,nums,path)
		values(#account#,#username#,#senddate#,#sendtime#,#books#,#contents#,#nums#,#path#)
		<selectKey resultClass="int" keyProperty="id">
			select LAST_INSERT_ID() as value
		</selectKey>
	</insert>
</sqlMap>

测试代码:

package test;

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import vo.Jnrj;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

public class TestIbatis {

	static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

	@SuppressWarnings("unchecked")
	public static void main(String[] args) throws IOException, SQLException {
		Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
		SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
		
		//测试返回List SQL语句分页
//		List<Jnrj> list = sqlMap.queryForList("getAll");
//		for (Jnrj j : list) {
//			print(j);
//		}
		
		//测试返回Map,自带分页
//		List list = sqlMap.queryForList("getAllMap", 1, 10);
//		System.out.println(list.size());
		
		//测试返回实体集合
//		List<Jnrj> voJnrj =  sqlMap.queryForList("getJnrjVo","稀范。");
//		for(Jnrj j : voJnrj)
//			print(j);
		
		//测试插入
		Jnrj jnrj = new Jnrj();
		jnrj.setAccount("841359731");
		jnrj.setUsername("阿斯兰");
		jnrj.setSenddate(new Date());
		jnrj.setSendtime("12 00 pm");
		jnrj.setBooks("I LOVE 雪儿");
		jnrj.setContents("LOVE U");
		jnrj.setNums(10);
		jnrj.setPath("");
		
		//插入无主键返回
//		sqlMap.insert("insertJnrj", jnrj);
		
//		Object key = sqlMap.insert("insertJnrjKey", jnrj);
//		System.out.println(key != null ? key.toString() : "");
		
		//测试动态SQL
		Map<String,Object> param = new HashMap<String, Object>();
		param.put("username", "%阿斯兰%");
		param.put("account", 841359731);
		param.put("order", "id");
		
		List<Jnrj> jnrjList = sqlMap.queryForList("getJnrjWhere", param);
		for(Jnrj j : jnrjList)
			print(j);
	}

	private static void print(Jnrj j) {
		System.out.println(j.getId() + ":" + j.getAccount() + ":" + j.getUsername() + ":" + j.getBooks() + ":" + format.format(j.getSenddate()) + ":"
				+ j.getSendtime()+"|"+j.getContents());
	}

}
include 标签可以包含 SQL 片段

 一般情况下没问题,但是像上面插入一个返回主键一个不返回主键,将插入语句定义为 SQL 片段,在ID为 insertJnrjKey 的语句中用 include 语句引用 

<insert id="insertJnrjKey" parameterClass="Jnrj">
		<include refid="insertSQL"/>
		<selectKey resultClass="int" keyProperty="id">
			select LAST_INSERT_ID() as value
		</selectKey>
	</insert>

根据打印的日志信息 

select LAST_INSERT_ID() as value

会比插入语句先执行,返回主键key一直是 0。

映射文件中 # 和 $, #符号会进行预处理编译成了 问号,$ 类似直接拼接字符串

代码地址:

https://git.oschina.net/asilan/ibatis_demo.git


© 著作权归作者所有

共有 人打赏支持
阿斯兰
粉丝 9
博文 14
码字总数 2805
作品 0
巴中
程序员
私信 提问
加载中

评论(1)

i
itxx2016
推荐国内最流行的ibatis代码生成网站 --- fwjava.com
无需任何安装配置,直接在线生成,且十分规范好用.
现在,很多知名的互联网公司都在用它.
iBATIS 3 内的新特性

iBatis 已改名 MyBatis 简介: iBATIS 是一个项目,主要用于数据访问对象(data access object,DAO)和对象关系映射(object-relational mapping,ORM)。您可以使用它来轻松处理 Java™ 对...

红薯
2010/04/06
2.7K
6
凤凰涅槃:从 iBatis 到 MyBatis

简介: 本文主要讲述了 iBatis 2.x 和 MyBatis 3.0.x 的区别,以及从 iBatis 向 MyBatis 移植时需要注意的地方。通过对本文的学习,读者基本能够了解 MyBatis 有哪些方面的改进,并能够顺利使...

IBMdW
2011/06/24
1K
2
深入分析 iBATIS 框架之系统架构与映射原理

简介: iBATIS 通过 SQL Map 将 Java 对象映射成 SQL 语句和将结果集再转化成 Java 对象,与其他 ORM 框架相比,既解决了 Java 对象与输入参数和结果集的映射,又能够让用户方便的手写使用 ...

老盖
2010/11/11
2.2K
3
【转】我为什么选择 iBatis 而不是 Hibernate(对于正在选型的人的建议)

我在最初的选型的时候是打算选择 Hibernate 的,在研究的过程中发现了 iBatis,经过 分析比较之后我选择了 iBatis。现在我已经使用 iBatis 完成了一个中小型的项目。这个 项目在性能、可维护...

mj4738
2012/02/18
0
3
用NetBeans6.7.1开发iBATIS3程序

这真是一个艰难的探索,iBATIS也许是个不错的Framework,但是文档写的很不好,从头到尾都缺少一个完整的例子。如果习惯了微软MSDN和NetBeans.org上面的文章风格,你会觉得iBATIS的文章作者真...

长平狐
2012/08/28
145
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
4分钟前
0
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
8分钟前
0
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
16分钟前
0
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
21分钟前
0
0
Chocolatey 在Window搭建一个开发环境

在看了(利用 Chocolatey 快速在 Windows 下搭建一个开发环境)后,准备从零开始 一、准备工作 1、用管理员权限启动:powershell,执行错误请参考(PowerShell因为在此系统中禁止执行脚本的解...

近在咫尺远在天涯
34分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部