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

Batis-iBatis基本操作(增删改查)的更多相关文章

  1. MongoDB的ObjectId和基本操作增删改查(3)

    ObjectId 基本操作增删改查 增: insert 介绍: mongodb存储的是文档,. 文档是json格式的对象. 语法: db.collectionName.insert(document) ...

  2. MongoDB --- 02. 基本操作,增删改查,数据类型,比较符,高级用法,pymongo

    一.基本操作 . mongod 启动服务端 2. mongo 启动客户端 3. show databses 查看本地磁盘的数据库 4. use 库名 切换到要使用的数据库 5. db 查看当前使用的数 ...

  3. web sql 基本操作 - 增删改查

    不喜欢看md原文的 可以访问这个链接:http://note.youdao.com/noteshare?id=6a91e3dea7cdf5195bb0e851d9fcb5a5 # web sql 增删 ...

  4. MongoDB基本操作(增删改查)

    基本操作      基本的“增删查改“,在DOS环境下输入mongo命令打开shell,其实这个shell就是mongodb的客户端,同时也是一个js的编译器,默认连接的是“test”数据库.  

  5. django数据库基本操作-增删改查(tip)-基本

    补充:django外键保存 #外键保存 form_data = Form_Data() project, is_created = Project_Name.objects.get_or_create ...

  6. MySQL语句基本操作增删改查

    select * from 表名; --------->效率低

  7. c语言实现双链表的基本操作—增删改查

    //初始化 Node*InitList() { Node*head=(Node*)malloc(sizeof(Node)); if(NULL==head) { printf("内存分配失败! ...

  8. ORM之单表增删改查

    ORM之单表增删改查 在函数前,先导入要操作的数据库表模块,model from model所在的路径文件夹 import model   在views文件中,加的路径: #就一个app01功能的文件 ...

  9. day94:flask:Jinjia2模板引擎&flask中的CSRF攻击&Flask-SQLAlchemy的创建模型类和基本的增删改查

    目录 1.Jinjia2模板引擎 1.Jinjia2加载模板并传递数据到模板中 2.Jinjia2的模板语句 3.模板中特有的变量和函数 4.模板中内置的过滤器 5.自定义过滤器 6.模板继承 2.在 ...

随机推荐

  1. GitHub更新自己Fork的项目

    转自:http://www.tuicool.com/articles/MzMJre github上有个功能叫fork,可以将别人的工程复制到自己账号下.这个功能很方便,但其有一个缺点是:当源项目更新后 ...

  2. ASP.NET Core的Kestrel服务器

    原文地址----Kestrel server for ASP.NET Core By Tom Dykstra, Chris Ross, and Stephen Halter Kestrel是一个基于l ...

  3. Asp.NET MVC 使用 SignalR 实现推送功能二(Hubs 在线聊天室 获取保存用户信息)

    简单介绍 关于SignalR的简单实用 请参考 Asp.NET MVC 使用 SignalR 实现推送功能一(Hubs 在线聊天室) 在上一篇中,我们只是介绍了简单的消息推送,今天我们来修改一下,实现 ...

  4. Java工程师成神之路

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:279558494 我们一起学Java! 一.基础篇 1.1 JVM 1.1.1. J ...

  5. Java微信公众平台接口封装源码分享

    前言:      这篇博客是在三月初动手项目的时候准备写的,但是为了完成项目只好拖延时间写这篇博客,顺便也可以在项目中应用我自己总结的的一些经验.今天看来,这些方法的应用还是可以的,至少实现了我之前的 ...

  6. MySQL5.7 error log时间显示问题

    最近有两三套环境升级到了5.7.16,发现mysql.err中的时间好像有些问题,经查是mysql 5.7后的变更,如下: root@localhost [(none)]>select now( ...

  7. 树莓派 Linux备忘

    //更新树莓派 sudo apt-mark hold raspberrypi-bootloader sudo apt-get update sudo apt-get upgrade //配置 rasp ...

  8. 【Google Chrome】 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource问题解决

    问题??打开Google Chrome浏览器报错如下: 结论  浏览器出于安全性考虑,默认对跨域访问禁止 解决方法  给浏览器添加启动参数 --allow-file-access-from-files ...

  9. video/audio在ios/android上播放兼容

    1.audio自动播放 <audio src='xxx.mp3' autoplay></audio> 上面是audio标签autoplay属性是自动播放,但是在安卓部分浏览器和 ...

  10. 【前端优化之拆分CSS】前端三剑客的分分合合

    几年前,我们这样写前端代码: <div id="el" style="......" onclick="......">测试&l ...