精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
||
---|---|---|
作者 | 正文 | |
发表时间:2009-07-26
最后修改:2009-07-26
本期开始讲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语句如下:
这是我们常见的新闻表及其中的字段。 接下来,写一个与表对应的新闻类,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/,转载请注明出处!谢谢!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
||
返回顶楼 | ||
发表时间:2009-08-21
我是一个新手,想问一下,这里如果要设计DAO层的话应该怎么改呢~~?
|
||
返回顶楼 | ||
发表时间:2009-08-22
最后修改:2009-08-22
如果你使用SPRING的话,spring帮你把IBATIS做封装,使用起来也很方便。印象中spring的例子里有对iBATIS整合的例子
|
||
返回顶楼 | ||
发表时间:2009-08-26
小例子不能说明大问题。。。LZ的配置方法Hibernate已经实现的很好了,而且Hibernate有很多种可选方案
|
||
返回顶楼 | ||
发表时间:2009-12-21
没用呀,随便下个IBATIS的快速应用就有你所说的一切了,而且还比你说的详细。。。
|
||
返回顶楼 | ||
发表时间:2010-05-13
我问一下 如果 B对象包含在A中 如果我想用查询A时候,把B对象一起封装进去 ,这个在hibernate之中是使用component 那么 ibatis中如何处理对象的包含关系。。。
|
||
返回顶楼 | ||
发表时间:2010-05-17
我现在就在用ibatis,但是用ibatis作为持久层有一个比较大的缺点,即:代码生成工具很难使用,而且效果不好。
|
||
返回顶楼 | ||
浏览 6836 次