配色: 字号:
Ibatis中文教程
2015-09-07 | 阅:  转:  |  分享 
  
显示数据库所有数据

希望能给大家带来帮助

iBatis是个像Hibernate,JDO,EJB一类的数据持久框架,它能将对象映射为SQL语句.它是个轻量级的框架并且持久性API适合持久化POJO.iBatis也与Hibernate,JDO不同,因为它使用存储过程和现有的SQL来处理数据库.

本节我们将向你讲述如何配置iBatis来运行一个小型程序.既然一次性将所有知识全部解释很难,我们索性把本教程分为几个单独的例子来陈述.该例是关于如何从数据库读取数据并将结果显示在你的命令提示符上.在第二个例子中你将学习如何添加更多的数据到数据库中,在此之后的第三个例子将会向你展示如何通过iBatis从记录中删除数据.

现在的第一个例子将会向你展示如何从数据库中读取记录,我们需要一个数据库来执行查询,所以我们使用MySQL5.0作为这个例子的数据库.

这里我们将要检索一些人的contact的信息,contact的表结构给出如下:

DROPTABLEIFEXISTS`contact`;

CREATETABLE`contact`(

`id`int(11)NOTNULLauto_increment,

`firstName`varchar(20)defaultNULL,

`lastName`varchar(20)defaultNULL,

`email`varchar(20)defaultNULL,

PRIMARYKEY(`id`)

);

根据Contact表我们需要创建一个POJO类,在我们的例子中,数据库vin有一个表Contact,包括四个字段:

id

firstName

lastName

email

Contact.java

publicclassContact{

privateStringfirstName;

privateStringlastName;

privateStringemail;

privateintid;



publicContact(){}



publicContact(

StringfirstName,

StringlastName,

Stringemail){

this.firstName=firstName;

this.lastName=lastName;

this.email=email;

}



publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetFirstName(){

returnfirstName;

}

publicvoidsetFirstName(StringfirstName){

this.firstName=firstName;

}

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetLastName(){

returnlastName;

}

publicvoidsetLastName(StringlastName){

this.lastName=lastName;

}

}

为了映射配置我们需要创建SqlMapConfig.xml来指定如下信息:

针对映射语句的命名空间前缀

我们的数据库将使用JDBC来进行访问

针对MySQL的JDBC驱动为"com.mysql.jdbc.Driver"

连接URL为"jdbc:mysql://192.168.10.112:3306/vin"

用户名与密码分别为"root"和"root"

我们的SQL语句描述在"Contact.xml"

SqlMapConfig.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMapConfig2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">














value="jdbc:mysql://192.168.10.112:3306/vin"/>













映射文件在下面给出,它主要负责为我们的程序执行SQL查询.Contact.xml的代码如下:




PUBLIC"-//ibatis.apache.org//DTDSQLMap2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-2.dtd">









selectfromcontact





现在为了显示数据库中的数据我们需要创建一个类----IbatisExample,它从SqlMapConfig.xml中读取配置并在你的控制台输出所有数据.IbatisExample.java的代码如下:

importcom.ibatis.common.resources.Resources;

importcom.ibatis.sqlmap.client.SqlMapClient;

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

importjava.io.;

importjava.sql.SQLException;

importjava.util.;



publicclassIbatisExample{

publicstaticvoidmain(String[]args)

throwsIOException,SQLException{

Readerreader=Resources.getResourceAsReader("SqlMapConfig.xml");

SqlMapClientsqlMap=

SqlMapClientBuilder.buildSqlMapClient(reader);

//Outputallcontacts

System.out.println("AllContacts");

Listcontacts=(List)

sqlMap.queryForList("Contact.getAll",null);

Contactcontact=null;

for(Contactc:contacts){

System.out.print(""+c.getId());

System.out.print(""+c.getFirstName());

System.out.print(""+c.getLastName());

System.out.print(""+c.getEmail());

contact=c;

System.out.println("");

}

}

}

为了运行该例,你需要遵循如下步骤:

在你的MySQL数据库中创建表Contact

