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


    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的基本操作就简单介绍到这里吧!

  • 相关阅读:
    滑雪,不亦乐乎
    quant
    分享:Comment Remover 0003 发布
    shit 牛人要么出国了,要么在出国的路上
    linux目录跳转快捷方式——z武器
    迷你双核RK3066 安卓4.1智能网络高清TV 安卓播放器MK802III淘宝网
    分享:每天40分钟家务
    Marios Hadjieleftheriou/Frequent Items: Evaluation Source Code
    urllib2源码解读四(用opener打开你的url)
    分享:Editra 0.7.20 发布,跨平台文本编辑器
  • 原文地址:https://www.cnblogs.com/BillLei/p/5943323.html
Copyright © 2020-2023  润新知