`
morning2008
  • 浏览: 115209 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

ibatis教程 实战篇 11例代码讲述CRUD操作

 
阅读更多

这篇文章主要是用来讲解如何使用ibatis来开发程序,下面我们就结合代码来认识并开发我们的第一个ibatis程序.
首先我们创建一个数据库:mysql,再创建一个表:t_user:
SQL语句如下:
-- Table structure for t_user
-- ----------------------------
DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`ID` int(11) NOT NULL auto_increment,
`NAME` varchar(255) default NULL,
`PASS` varchar(20) default NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=47 DEFAULT CHARSET=latin1;

-- Records
-- ----------------------------
INSERT INTO `t_user` VALUES ('7', 'zxx', 'xfmn123456');
INSERT INTO `t_user` VALUES ('9', 'lsw', '12645xxfff@#^%^');
INSERT INTO `t_user` VALUES ('10', 'bjs', '4232587845896');
3.新建一个项目,命名为:jibatis 2.3,导入所需要的jar包,在这个应用中我只导入了两个jar包:ibatis-2.3.0.677.jar,mysql-connector-java-5.1.6-bin.jar就足够了.
4.创建User的Bean类:
public class User {
private Integer id;
private String name;
private String pass;

//getter和setter方法
}
5.通过jdbc.properties来配置数据库连接:
#Fri Dec 05 12:04:48 CST 2009
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost/mysql
username=root
password=123456
6.配置sqlmap-config.xml文件
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!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="com/ibatis/jdbc.properties" />
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property value="${driver}" name="JDBC.Driver" />
<property value="${url}" name="JDBC.ConnectionURL" />
<property value="${username}" name="JDBC.Username" />
<property value="${password}" name="JDBC.Password" />
</dataSource>
</transactionManager>
<sqlMap resource="com/ibatis/dao/sqlmap/User.xml" />
</sqlMapConfig>
7.配置bean.xml文件,我们这里起名叫: User.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="User">
<typeAlias alias="user" type="com.ibatis.dao.bean.User" />
……………//先列出基本的配置
</sqlMap>
8.新建我们的测试类: UserDaoTest:
import java.io.Reader;
………//其他jar自动导入即可
@SuppressWarnings("unchecked")
public class UserDaoTest {
private static SqlMapClient sqlMapClient = null;
static {
try {
String resource = "com/ibatis/sqlmap-config.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String[] args) throws Exception {
…….//调用测试方法
}
}

做完上面的基本操作的一个大体框架,一个简单的ibatis应用下面就开始了:
在User.xml配置文件中加如下一段配置:
<!-- example 1: 无映射 -->
<select id="getUserByName1" resultClass="user" parameterClass="string">
<![CDATA[
SELECT * FROM t_user WHERE NAME=#name#
]]>
</select>
然后在UserDaoTest.java中增加如下一个方法:
public static void example1() throws Exception {
try {
List<User> list = sqlMapClient.queryForList("getUserByName1", "zxx");
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName() + "-" + user.getPass());
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:当parameterClass="string"的时侯,sql语句中的参数没有限制, 如:SELECT * FROM t_user WHERE NAME=#name#,其中#name#中name可以是任何名称,不过通常情况下,我们习惯于只有一个参数的时候用#value#或者是#熟悉名#.

在User.xml配置文件中加如下一段配置:
<!-- example 2: 内联映射 -> 实体类 -->
<select id="getUserByName2" resultClass="user" parameterClass="string">
<![CDATA[
SELECT ID as id, NAME as name, PASS as pass FROM t_user WHERE NAME=#name#
]]>
</select>
然后在UserDaoTest.java中增加如下一个方法:
public static void example2() throws Exception {
try {
List<User> list = sqlMapClient.queryForList("getUserByName2", "zxx");
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName() + "-" + user.getPass());
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:当使用内联映射 ->实体类的时侯,sql语句中的映射名可以没有限制, 如:SELECT ID as id, NAME as name, PASS as pass FROM t_user WHERE NAME=#name#,通常情况下映射名就是bean的属性的名字,如果改成这样
SELECT ID as iid, NAME as name, PASS as pass FROM t_user WHERE NAME=#name#,其中iid不是bean的属性,那么我们就无法获取id的值,其实这样写也是没意义的,所以通常情况下映射的名字就是bean的属性的名字。

3. 在User.xml配置文件中加如下一段配置:
<!-- example 3: 内联映射 -> MAP类 -->
<select id="getUserByName3" resultClass="hashmap" parameterClass="string">
<![CDATA[
SELECT * FROM t_user WHERE NAME=#name#
]]>
</select>
然后在UserDaoTest.java中增加如下一个方法:
public static void example3() throws Exception {
try {
List<User> list = sqlMapClient.queryForList("getUserByName3", "zxx");
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Map map = (Map) iterator.next();
System.out.println(map.get("ID") + ":" + map.get("NAME") + ":" + map.get("PASS"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:当使用内联映射 ->MAP类的时侯,即resultClass="hashmap"或者resultClass="java.util.Map"; 它会返回一个Map的集合,Map中的键对应的数据库中的字段名,非bean中的属性名,所以获取的时候get()中的应该是字段名。

4.在User.xml配置文件中加如下一段配置:
<!-- example 4: 显示映射 -> 实体类 -->
<resultMap id="userResult" class="user">
<result property="id" column="Id" />
<result property="name" column="NAME" />
<result property="pass" column="PASS" />
</resultMap>
<select id="getUserByName4" resultMap="userResult" parameterClass="string">
<![CDATA[
SELECT * FROM t_user WHERE NAME=#name#
]]>
</select>
然后在UserDaoTest.java中增加如下一个方法:
public static void example4() throws Exception {
try {
List<User> list = sqlMapClient.queryForList("getUserByName4", "zxx");
for (User user : list) {
System.out.println(user.getId() + "-" + user.getName() + "-" + user.getPass());
}
} catch (Exception e) {
e.printStackTrace();
}

}
// 注:当使用显示映射 ->实体类的时侯,即返回的结果在resultMap中,而非resultClass中,类如上面一个最简单的resultMap,column对应的是字段名,此时字段名不区分大小写, property对应的是bean中的属性名,与example2的内联映射 ->实体类不同的是,该属性必须在bean中存在,否则就会报错,它的检查更严格..

5.在User.xml配置文件中加如下一段配置:
<!-- example 5: 显示映射 -> MAP类 -->
<resultMap id="userMapResult" class="hashmap">
<result property="id" column="ID" />
<result property="name" column="NAME" />
<result property="pass" column="PASS" />
</resultMap>
<select id="getUserByName5" resultMap="userMapResult" parameterClass="string">
<![CDATA[
SELECT * FROM t_user WHERE NAME=#name#
]]>
</select>
然后在UserDaoTest.java中增加如下一个方法:
public static void example5() throws Exception {
try {
List<User> list = sqlMapClient.queryForList("getUserByName5", "zxx");
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Map map = (Map) iterator.next();
System.out.println(map.get("id") + ":" + map.get("name") + ":" + map.get("pass"));
}
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:当使用显示映射 ->MAP类的时侯,即resultMap的class不是我们定义的bean而是hashmap或者java.util.Map的时候,类如上面一个最简单的MAP类,column对应的是字段名,此时字段名不区分大小写, property对应的是bean中的属性名,与example3的内联映射 ->MAP类不同的是,它的键值是属性名而非字段名.

6.在User.xml配置文件中加如下一段配置:
<!-- example 6: XML -->
<select id="getUserByName6" parameterClass="string" resultClass="xml" xmlResultName="info">
<![CDATA[
SELECT * FROM t_user WHERE name=#name#
]]>
</select>
然后在UserDaoTest.java中增加如下一个方法:
public static void example6() throws Exception {
try {
List list = sqlMapClient.queryForList("getUserByName6", "zxx");
System.out.println(list.get(0));
// 输出: <?xml version="1.0" encoding="UTF-8"?><info><ID>7</ID><NAME>zxx</NAME><PASS>xfmn123456</PASS></info>
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:xmlResultName="info",xmlResultName定义返回的结果信息保存在xml的那个元素中,如果返回有多个xml对象那么就会产生多个<?Xml ,而不是整合在一个<?xml中。

7.在User.xml配置文件中加如下一段配置:
<!-- example 7: 自动参数映射 -->
<insert id="insertUser7" parameterClass="user">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS )VALUES( #id#,#name#,#pass# )
]]>
</insert>
然后在UserDaoTest.java中增加如下一个方法:
public static void example7() throws Exception {
try {
User user = new User();
user.setName("example7");
sqlMapClient.insert("insertUser7", user);
} catch (Exception e) {
e.printStackTrace();
}
}
// 注: 自动参数映射 插入操作

8.在User.xml配置文件中加如下一段配置:
<!-- example 8: 内联参数映射 -->
<insert id="insertUser8" parameterClass="user">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS ) VALUES( #id:INT#, #name:VARCHAR#, #pass:VARCHAR# )
]]>
</insert>
然后在UserDaoTest.java中增加如下一个方法:
public static void example8() throws Exception {
try {
User user = new User();
user.setName("example8");
sqlMapClient.insert("insertUser8", user);
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:内联参数映射 插入操作

9.在User.xml配置文件中加如下一段配置:
<!-- example 9: 外联参数映射 -->
<parameterMap id="parameterMap" class="user">
<parameter property="id" jdbcType="INTEGER" />
<parameter property="name" jdbcType="VARCHAR" />
<parameter property="pass" jdbcType="VARCHAR" />
</parameterMap>
<insert id="insertUser9" parameterMap="parameterMap">
<![CDATA[
INSERT INTO t_user ( ID, NAME, PASS )VALUES( ?,?,? )
]]>
</insert>
然后在UserDaoTest.java中增加如下一个方法:
public static void example9() throws Exception {
try {
User user = new User();
user.setName("example9");
user.setPass("123456");
sqlMapClient.insert("insertUser9", user);
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:外联参数映射 插入操作,如上述所示:SQL语句中有多少个参数,那么在parameterMap中必须定义多少个,而且要一一对应,参数定义顺序也不要错。

10.在User.xml配置文件中加如下一段配置:
<!-- example 10: 自动生成的键 -->
<insert id="insertUser10" parameterClass="user">
<![CDATA[
INSERT INTO t_user ( ID,NAME,PASS )VALUES( #id#, #name#, #pass# )
]]>
<selectKey resultClass="int" keyProperty="id">
<![CDATA[
SELECT LAST_INSERT_ID()
]]>
</selectKey>
</insert>
然后在UserDaoTest.java中增加如下一个方法:
public static void example10() throws Exception {
try {
User user = new User();
user.setName("example10");
user.setPass("123456");
Integer returnValue = (Integer) sqlMapClient.insert("insertUser10", user);
System.out.println(returnValue);
} catch (Exception e) {
e.printStackTrace();
}
}
// 注:该方法插入数据,并返回id的值

11.在User.xml配置文件中加如下一段配置:
<!-- example 11: 存储过程 -->
<resultMap id="returnResultMap" class="user">
<result property="id" column="ID" />
</resultMap>
<parameterMap id="paramUser" class="java.util.Map">
<parameter property="name" jdbcType="VARCHAR" javaType="string" mode="IN" />
<parameter property="pass" jdbcType="VARCHAR" javaType="string" mode="IN" />
<parameter property="id" jdbcType="INT" javaType="Integer" mode="INOUT" resultMap="returnResultMap" />
</parameterMap>

<procedure id="pro_insertUser11" parameterMap="paramUser" resultClass="int">
<![CDATA[
{call proc_userinsert(?,?,?)}
]]>
</procedure>
然后在UserDaoTest.java中增加如下一个方法:
public static void example11() throws Exception {
try {
Map map = new HashMap();
map.put("name", "procedure");
map.put("pass", "123456");
Integer returnValue = (Integer)sqlMapClient.insert("pro_insertUser11", map);
System.out.println(returnValue);
} catch (Exception e) {
e.printStackTrace();
}
}
//注:调用存储过程的参数个数必须和写存储过程的时候参数(输入和输出)个数相同.

分享到:
评论

相关推荐

    ibatis mybatis crud 完整代码

    本篇文章将深入探讨这两个框架,并基于`CRUD`(Create, Read, Update, Delete)操作来阐述如何使用它们进行数据库交互。同时,我们也会涉及通用分页这一实用功能。 `iBatis` 是一款由 Apache Software Foundation ...

    ibatis mybatis 分页 crud 完整代码

    本资源"ibatis mybatis 分页 crud 完整代码"包含了这两个框架在CRUD(创建、读取、更新、删除)操作以及分页功能上的实现,下面将详细介绍相关知识点。 1. **Ibatis**: Ibatis 是一款轻量级的Java ORM(对象关系...

    ibatis实现CRUD操作

    在IT行业中,数据库操作是必不可少的一部分,而Ibatis作为一个轻量级的持久层框架,为开发者提供了方便快捷的SQL映射工具,使得CRUD(创建、读取、更新、删除)操作变得更加简单易行。相较于Hibernate这样的ORM框架...

    ibatis简单CRUD例子

    通过这些文件,新手可以学习如何配置Ibatis,以及如何在Java代码中使用Ibatis进行数据操作,从而理解Ibatis的工作原理和使用方法。 总结起来,Ibatis作为一个轻量级的持久层框架,其简单易用的特性使其成为许多项目...

    <<ibatis框架源代码剖析>> 一个CRUD操作的ibatis项目实例

    本篇文章将通过一个具体的CRUD操作项目实例,帮助读者深入理解iBatis的工作原理和使用方法。 首先,我们需要了解iBatis的核心概念。iBatis的核心是SQL映射文件,它将SQL语句与Java代码分离,使得数据库操作更加清晰...

    iBatis 简单增删改查(CRUD)操作

    在本教程中,我们将探讨如何利用iBatis进行基本的数据库操作,包括配置、映射文件、SQL语句的编写以及Java代码的实现。 **一、iBatis 概述** iBatis 提供了一个灵活的映射框架,它将SQL语句与Java代码分离,使得...

    iBatis实战and源代码.zip

    《iBatis实战and源代码.zip》这个压缩包包含了关于iBatis框架的实战经验和源代码,对于深入了解和学习iBatis有着极大的帮助。iBatis是一个优秀的持久层框架,它允许开发者将SQL语句与Java代码分离,提高了开发效率和...

    Ibatis教程

    Ibatis教程 Ibatis教程 Ibatis教程

    iBatis教程ppt及实例源代码

    总之,iBatis教程PPT和实例源代码将帮助你理解如何在实际项目中使用iBatis进行数据库操作,包括配置、SQL映射、动态SQL、Mapper接口的使用等。通过实践这些例子,你可以更好地掌握iBatis的精髓,提高开发效率,并为...

    IbatisDemo实现基本的CRUD操作

    本教程将深入讲解如何使用iBATIS来实现基本的CRUD(创建、读取、更新、删除)操作。 一、iBATIS简介 iBATIS,现在被称为MyBatis,是一个基于Java的持久层框架,它提供了SQL映射功能,将SQL与Java代码分离,提高了...

    iBATIS实战.pdf

    《iBATIS实战》是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《iBATIS实战》的最后给出了一个...

    struts2+spring+ibatis项目实战

    iBatis则是一个持久层框架,它将SQL与Java代码分离,提供了一个映射框架,允许开发者编写动态SQL来操作数据库。iBatis与Spring的集成使得我们可以利用Spring的事务管理,从而实现数据操作的事务一致性。 在“Struts...

    iBatis教程(从入门到熟练3部教程)共3个!!

    iBatis是一个优秀的Java持久层框架,它将SQL语句与Java代码分离,提供了一种灵活的方式来控制数据库操作。这个教程包显然包含了三个部分,旨在帮助用户从零基础到熟练掌握iBatis的使用。 首先,让我们从入门开始。...

    01_传智播客ibatis教程_准备ibatis环境

    这个教程主要目标是帮助开发者搭建并熟悉iBatis的开发环境,以便后续进行数据库操作和数据映射。 【描述】"本资源来源于传智博客,赖老师主讲,很不错"表明这是一个高质量的教学资源,来自知名教育机构传智播客,由...

    入门完整ibatis教程集锦

    **Ibatis 入门教程全集** ...通过本教程集锦,你将全面掌握 Ibatis 的基本用法和高级特性,为后续的实战项目打下坚实基础。不断实践和深入理解,相信你很快就能灵活运用 Ibatis 进行数据库操作。祝你学习愉快!

    iBATIS实战源代码

    iBATIS避免了手动处理结果集和参数绑定的麻烦,提高了开发效率和代码的可读性。 在“iBATIS实战”中,我们可以深入学习如何有效地使用iBATIS来构建数据驱动的应用程序。iBATIS的核心概念包括: 1. SQL Maps:SQL ...

    iBATIS教程

    iBATIS教程,快速有效学习Ibatis的必备教程。

    iBATIS教程 iBATIS教程

    iBATIS,全称为“Integrated Battery of Apache Templates for SQL”,是一个优秀的开源持久层框架,它允许Java开发者将SQL语句与Java代码分离,提供了一种简单但强大的在应用服务器中间件上实现数据库操作的方式。...

    ibatis struts2 spring3 mybatis 分页 crud 完整代码

    这里我们讨论的是一个基于Ibatis、Struts2、Spring3的整合应用,涵盖了数据访问、业务逻辑和控制层的关键技术,以及分页和CRUD操作的实现。下面我们将详细探讨这些知识点。 1. **Ibatis**:Ibatis是一个优秀的持久...

Global site tag (gtag.js) - Google Analytics