下载iBatis的JAR文件(ibatis-common-2.jar,ibatis-dao-2.jar,ibatis-sqlmap-2.jar),并将其放置在你的lib目录中

设置类路径

创建Contact.java将其编译

创建Contact.java

创建SqlMapConfig.xml

创建IbatisExample.java并将其编译

执行IbatisExample文件

输出:

你的命令提示符应该有像这样的输出:







2.向数据库插入数据

iBatis最棒的特点就是它的简洁,这也是唯一令它在任何数据库程序中更容易使用的原因.iBatis使得通过Java或者任何其它的Microsoft的程序来使用数据库变得非常简单.本章我们将会通过一个例子向你介绍如何向数据库插入一行数据.我们使用MySQL作为本例的数据库,和我们上一章中使用的是一样的.这是"Contact"表和我们上一章使用过的两个文件:"Contact.java"和"SqlMapConfig.xml"

Contact.java

publicclassContact{

privateStringfirstName;

privateStringlastName;

privateStringemail;

privateintid;



publicContact(){}



publicContact(

StringfirstName,

StringlastName,

Stringemail){

this.firstName=firstName;

this.lastName=lastName;

this.email=email;

}



publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetFirstName(){

returnfirstName;

}

publicvoidsetFirstName(StringfirstName){

this.firstName=firstName;

}

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetLastName(){

returnlastName;

}

publicvoidsetLastName(StringlastName){

this.lastName=lastName;

}

}

SqlMapConfig.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMapConfig2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">














value="jdbc:mysql://192.168.10.112:3306/vin"/>













我们使用标签来映射SQL语句,在该标签中我们定义了一个"id",它将在IbatisInsertion.java文件中用来执行数据库插入,查询操作.



selectlast_insert_id()asid



上面的代码意味着表中被插入数据的下一行.

Contact.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMap2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-2.dtd">











insertintocontact(firstName,lastName,email)

values(#firstName#,#lastName#,#email#)



selectlast_insert_id()asid









selectfromcontact





IbatisInsertion.java的代码如下:

importcom.ibatis.common.resources.Resources;

importcom.ibatis.sqlmap.client.SqlMapClient;

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

importjava.io.;

importjava.sql.SQLException;

importjava.util.;



publicclassIbatisInsertion{

publicstaticvoidmain(String[]args)throwsIOException,SQLException{

Readerreader=Resources.getResourceAsReader("SqlMapConfig.xml");

SqlMapClientsqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);

//Insertingonerecordincontacts

System.out.println(

"--------------InsertinginformationinContactTable-----------");

Contactcontact=newContact("Amit","Kumar","amit@roseindia.net");

sqlMap.insert("Contact.insert",contact);

System.out.println("|RecordInsertedSuccessfully");

System.out.println("AllContacts");

Listcontacts=(List)

sqlMap.queryForList("Contact.getAll",null);

Contactcontactall=newContact();

for(Contactc:contacts){

System.out.print(""+c.getId());

System.out.print(""+c.getFirstName());

System.out.print(""+c.getLastName());

System.out.print(""+c.getEmail());

contact=c;

System.out.println("");

}

System.out.println("===============================================");

}

}

如何执行本例:

1.创建Contact.java并将其编译

2.创建Contact.xml和SqlMapConfig.xml

3.创建IbatisInsertion.java

4.执行IbatisInsertion类文件,结果将在你的命令提示符上输出如下:

"RecordInsertedSuccessfully"

输出:







3.iBatis删除操作教程

我希望通过上面的例子,你能完全懂得如何向数据库执行插入或者查询操作.所以在本例中你将学习到如何通过iBatis在数据库中删除数据.所以你需要分析代码并清楚的理解在这些代码里到底发生了什么.然而你绝对不需要再创建一个不同的数据库,虽然你知道我们使用上一个MySQL作为数据库而且你已经知道了我们的表名是Contact.但你可以选择是使用这个数据库还是再创建一个,这都由你决定!你唯一需要确定的就是你定义的表名是正确的,否则将会产生Bug.如果你从本iBatis教程的开始学下来的,那么你是不需要修改代码的.仅仅将给定的代码拷贝到文件夹并执行,最终删除数据库表中的数据.

