iBatis-iBatis基本操作(增删改查)

article/2025/9/13 8:39:20

    在上一篇iBatis博客中已介绍了如何配置iBatis环境,这篇博客主要进行介绍一些iBatis的基本操作实现。iBatis的增删改操作都需要操作SqlMap,DAO层Manger,POJO 这几个类来实现。下面分别介绍一下iBatis基本操作的实现:


一.iBatis的添加数据方式

    这里介绍两种iBatis添加数据的方式:基本方式,添加用户信息;通过map方式,添加用户信息。

    若要使用iBatis执行任何CRUD(创建、查询、更新、删除)操作,需要创建一个POJO类。如下:


1.建立POJO对象--User

package com.azj.test;/*** 用户实体类* @author AZJ**/
public class User {/*** 唯一标识*/private String id;/*** 名字*/private String firstName;/*** 姓*/private String lastName;/*** 电子邮件*/private String email;	/*** 照片信息*/private String img;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getImg() {return img;}public void setImg(String img) {this.img = img;}	}

2.上面User POJO类对应的数据库表为

   

3.在SqlMap中添加添加用户信息的方法

<?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.azj.test.User"/><!-- 添加用户信息 --><insert id="addUsers" parameterClass="User">INSERT INTO A_USER(ID,FIRST_NAME,LAST_NAME,EMAIL) VALUES(#id#,#firstName#,#lastName#,#email#)</insert><!-- 通过map方式,添加用户信息 --><insert id="addUsersByMap" parameterClass="java.util.HashMap">INSERT INTO A_USER(ID,FIRST_NAME,LAST_NAME,EMAIL) VALUES(#id#,#firstName#,#lastName#,#email#)</insert></sqlMap>


4.编写Manager类

   Manager类数据DAO层,连接数据库,对数据库进行增删改查操作。类中添加两种添加用户信息的方法,与SqlMap中添加用户方法对应:

