ibatis入门教程
2014-08-25 16:16
423 查看
1、本文通过几个简单的示例,实现ibatis的增删改查的功能。
2、构建数据库表,contact表,建表语句如下:(使用的是mysql数据库)
contact表:
Java代码
drop table if exists contact;
create table contact(
id int(10) not null auto_increment,
firstName varchar(20) ,
lastName varchar(20),
email varchar(20),
primary key(id)
);
insert into contact(firstName,lastName,email) values('tang','lj','tang@126.com');
insert into contact(firstName,lastName,email) values('li','lin','ll@126.com');
insert into contact(firstName,lastName,email) values('wang','lihong','lh@126.com');
insert into contact(firstName,lastName,email) values('cen','fen','cf@126.com');
3、构建相应的JavaBean
Contact.java
Java代码
package com.tonyj.pojo;
public class Contact {
private String firstName;
private String lastName;
private String email;
private int id;
//相应的getter和setter方法,构造方法
}
4、ibatis配置文件详解
SqlMapConfig.xml文件配置如下:
Java代码
<?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"/>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"/>
<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 resource="Contact.xml"/>
</sqlMapConfig>
1、<properties>元素,SQL Map配置文件拥有唯一的<properties>元素,用于在配置文件中使用标准的Java 属性文件(name=value)。这样做后,在属性文件中定义的属性可以作为变量在SQL Map配置文件激情包含的所有SQL Map映射文件中引用。
2、<setting>元素
maxRequests:同时执行SQL预计的最大线程数。
maxSessions:同一时间内活动的最大session数。
maxTransactions:同时进入SqlMapClient.startTransaction()的最大线程数。
cacheModelsEnabled:全局性地启用和禁用SqlMapClient的所有缓存model。
lazyLoadingEnabled:全局性地启用或禁用SqlMapClient的所有延迟加载。
enhancementEnabled:全局性地启用或禁用运行时字节码增强,以优化访问JavaBean属性的性能,同时优化延迟加载的性能。
useStatementNamespaces:如果启用本属性,必须使用全限定名来引用mapped statement。Mapped statement的全限定名由sql-map的名称和mapped-statement的名称合成。
3、<typeAlias>元素
<typeAlias>元素为一个通常较长的、全限定类名指定一个较短的别名。
<typeAlias alias="shortname" type="com.long.class.path.Class"/>
4、<transactionManager>元素
<transactionManager>元素包含三个事物管理器分别是,JDBC,JTA和EXTERNAL
JDBC:通过常用的Connection commit()和rollback()方法,让JDBC管理事务。
JTA:本事务管理器使用一个JTA全局事务,使用SQL Map的事务包括在更大的事务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。
EXTERNAL:这个配置可以自己管理事务。
5、<datasource>元素
<datasource>是<transactionManager>的一部分,为SQL Map数据源设置了一系列参数。目前SQL Map架构只提供了三个DataSourceFactory,也可以添加自己的实现。
SimpleDataSourceFactory:DataSource提供了一个基本的实现,适用于J2EE容器提供DataSource的情况。
DbcpDataSourceFactory:实现使用Jakarta DBCP(Database Connection Pool)的DataSource API提供连接池服务。适用于应用/Web容器不提供DataSource服务的情况,或执行一单独的应用。
JndiDataSourceFactory:在应用容器内部从JNDI Context中查找DataSource实现。当使用应用服务器,并且服务器提供了容器管理的连接池和相关DataSource实现的情况下,可以使用JndiDataSourceFactory。
6、<sqlMap>元素
<sqlMap>元素用于包括SQL Map映射文件和其他的SQL Map配置文件。每个SqlMapClient对象使用的所有SQL Map映射文件都要在此声明。映射文件作为stream resource从类路径或URL读入。
jdbc.properties配置文件
Java代码
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/vin
jdbc.userName=root
jdbc.password=sa
Contact.xml文件
Java代码
<?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 alias="Contact" type="com.tonyj.pojo.Contact"/>
<!-- ibatis查询操作 -->
<select id="getAll" resultClass="Contact">
select *
from contact
</select>
<!-- ibatis插入1 -->
<insert id="insert" parameterClass="Contact">
insert into contact(firstName,lastName,email)
values(#firstName#,#lastName#,#email#)
<selectKey resultClass="int" keyProperty="id">
select last_insert_id() as id
</selectKey>
</insert>
<!-- ibatis插入操作2 -->
<parameterMap class="Contact" id="insert-contact-parameter">
<parameter property="lastName"/>
<parameter property="firstName"/>
<parameter property="email"/>
</parameterMap>
<statement id="insertContact" parameterMap="insert-contact-parameter">
insert into contact(lastName,firstName,email) values (?,?,?);
</statement>
<!-- ibatis删除操作 -->
<delete id="deleteContactById" parameterClass="int">
delete from Contact where id=#id#
</delete>
<!-- ibatis更新操作 -->
<update id="updateById" parameterClass="int">
update Contact set lastName="tonyJ"
where id=#id#
</update>
<!-- ibatis根据id查询 -->
<resultMap class="Contact" id="result">
<result property="id" column="id"/>
<result property="firstName" column="firstName"/>
<result property="lastName" column="lastName"/>
<result property="email" column="email"/>
</resultMap>
<select id="getById" resultMap="result">
select * from contact where id=#id#
</select>
<!-- ibatis调用mysql存储过程 -->
<procedure id="storedInfo" resultClass="Contact">
{call showData()}
</procedure>
<!-- ibatis模糊查询 -->
<select id="selectByName" parameterClass="String" resultClass="Contact">
select *
from contact
where firstName like '%$firstName$%'
</select>
<!-- ibatis分页查询1 -->
<select id="getByPage" parameterClass="java.util.Map" resultClass="Contact">
select * from contact
<isParameterPresent>
<isNotNull property="orderById">
order by $orderById$
</isNotNull>
<isNotNull property="limitClauseStart">
limit $limitClauseStart$,$limitClauseCount$
</isNotNull>
</isParameterPresent>
</select>
<!--ibatis 分页查询2 -->
<select id="getByPage1" parameterClass="java.util.Map" resultClass="Contact">
select *
from contact
</select>
</sqlMap>
5、测试类如下:
IbatisExample.java如下:
Java代码
package com.tonyj.test;
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.tonyj.pojo.Contact;
public class IbatisExample {
public static void main(String[] args) throws Exception{
Reader reader=Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);
//查询
// System.out.println("All Contacts");
// List<Contact> contacts=(List<Contact>)sqlMap.queryForList("getAll",null);
// for(Contact c:contacts){
// System.out.println(" "+c.getId()+"-->"+c.getFirstName()+"-->"
// +c.getLastName()+"-->"+c.getEmail());
// }
//插入1
// System.out.println("*------insert Contact Table------------*");
// Contact contact=new Contact("Amit","Kumar","amit@yes.com");
// sqlMap.insert("insert",contact);
//插入2
System.out.println("*------insert Contact Table------------*");
Contact contact=new Contact("firstName","lastName","tang@yes.com");
sqlMap.insert("insertContact",contact);
//删除
// int i=sqlMap.delete("deleteContactById", 1);
// System.out.println("i="+i);
//更新
// sqlMap.update("updateById", 3);
//根据id查询
// Contact contact=(Contact) sqlMap.queryForObject("getById", new Integer(3));
// System.out.println(contact.toString());
//调用存储过程
// List<Contact> contacts=(List<Contact>)sqlMap.queryForList("storedInfo", null);
// Contact contact=null;
// for(Contact c:contacts){
// System.out.println(c.toString());
// }
//模糊查询
// List<Contact> contacts=(List<Contact>)sqlMap.queryForList("selectByName","t");
// Contact contact=null;
// for(Contact c:contacts){
// System.out.println(c.toString());
// }
//分页1
// Map<String,Object> map=new HashMap<String,Object>();
// map.put("orederById"," id asc");
// map.put("limitClauseStart",5);
// map.put("limitClauseCount",5);
// List<Contact> result=(List<Contact>)sqlMap.queryForList("getByPage", map);
// for(Contact c:result){
// System.out.println(c.toString());
// }
//分页2
// int skip=5;
// int max=4;
// String sql="getByPage1";
// @SuppressWarnings("unchecked")
// List<Contact> contacts=(List<Contact>)sqlMap.queryForList(sql,skip,max);
// for(Contact c:contacts){
// System.out.println(c.toString());
// }
}
}
对应Contact.xml文件,注释的指导,可以将注释除掉一个一个实现该功能。
在上面示例中调用存储过程的sql如下,先在mysql数据库中执行如下sql:
Java代码
--更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号(;)
--所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)
--这里将结束符号改成美元符号--$
delimiter $
create procedure vin.showData()
begin
select * from Contact;
end
$
2、构建数据库表,contact表,建表语句如下:(使用的是mysql数据库)
contact表:
Java代码
drop table if exists contact;
create table contact(
id int(10) not null auto_increment,
firstName varchar(20) ,
lastName varchar(20),
email varchar(20),
primary key(id)
);
insert into contact(firstName,lastName,email) values('tang','lj','tang@126.com');
insert into contact(firstName,lastName,email) values('li','lin','ll@126.com');
insert into contact(firstName,lastName,email) values('wang','lihong','lh@126.com');
insert into contact(firstName,lastName,email) values('cen','fen','cf@126.com');
3、构建相应的JavaBean
Contact.java
Java代码
package com.tonyj.pojo;
public class Contact {
private String firstName;
private String lastName;
private String email;
private int id;
//相应的getter和setter方法,构造方法
}
4、ibatis配置文件详解
SqlMapConfig.xml文件配置如下:
Java代码
<?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"/>
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="true"/>
<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 resource="Contact.xml"/>
</sqlMapConfig>
1、<properties>元素,SQL Map配置文件拥有唯一的<properties>元素,用于在配置文件中使用标准的Java 属性文件(name=value)。这样做后,在属性文件中定义的属性可以作为变量在SQL Map配置文件激情包含的所有SQL Map映射文件中引用。
2、<setting>元素
maxRequests:同时执行SQL预计的最大线程数。
maxSessions:同一时间内活动的最大session数。
maxTransactions:同时进入SqlMapClient.startTransaction()的最大线程数。
cacheModelsEnabled:全局性地启用和禁用SqlMapClient的所有缓存model。
lazyLoadingEnabled:全局性地启用或禁用SqlMapClient的所有延迟加载。
enhancementEnabled:全局性地启用或禁用运行时字节码增强,以优化访问JavaBean属性的性能,同时优化延迟加载的性能。
useStatementNamespaces:如果启用本属性,必须使用全限定名来引用mapped statement。Mapped statement的全限定名由sql-map的名称和mapped-statement的名称合成。
3、<typeAlias>元素
<typeAlias>元素为一个通常较长的、全限定类名指定一个较短的别名。
<typeAlias alias="shortname" type="com.long.class.path.Class"/>
4、<transactionManager>元素
<transactionManager>元素包含三个事物管理器分别是,JDBC,JTA和EXTERNAL
JDBC:通过常用的Connection commit()和rollback()方法,让JDBC管理事务。
JTA:本事务管理器使用一个JTA全局事务,使用SQL Map的事务包括在更大的事务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。
EXTERNAL:这个配置可以自己管理事务。
5、<datasource>元素
<datasource>是<transactionManager>的一部分,为SQL Map数据源设置了一系列参数。目前SQL Map架构只提供了三个DataSourceFactory,也可以添加自己的实现。
SimpleDataSourceFactory:DataSource提供了一个基本的实现,适用于J2EE容器提供DataSource的情况。
DbcpDataSourceFactory:实现使用Jakarta DBCP(Database Connection Pool)的DataSource API提供连接池服务。适用于应用/Web容器不提供DataSource服务的情况,或执行一单独的应用。
JndiDataSourceFactory:在应用容器内部从JNDI Context中查找DataSource实现。当使用应用服务器,并且服务器提供了容器管理的连接池和相关DataSource实现的情况下,可以使用JndiDataSourceFactory。
6、<sqlMap>元素
<sqlMap>元素用于包括SQL Map映射文件和其他的SQL Map配置文件。每个SqlMapClient对象使用的所有SQL Map映射文件都要在此声明。映射文件作为stream resource从类路径或URL读入。
jdbc.properties配置文件
Java代码
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/vin
jdbc.userName=root
jdbc.password=sa
Contact.xml文件
Java代码
<?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 alias="Contact" type="com.tonyj.pojo.Contact"/>
<!-- ibatis查询操作 -->
<select id="getAll" resultClass="Contact">
select *
from contact
</select>
<!-- ibatis插入1 -->
<insert id="insert" parameterClass="Contact">
insert into contact(firstName,lastName,email)
values(#firstName#,#lastName#,#email#)
<selectKey resultClass="int" keyProperty="id">
select last_insert_id() as id
</selectKey>
</insert>
<!-- ibatis插入操作2 -->
<parameterMap class="Contact" id="insert-contact-parameter">
<parameter property="lastName"/>
<parameter property="firstName"/>
<parameter property="email"/>
</parameterMap>
<statement id="insertContact" parameterMap="insert-contact-parameter">
insert into contact(lastName,firstName,email) values (?,?,?);
</statement>
<!-- ibatis删除操作 -->
<delete id="deleteContactById" parameterClass="int">
delete from Contact where id=#id#
</delete>
<!-- ibatis更新操作 -->
<update id="updateById" parameterClass="int">
update Contact set lastName="tonyJ"
where id=#id#
</update>
<!-- ibatis根据id查询 -->
<resultMap class="Contact" id="result">
<result property="id" column="id"/>
<result property="firstName" column="firstName"/>
<result property="lastName" column="lastName"/>
<result property="email" column="email"/>
</resultMap>
<select id="getById" resultMap="result">
select * from contact where id=#id#
</select>
<!-- ibatis调用mysql存储过程 -->
<procedure id="storedInfo" resultClass="Contact">
{call showData()}
</procedure>
<!-- ibatis模糊查询 -->
<select id="selectByName" parameterClass="String" resultClass="Contact">
select *
from contact
where firstName like '%$firstName$%'
</select>
<!-- ibatis分页查询1 -->
<select id="getByPage" parameterClass="java.util.Map" resultClass="Contact">
select * from contact
<isParameterPresent>
<isNotNull property="orderById">
order by $orderById$
</isNotNull>
<isNotNull property="limitClauseStart">
limit $limitClauseStart$,$limitClauseCount$
</isNotNull>
</isParameterPresent>
</select>
<!--ibatis 分页查询2 -->
<select id="getByPage1" parameterClass="java.util.Map" resultClass="Contact">
select *
from contact
</select>
</sqlMap>
5、测试类如下:
IbatisExample.java如下:
Java代码
package com.tonyj.test;
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
import com.tonyj.pojo.Contact;
public class IbatisExample {
public static void main(String[] args) throws Exception{
Reader reader=Resources.getResourceAsReader("SqlMapConfig.xml");
SqlMapClient sqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);
//查询
// System.out.println("All Contacts");
// List<Contact> contacts=(List<Contact>)sqlMap.queryForList("getAll",null);
// for(Contact c:contacts){
// System.out.println(" "+c.getId()+"-->"+c.getFirstName()+"-->"
// +c.getLastName()+"-->"+c.getEmail());
// }
//插入1
// System.out.println("*------insert Contact Table------------*");
// Contact contact=new Contact("Amit","Kumar","amit@yes.com");
// sqlMap.insert("insert",contact);
//插入2
System.out.println("*------insert Contact Table------------*");
Contact contact=new Contact("firstName","lastName","tang@yes.com");
sqlMap.insert("insertContact",contact);
//删除
// int i=sqlMap.delete("deleteContactById", 1);
// System.out.println("i="+i);
//更新
// sqlMap.update("updateById", 3);
//根据id查询
// Contact contact=(Contact) sqlMap.queryForObject("getById", new Integer(3));
// System.out.println(contact.toString());
//调用存储过程
// List<Contact> contacts=(List<Contact>)sqlMap.queryForList("storedInfo", null);
// Contact contact=null;
// for(Contact c:contacts){
// System.out.println(c.toString());
// }
//模糊查询
// List<Contact> contacts=(List<Contact>)sqlMap.queryForList("selectByName","t");
// Contact contact=null;
// for(Contact c:contacts){
// System.out.println(c.toString());
// }
//分页1
// Map<String,Object> map=new HashMap<String,Object>();
// map.put("orederById"," id asc");
// map.put("limitClauseStart",5);
// map.put("limitClauseCount",5);
// List<Contact> result=(List<Contact>)sqlMap.queryForList("getByPage", map);
// for(Contact c:result){
// System.out.println(c.toString());
// }
//分页2
// int skip=5;
// int max=4;
// String sql="getByPage1";
// @SuppressWarnings("unchecked")
// List<Contact> contacts=(List<Contact>)sqlMap.queryForList(sql,skip,max);
// for(Contact c:contacts){
// System.out.println(c.toString());
// }
}
}
对应Contact.xml文件,注释的指导,可以将注释除掉一个一个实现该功能。
在上面示例中调用存储过程的sql如下,先在mysql数据库中执行如下sql:
Java代码
--更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号(;)
--所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)
--这里将结束符号改成美元符号--$
delimiter $
create procedure vin.showData()
begin
select * from Contact;
end
$
相关文章推荐
- iBatis简明教程及快速入门
- iBATIS SQL Maps入门教程
- iBATIS教程之快速入门浅析
- 【转载】iBATIS教程之快速入门浅析
- iBATIS教程之快速入门浅析
- iBatis简明教程及快速入门
- iBatis介绍及入门教程
- iBATIS教程之快速入门浅析
- IBATIS介绍及入门教程
- IBatis 入门教程
- IBATIS介绍及入门教程
- 根据传智播客ibatis视频教程编写的入门例子
- iBATIS DAO入门基础教程
- iBATIS教程之快速入门浅析(转)
- iBATIS教程之入门浅析
- iBatis介绍及入门教程
- Ibatis简明及快速入门教程
- iBATIS SQL Maps 入门教程
- iBATIS教程之入门浅析
- IBatis 入门教程