正如我之前提到的,在iBatis的本章,我们将要从Ctract表中删除记录,我们使用MySQL的数据库"vin"

我们的Contact.java和SqlMapConfig.xm与上一个例子中的是一样的.

Contact.java

publicclassContact{

privateStringfirstName;

privateStringlastName;

privateStringemail;

privateintid;



publicContact(){}



publicContact(

StringfirstName,

StringlastName,

Stringemail){

this.firstName=firstName;

this.lastName=lastName;

this.email=email;

}



publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetFirstName(){

returnfirstName;

}

publicvoidsetFirstName(StringfirstName){

this.firstName=firstName;

}

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetLastName(){

returnlastName;

}

publicvoidsetLastName(StringlastName){

this.lastName=lastName;

}

}

?SqlMapConfig.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMapConfig2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">














value="jdbc:mysql://192.168.10.112:3306/vin"/>













?

在Contract.xml文件中我们使用标签删除Contract表中的全部记录.



deletefromContact



上面几行代码删除了Contract表中的所有记录,这里定义的id"deleteAll"会在以后在IbatisDeletion类中执行数据库的查询操作.

Contact.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMap2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-2.dtd">









deletefromContact







selectfromcontact





我们需要引入下面的包:

com.ibatis.common.resources

com.ibatis.sqlmap.client

SQL映射所需的类和接口:

Readerreader=Resources.getResourceAsReader("SqlMapConfig.xml");

SqlMapClientsqlMap=

SqlMapClientBuilder.buildSqlMapClient(reader);

上面的代码能从"SqlMapConfig.xml"中读取配置信息,IbatisDeletion.java的代码如下:

IbatisDeletion.java

importcom.ibatis.common.resources.Resources;

importcom.ibatis.sqlmap.client.SqlMapClient;

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

importjava.io.;

importjava.sql.SQLException;

importjava.util.;



publicclassIbatisDeletion{

publicstaticvoidmain(String[]args)

throwsIOException,SQLException{

Readerreader=Resources.getResourceAsReader("SqlMapConfig.xml");

SqlMapClientsqlMap=

SqlMapClientBuilder.buildSqlMapClient(reader);

//Deletingallrecordsfromcontacts

System.out.println("--DeletinginformationsfromContact------");

Contactcontct=newContact();

sqlMap.delete("Contact.deleteAll",contct);

System.out.println("|DeletedRecordSuccessfully");

System.out.println("AllContacts");

Listcontacts=(List)

sqlMap.queryForList("Contact.getAll",null);

Contactcontact=null;

for(Contactc:contacts){

System.out.print(""+c.getId());

System.out.print(""+c.getFirstName());

System.out.print(""+c.getLastName());

System.out.print(""+c.getEmail());

contact=c;

System.out.println("");

}

System.out.println("============================================");

}

}

按照如下步骤执行本例:

创建Contact.xml和SqlMapConfig.xml

创建Contract.java并将其编译

创建IbatisDeletion.java并将其编译

执行IbatisDeletion你将会在你的命令提示符中得到如下输出:







4.更新表中的数据

对任何数据库程序来说,添加,更新,删除都是十分常见且必要的特性.在该教程里我们已经讲解了使用iBatis在Java中进行插入和删除操作,现在本章将讲述如何使用iBatis在数据表中更新数据.在iBatis中执行一条更新语句是非常简单的.为了更新数据你得在SQL映射文件"Contact.xml"中添加SQL的update语句.

iBatis更新语句例子:Contact.java

publicclassContact{

privateStringfirstName;

privateStringlastName;

privateStringemail;

privateintid;



publicContact(){}



publicContact(

StringfirstName,

StringlastName,

Stringemail){

this.firstName=firstName;

this.lastName=lastName;

this.email=email;

}



publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetFirstName(){

returnfirstName;

}

publicvoidsetFirstName(StringfirstName){

this.firstName=firstName;

}

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetLastName(){

returnlastName;

}

publicvoidsetLastName(StringlastName){

this.lastName=lastName;

}

}



