iBatis-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("[email protected]");
		
		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", "[email protected]");
		
				
		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("[email protected]");
			
		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的基本操作就簡單介紹到這裏吧!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章