package com.azj.test;import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;/*** Dao层,连接数据库,对数据库进行增删改查操作* @author azj**/
public class Manager {//使用sqlMapClient,此类线程安全,所以可以定义成静态的private static SqlMapClient sqlMaper;//静态块,初始化 sqlMaper;在类加载的时候执行一次static{try{Reader reader=Resources.getResourceAsReader("sqlMapConfig.xml");sqlMaper=SqlMapClientBuilder.buildSqlMapClient(reader);reader.close();}catch(IOException e){throw new RuntimeException(e);}}/*** 添加用户信息* @throws SQLException*/
public static void addUser(User user) throws SQLException{sqlMaper.insert("addUsers",user);//与SqlMap中添加用户信息方法对应}/*** 通过map方式,添加用户信息* @param userMap* @throws SQLException*/
public static void addUserByMap(Map userMap) throws SQLException{sqlMaper.insert("addUsersByMap", userMap);   //与SqlMap中添加用户信息方法对应}
}


5.添加测试类,测试用户信息是否添加成功

package com.azj.test;import java.util.HashMap;
import java.util.Map;import junit.framework.TestCase;public class TestInsert extends TestCase {/*** 添加用户信息*/public void testInsertUser(){User user=new User();user.setId("1");user.setFirstName("子");user.setLastName("李");user.setEmail("m@sina.com");try{Manager.addUser(user);}catch(Exception e){e.printStackTrace();}}/*** 通过map方式,添加用户信息*/public void testInsertUserByMap(){Map userMap=new HashMap();userMap.put("id", "2");userMap.put("firstName", "芳芳");userMap.put("lastName","王");userMap.put("email", "value@163.com");try{Manager.addUserByMap(userMap);}catch(Exception e){e.printStackTrace();}}}


通过JUnit单元测试,执行此测试文件,可以看出用户信息添加成功!通过JUnit控制台打印信息如图:

 

数据库表信息添加的用户信息如图:

          
 

二.iBatis查询数据方式

     这里介绍4种查询用户信息的方式:根据id查询用户信息,根据实体类(用户)查询用户信息,查询所有用户信息(list 和map方式)。

1.POJO对象见iBatis添加数据方式

2.数据表信息

     

3.在SqlMap中添加查询用户信息的方法

<resultMap id="UserResult" class="User" ><result property="id" column="ID"/><result property="firstName" column="FIRST_NAME"/><result property="lastName" column="LAST_NAME"/><result property="email" column="EMAIL"/></resultMap><!-- 根据id查询用户信息 --><select id="selectUserById" parameterClass="java.lang.String" resultMap="UserResult">SELECT * FROM A_USER WHERE ID=#id#	</select><!-- 根据实体类(用户)查询用户信息 --><select id="selectUserByUser" parameterClass="User" resultMap="UserResult">SELECT * FROM A_USER WHERE ID=#id#	</select><!-- 查询所有用户信息 --><select id="selectUsers" resultMap="UserResult">SELECT * FROM A_USER </select>


4.在Manager类中添加查询用户信息的方法

//因其线程安全,设置为静态方法/*** 根据id查询用户信息* @param id* @return* @throws SQLException*/public static User selectUserById(String id) throws SQLException{return (User) sqlMaper.queryForObject("selectUserById",id);}/*** 根据用户实体类查询用户实体* @param user* @return* @throws SQLException*/public static User selectUserByUser(User user) throws SQLException{return (User) sqlMaper.queryForObject("selectUserByUser",user);}/*** 查询所有用户信息,放于list中* @param user* @return* @throws SQLException*/public static List selectUsers() throws SQLException{return sqlMaper.queryForList("selectUsers");}/*** 查询所有用户信息,放于Map中* @return* @throws SQLException*/public static Map selectUserForMap() throws SQLException{return sqlMaper.queryForMap("selectUsers", null, "id");}


5.编写测试类,测试查询用户信息是否成功

 

package com.azj.test;import java.util.List;
import java.util.Map;import junit.framework.TestCase;/*** 测试查询用户信息* * @author azj*/
public class TestManager extends TestCase {public void testSelectUserById() {try {User user = Manager.selectUserById("1");System.out.println(user);System.out.println(user.getFirstName());} catch (Exception e) {e.printStackTrace();}}/*** 根据实体类查询用户信息*/public void testSelectUserByUser() {try {User userParmUser = new User();userParmUser.setId("2");User user = Manager.selectUserByUser(userParmUser);System.out.println(user);System.out.println(user.getFirstName());} catch (Exception e) {e.printStackTrace();}}/*** 查询用户信息放于List中*/public void testSelectUsers() {try {List userList = Manager.selectUsers();User user = (User) userList.get(1);System.out.println(user);System.out.println(user.getFirstName());} catch (Exception e) {e.printStackTrace();}}/*** 查询用户信息放于Map中*/public void testSelectUsersMap() {try {Map userMap = Manager.selectUserForMap();// 将ID为1的用户查出来User user = (User) userMap.get("1");System.out.println(user);System.out.println(user.getFirstName());} catch (Exception e) {e.printStackTrace();}}
}
通过JUnit测试,可看出查询方法正确,查询结果均如下所示:

           


三.iBatis修改数据方式

1.POJO对象见iBatis添加数据方式

2.数据表信息

     

3.在SqlMap中添加修改用户信息的方法

<!-- 更新用户信息 --><update id="updateUserByID" parameterClass="User">UPDATE A_USER SETFIRST_NAME=#firstName#,LAST_NAME=#lastName#,EMAIL=#email#WHERE ID=#id#</update>

4.在Manager类中添加修改用户信息的方法

/*** 更新用户信息* @param user* @throws SQLException*/public static void updateUser(User user) throws SQLException{sqlMaper.update("updateUserByID", user);
}


5.编写测试类,测试修改用户信息是否成功

 

/**
* 更新用户信息
*/
public void testUpdateUser(){User user=new User();user.setId("1");try{user=Manager.selectUserByUser(user);user.setFirstName("娟子");user.setLastName("马");user.setEmail("m2@sina.com");Manager.updateUser(user);}catch(Exception e){e.printStackTrace();}}

 通过JUnit测试,可看出修改成功!

       

四.iBatis删除数据方式

1.POJO对象见iBatis添加数据方式

2.数据表信息

    

3.在SqlMap中添加删除用户信息的方法

<!--删除用户(多个)字符串拼接方式 --><update id="deleteByString" parameterClass="java.lang.String">DELETE FROM A_USER WHERE ID IN($id$)</update><!-- 删除用户(多个)传参,标签说明使用,分割 ;以(开始,以)结束,解析的内容是id --><update id="deleteByList" parameterClass="java.util.List">DELETE FROM A_USER WHERE ID IN<iterate conjunction="," open="(" close=")">#id[]#</iterate></update>


4.在Manager类中添加删除用户信息的方法

/*** 删除用户信息,字符串拼接,容易产生sql注入* @param userId* @throws SQLException*/
public static void deleteUserByID(String userId) throws SQLException{sqlMaper.update("deleteByString", userId);
}/*** 删除用户信息,传参* @param userList* @throws SQLException*/
public static void deleteUserByList(List userList) throws SQLException{sqlMaper.update("deleteByList", userList);
}


5.编写测试类,测试删除用户信息是否成功

 

/*** 删除用户信息,拼接字符串*/public void testDeleteUserById(){try{String idString="'1','2'";Manager.deleteUserByID(idString);}catch(Exception e){e.printStackTrace();}}/*** 删除用户信息,传参*/public void testDeleteUserByList(){try{List userList=new ArrayList();userList.add("1");userList.add("2");Manager.deleteUserByList(userList);}catch(Exception e){e.printStackTrace();}}

    通过JUnit测试,可看到用户信息成功删除!

    iBatis的基本操作就简单介绍到这里吧!

 


http://chatgpt.dhexx.cn/article/et4TwYkh.shtml

相关文章

Ibatis与Mybatis的区别—侧重于Ibatis

目录 一、什么是Ibatis&#xff1f; 1、iBatis是一款轻量级的持久化框架 2、iBatis最大的特点是将SQL语句与Java代码分离 3、iBatis具有以下几个关键组成部分&#xff1a; 二、Ibatis与Mybatis的区别 1、基本信息不同 2、开发时间不同 3、配置方法不同 三、Ibatis与My…

ibatis使用方法

转载。怕原地址丢失&#xff0c;备份。。 http://lyb520320.iteye.com/blog/586628 http://lyb520320.iteye.com/blog/586800 iBATIS3.0学习&#xff08;一&#xff09;使用iBATIS3.0完成增删改查 博客分类&#xff1a; iBATIS3 iBATIS Apache Spring SQL JDBC 使用iBATIS3.0完…

IBatis使用浅析

ibatis 历史 Eight years ago in 2002, I created the iBATIS Data Mapper and introduced SQL Mapping as an approach to persistence layer development. Shortly thereafter, I donated the iBATIS name and code to the Apache Software Foundation. The ASF has been th…

IBatis的使用

IBatis的使用 1、IBatis是什么 回顾之前前端访问后端的整个流程&#xff1a; View ------ >Controller --------> Service ---------> DAO ------> 数据库 View :前端jsp/HTML Controller&#xff1a;Servlet/SpringMVC Service &#xff1a;Spring DAO&…

IBatis——初步总结

IBatis是持久层的框架&#xff0c;也就是我们说的Dao层框架&#xff0c;关注数据库操作以及和Java对象之间的关联&#xff0c;我们将这样的框架也称之为ORM&#xff08;Object/Relaction Mapping&#xff09;框架.而这里映射的主要是我们的表和实体&#xff08;bean&#xff09…

XMind导入Markdown(利用Typora导出opml)

安装Xmind XMind 是一款非常实用的商业思维导图软件 首先&#xff0c;安装Xmind并打开。通过"帮助"——>“关于Xmind”&#xff0c;可以获取到当前的版本号为 XMind 8 Update 9 在"文件"——>“导入”&#xff0c;可以看到Xmind支持的导入格式仅有…

推荐一款高效Cpp解析xml工具--RapidXml

解析效率比Xerces DOM 快50-100倍&#xff0c;tinyxml快30-60 &#xff0c;作者自己牛逼哄哄的说这是他所知道的最快的xml解析库了~~ 作者介绍说&#xff1a;" The table below compares speed of RapidXml to some other parsers, and to strlen() function executed on…

C++中rapidxml用法及例子

rapidxml是一个快速的xml库&#xff0c;比tinyxml快了50-100倍。本文给出创建、读取、写入xml的源码。 由于新浪博客不支持文本文件上传&#xff0c;在使用下面代码需要先下载 rapidxml&#xff0c;关于这个库的下载地址为&#xff1a; 官方网站&#xff1a; http://rapidxml.…

C++ Xml解析的效率比较(Qt/TinyXml2/RapidXml/PugiXml)

C Xml解析的效率比较&#xff08;Qt/TinyXml2/RapidXml/PugiXml&#xff09; C Xml解析的效率比较QtTinyXml2RapidXmlPugiXml 问题背景测试环境Qt - QDomDocumentTinyXml-2RapidXmlPugiXml总结 通常我们在一些软件的初始化或者保存配置时都会遇到对XML文件的操作&#xff0c;包…

SlimXml和TinyXml,RapidXml的性能对比

July 18th, 2010 zero Leave a comment Go to comments 前两天有朋友问&#xff0c;我的SlimXml有没有和RapidXml对比过效率&#xff1f;我是第一次听说这个库&#xff0c;更不用说对比效率了&#xff0c;于是上他们网站看了下。 好家伙&#xff0c;居然号称比TinyXml快30&…

RapidXml使用

vs2017 rapidxml-1.13 1 RapidXml使用 1.1 创建xml #include <iostream> #include "rapidxml/rapidxml.hpp" #include "rapidxml/rapidxml_utils.hpp" #include "rapidxml/rapidxml_print.hpp"using namespace rapidxml;void crateXml(…

使用rapidxml解析xml

rapidxml是一个由C模板实现的高效率xml解析库&#xff0c;号称解析速度比tinyxml快50倍&#xff08;忽悠&#xff09;&#xff0c;并作为boost::property的内置解析库&#xff1a; 其独立版本的官网&#xff1a;http://rapidxml.sourceforge.net/ 使用rapidxml的方法tinyxml极其…

RapidXml读取并修改XML文件

RapidXml读取并修改XML文件 RapidXml介绍RapidXml读取与修改xml文件 RapidXml介绍 RapidXml尝试创建最快的XML解析器&#xff0c;同时保留可用性&#xff0c;可移植性和合理的W3C兼容性。它是一个用现代C 编写的原位解析器&#xff0c;解析速度接近strlen在同一数据上执行的函数…

c++开源库rapidxml介绍与示例

官方地址&#xff1a;http://rapidxml.sourceforge.net/ 官方手册&#xff1a;http://rapidxml.sourceforge.net/manual.html 也可以在github上下载到别人上传的rapidxml:https://github.com/dwd/rapidxml 1.头文件 一般我们用到的头文件只有这三个 #include "rapidx…

Ubuntu 18.04 LDAP认证

将ubuntu配置为通过ldap认证&#xff0c;使其成为ldap client&#xff0c;系统版本ubuntu 18.04。 一 软件安装 apt-get install ldap-utils libpam-ldap libnss-ldap nslcd配置1 配置2 配置3 配置4 配置5 配置6 配置7 配置8 配置8 二 认证方式中添加Ldap #auth-client-conf…

LDAP认证服务器

1.要准备的环境与软件(这里测试环境是Centos6.0-64位系统) alfresco-community-4.2.c-installer-linux-x64.bin (注: alfresco是一个免费开源系统&#xff0c;可以自己去下载) apache-tomcat-7.0.42.tar db-4.5.20.tar jdk-6u45-linux-x64.bin openldap-stable-20100219.tar ph…

Jumpserver部署+Ldap认证

内容导航 &#xff08;一&#xff09;jumpserver快速部署1&#xff0c;部署内容2&#xff0c;附上安装脚本3&#xff0c;解决github无法连接4&#xff0c;修改配置 &#xff08;二&#xff09;使用jumpserver1&#xff0c;登录信息2&#xff0c;添加主机3&#xff0c;web终端登…

SVN使用LDAP认证

前言 SVN架构 用户访问SVN服务器分为两个部分&#xff1a;认证与授权。 SVN内置了有认证与授权机制&#xff0c;其认证是通过SVN仓库内的passwd文件提供&#xff0c;但它是明文、静态的&#xff0c;不方便且安全性低。 SVN还支持外部的认证&#xff0c;比如SASL&#xff0c;…

ldap 认证 java_Java实现LDAP认证(上)

Baidu脑残&#xff0c;把原来的空间改得不伦不类。所以把一些技术的东西挪到这里。 我找到两种方法&#xff0c;大同小异&#xff0c;第一种是通过Spring&#xff0c;适合已经采用Spring的项目。 一般来说用户名和密码都是保存在数据库中。现在有这个需求&#xff0c;用户名和密…

Harbor 整合ldap认证

前提&#xff1a; ldap服务器已经安装&#xff1a;OpenLDAP安装部署 harbor服务器已经安装&#xff1a;Harbro v1.8.0部署 一、ldap组织结构 1、登录信息 2、查看用户信息 二、harbor配置 1、使用默认密码登录&#xff0c;admin/Harbor12345 2、认证模式 3、测试ldap服务器…