SqlMapConfig.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMapConfig2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">














value="jdbc:mysql://192.168.10.112:3306/vin"/>













?

iBatis更新查询

在我们的例子中,我们通过参数中指定的id更新了表中的数据,因此对于"id"我们将"parameterClass"的属性值分配为"long".

Contact.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMap2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-2.dtd">









selectfromcontact







updateContact

set

lastName=''Raghuwanshi''

where

id=#id#







现在我们可以在Java程序中通过如下代码执行更新操作了:sqlMap.update("Contact.updateById",contactId);

IbatisUpdate.java代码如下:

importcom.ibatis.common.resources.Resources;

importcom.ibatis.sqlmap.client.SqlMapClient;

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

importjava.io.;

importjava.sql.SQLException;

importjava.util.;



publicclassIbatisUpdate{

publicstaticvoidmain(String[]args)

throwsIOException,SQLException{

Readerreader=Resources.getResourceAsReader(

"SqlMapConfig.xml"

);

SqlMapClientsqlMap=SqlMapClientBuilder.buildSqlMapClient(reader);

//Updatingonerecordofcontact

System.out.println("----UpdatinginformationsofContact-----");

Contactcontct=newContact();

longcontactId=1;

sqlMap.update("Contact.updateById",contactId);

System.out.println("|UpdatedRecordSuccessfully");

System.out.println("AllContacts");

Listcontacts=(List)

sqlMap.queryForList("Contact.getAll",null);

Contactcontact=null;

for(Contactc:contacts){

System.out.print(""+c.getId());

System.out.print(""+c.getFirstName());

System.out.print(""+c.getLastName());

System.out.print(""+c.getEmail());

contact=c;

System.out.println("");

}

System.out.println("============================================");

}

}



为了执行update的例子,遵照如下步骤:

创建Contact.java和SqlMapConfig.xml

编译Contact.java

创建Contact.xml

创建IbatisUpdate.java并将其编译

执行IbatisUpdate类文件,你会得到如下输出:







5.iBatisResultMap例子

如果你使用iBatis的ResultMap来工作,那么你一定知道iBatis的ResultMap是用来提供数据库查询结果和它的对象属性之间的映射的,这是iBatis最常见且重要的特性了.本章仅是一个ResultMap的简单介绍.我们的Contact.javaandSqlMapConfig.xml文件和我们的上一个例子是一样的,没有任何变化.ContactPOJO的代码如下:

Contact.java

publicclassContact{

privateStringfirstName;

privateStringlastName;

privateStringemail;

privateintid;



publicContact(){}



publicContact(

StringfirstName,

StringlastName,

Stringemail){

this.firstName=firstName;

this.lastName=lastName;

this.email=email;

}



publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetFirstName(){

returnfirstName;

}

publicvoidsetFirstName(StringfirstName){

this.firstName=firstName;

}

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetLastName(){

returnlastName;

}

publicvoidsetLastName(StringlastName){

this.lastName=lastName;

}

}



SqlMapConfig.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMapConfig2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">














value="jdbc:mysql://192.168.10.112:3306/vin"/>













要想使用ResultMap我们得使用标签.它由一个id组成,该id需要在





为了执行resultMap例子,我们需要将下面的Java代码引入进来.

sqlMap.queryForObject("Contact.getById",new?Integer(1));

这里我们传递值为1的id来显示所有该id的信息.

IbatisResultMap.java

importcom.ibatis.common.resources.Resources;

importcom.ibatis.sqlmap.client.SqlMapClient;

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

importjava.io.;

importjava.sql.SQLException;

importjava.util.;



publicclassIbatisResultMap{

publicstaticvoidmain(String[]args)

throwsIOException,SQLException{

Readerreader=Resources.getResourceAsReader("SqlMapConfig.xml");

SqlMapClientsqlMap=

SqlMapClientBuilder.buildSqlMapClient(reader);

//Outputallcontacts

System.out.println("------InformationbyContactId--------");

Contactcontact=

(Contact)sqlMap.queryForObject("Contact.getById",newInteger(1));

System.out.println("|Id="+contact.getId());

System.out.println("|FirstName="+contact.getFirstName());

System.out.println("|LastName="+contact.getLastName());

System.out.println("|EmailId="+contact.getEmail());

System.out.println("==========================================");

}

}

