在上一篇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的基本操作就簡單介紹到這裏吧!