在上一篇iBatis博客中已介绍了如何配置iBatis环境,这篇博客主要进行介绍一些iBatis的基本操作实现。iBatis的增删改操作都需要操作SqlMap,DAO层Manger,POJO 这几个类来实现。下面分别介绍一下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控制台打印信息如图:
数据库表信息添加的用户信息如图:
这里介绍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测试,可看出查询方法正确,查询结果均如下所示:
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测试,可看出修改成功!
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的基本操作就简单介绍到这里吧!