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

本文详细介绍了iBatis框架下的基本操作实现,包括增删改查等核心功能,并提供了具体的代码实例,展示了如何通过iBatis进行数据库交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    在上一篇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 SET   FIRST_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的基本操作就简单介绍到这里吧!

转载于:https://www.cnblogs.com/BillLei/p/5943323.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值