为了运行该程序:

创建Contact.xml和SqlMapConfig.xml

创建并编译Contact.java

创建并编译IbatisResultMap.java

在执行IbatisResultMap类文件的时候,该id的所有信息将会显示出来:







6.iBatis存储过程例子

正如你在本教程上面部分看到的,通过iBatis我们可以在数据库表中执行内嵌的insert,delete,updateSQL命令.本例中你将看到如何在iBatis中调用存储过程.

就像我在上一个例子中提到的,我们使用MySQL数据库,并且使用和上一个例子中一样的Contact表.

我们在数据库"vin"中创建了一个叫showData()的存储过程,它将显示Contract表中的所有的contact信息.为了创建存储过程,我们打开MySQL并创建如下定义的过程:

DELIMITER$$



DROPPROCEDUREIFEXISTS`vin`.`showData`$$



CREATEPROCEDURE`vin`.`showData`()

BEGIN

selectfromContact;

END$$



DELIMITER;

"Contact.java"和"SqlMapConfig.xml"与上一个例子中的是一样的:

Contact.java

publicclassContact{

privateStringfirstName;

privateStringlastName;

privateStringemail;

privateintid;



publicContact(){}



publicContact(

StringfirstName,

StringlastName,

Stringemail){

this.firstName=firstName;

this.lastName=lastName;

this.email=email;

}



publicStringgetEmail(){

returnemail;

}

publicvoidsetEmail(Stringemail){

this.email=email;

}

publicStringgetFirstName(){

returnfirstName;

}

publicvoidsetFirstName(StringfirstName){

this.firstName=firstName;

}

publicintgetId(){

returnid;

}

publicvoidsetId(intid){

this.id=id;

}

publicStringgetLastName(){

returnlastName;

}

publicvoidsetLastName(StringlastName){

this.lastName=lastName;

}

}

SqlMapConfig.xml




PUBLIC"-//ibatis.apache.org//DTDSQLMapConfig2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">














value="jdbc:mysql://192.168.10.112:3306/vin"/>















我们只需修改"Contact.xml"并使用标签来调用存储过程



{callshowData()}



上面几行代码调用了存储过程并集合了contract表.下面是Contact.xml的代码:




PUBLIC"-//ibatis.apache.org//DTDSQLMap2.0//EN"

"http://ibatis.apache.org/dtd/sql-map-2.dtd">









{callshowData()}





现在我们可以这样调用存储过程:

sqlMap.queryForList("Contact.storedInfo",null);"sqlMap"是SqlMapClient类的一个对象.IbatisStoredProcedure.java的代码如下:

importcom.ibatis.common.resources.Resources;

importcom.ibatis.sqlmap.client.SqlMapClient;

importcom.ibatis.sqlmap.client.SqlMapClientBuilder;

importjava.io.;

importjava.sql.SQLException;

importjava.util.;



publicclassIbatisStoredProcedure{

publicstaticvoidmain(String[]args)

throwsIOException,SQLException{

Readerreader=

Resources.getResourceAsReader("SqlMapConfig.xml");

SqlMapClientsqlMap=

SqlMapClientBuilder.buildSqlMapClient(reader);

System.out.println("AllContacts");

Listcontacts=(List)

sqlMap.queryForList("Contact.storedInfo",null);

Contactcontact=null;

for(Contactc:contacts){

System.out.print(""+c.getId());

System.out.print(""+c.getFirstName());

System.out.print(""+c.getLastName());

System.out.print(""+c.getEmail());

contact=c;

System.out.println("");

}

}

}

请依照如下步骤执行本例:

创建Contact.xml和SqlMapConfig.xml

创建Contact.java并将其编译

创建IbatisStoredProcedure.java并将其编译

执行IbatisStoredProcedure类文件,所有的Contract信息将在你的命令提示符下显示:















































献花(0)
+1
(本文系文梅文档首藏)