本期开始讲Model层的开发,整合iBatis框架,iBatis是Apache旗下Java数据持久层的框架,跟Hibernate是同一类型的框架。大家可到它的官方网站去下载http://ibatis.apache.org/java.cgi,如下图:
我这里下载的是当前最新版本iBatis 2.3.4 , 下载之后,解压包是这样的:
我们在lib目录下,找到“ibatis-2.3.4.726.jar”文件,加入到我们项目的lib目录下,就行。在这里,我们先说下怎么学习这个iBatis框架:上图中,有个simple_example的文件夹,它里面就包含了一个超级简单且容易理解的例子,大家可以去学习一下。By the way,如果你学过Hibernate的话,你会发觉iBatis要比Hibernate好学很多。关于Hibernate和iBatis的争论,网上有很多,大家有兴趣可以去了解一下。
好,我们先建立数据库和设计数据库吧。我这项目用的是MySQL 5.0。生成数据库和数据表的SQL语句如下:
| create database simpledb; create table article |
这是我们常见的新闻表及其中的字段。
接下来,写一个与表对应的新闻类,Article.java,这个其实是POJO类,代码如下:
package
cn.simple.pojo;
import
java.util.Date;

public
class
Article
{
private int id;
private String title;
private String author;
private String content;
private Date pubtime;

/** *//***********getter和setter方法***********/
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getAuthor()
{
return author;
}
public void setAuthor(String author)
{
this.author = author;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public Date getPubtime()
{
return pubtime;
}
public void setPubtime(Date pubtime)
{
this.pubtime = pubtime;
}
}
有了数据表和实体类,现在来写两者之间映射的配置文件Article.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
namespace
="Article"
>

<!--
Use type aliases to avoid typing the full classname every time.
-->
<
typeAlias
alias
="Article"
type
="cn.simple.pojo.Article"
/>

<!--
Result maps describe the mapping between the columns returned from a
query, and the class properties. A result map isn't necessary if the
columns (or aliases) match to the properties exactly.
-->
<
resultMap
id
="ArticleResult"
class
="Article"
>
<
result
property
="id"
column
="ID"
/>
<
result
property
="title"
column
="TITLE"
/>
<
result
property
="author"
column
="AUTHOR"
/>
<
result
property
="content"
column
="CONTENT"
/>
<
result
property
="pubtime"
column
="PUBTIME"
/>
</
resultMap
>

<!--
Select with no parameters using the result map for Account class.
-->
<
select
id
="selectAllArticles"
resultMap
="ArticleResult"
>
select * from article
</
select
>

<!--
A simpler select example without the result map. Note the aliases to
match the properties of the target result class.
-->
<
select
id
="selectArticleById"
parameterClass
="int"
resultClass
="Article"
>
select
ID as id,
TITLE as title,
AUTHOR as author,
CONTENT as content,
PUBTIME as pubtime
from Article
where ID=#id#
</
select
>

<!--
Insert example, using the Account parameter class
-->
<
insert
id
="insertArticle"
parameterClass
="Article"
>
insert into article (
TITLE,
AUTHOR,
CONTENT,
PUBTIME
) values (
#title#,
#author#,
#content#,
#pubtime#
)
</
insert
>

<!--
Update example, using the Account parameter class
-->
<
update
id
="updateArticle"
parameterClass
="Article"
>
update article set
TITLE = #title#,
AUTHOR = #author#,
CONTENT = #content#,
PUBTIME = #pubtime#
where
ID = #id#
</
update
>

<!--
Delete example, using an integer as the parameter class
-->
<
delete
id
="deleteArticleById"
parameterClass
="int"
>
delete from article where ID = #id#
</
delete
>

</
sqlMap
>
大家不要觉得这个映射文件很复杂,其实,这挺容易理解的,如果大家赖得写的话,可复制iBatis自带的simple_example下的例子的映射文件,然后修改一下就行。
有了表、实体类、表与实体之间的映射文件,之后,该做什么呢?学过Hibernate的朋友会想到那个数据库连接信息的配置文件,当然,iBatis也需要类似的文件,即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
>

<!--
Configure a built-in transaction manager. If you're using an
app server, you probably want to use its transaction manager
and a managed datasource
-->
<
transactionManager
type
="JDBC"
commitRequired
="false"
>
<
dataSource
type
="SIMPLE"
>
<
property
name
="JDBC.Driver"
value
="com.mysql.jdbc.Driver"
/>
<
property
name
="JDBC.ConnectionURL"
value
="jdbc:mysql://localhost:3306/simpledb"
/>
<
property
name
="JDBC.Username"
value
="root"
/>
<
property
name
="JDBC.Password"
value
="root"
/>
</
dataSource
>
</
transactionManager
>

<!--
List the SQL Map XML files. They can be loaded from the
classpath, as they are here (com.domain.data
)
-->
<
sqlMap
resource
="cn/simple/pojo/Article.xml"
/>
<!--
List more here
<sqlMap resource="com/mydomain/data/Order.xml"/>
<sqlMap resource="com/mydomain/data/Documents.xml"/>
-->

</
sqlMapConfig
>
一看这代码,也有点复杂,我的说法同上,大不了COPY,再略作修改,呵呵
好了,来写我们的业务逻辑层:
package
cn.simple.manager;
import
java.io.IOException;
import
java.io.Reader;
import
java.sql.SQLException;
import
java.util.List;
import
cn.simple.pojo.Article;
import
com.ibatis.common.resources.Resources;
import
com.ibatis.sqlmap.client.SqlMapClient;
import
com.ibatis.sqlmap.client.SqlMapClientBuilder;

public
class
ArticleManager
{

/** *//**
* SqlMapClient instances are thread safe, so you only need one. In this
* case, we'll use a static singleton. So sue me. ;-)
*/
private static SqlMapClient sqlMapper;

/** *//**
* It's not a good idea to put code that can fail in a class initializer,
* but for sake of argument, here's how you configure an SQL Map.
*/
static
{
try
{
Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml");
sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e)
{
// Fail fast.
throw new RuntimeException(
"Something bad happened while building the SqlMapClient instance."
+ e, e);
}
}

/** *//**
* 查询列表
* @return
* @throws SQLException
*/
public static List<Article> selectAllArticles() throws SQLException
{
return sqlMapper.queryForList("selectAllArticles");
}

/** *//**
* 插入数据
* @param article
* @throws SQLException
*/
public static void insertArticle(Article article) throws SQLException
{
sqlMapper.insert("insertArticle", article);
}

/** *//**
* 更新数据
* @param article
* @throws SQLException
*/
public static void updateArticle(Article article) throws SQLException
{
sqlMapper.update("updateArticle", article);
}
本文转自我的JavaEE技术博客http://www.blogjava.net/rongxh7/,转载请注明出处!谢谢!
本文详细介绍如何在项目中整合iBatis框架,包括下载安装、数据库设计、实体类创建、映射文件编写及配置文件设置等步骤,并通过具体实例演示了基本的增删改查操作。


106

被折叠的 条评论
为什么被折叠?



