在这一篇中,让我们使用接口来实现一个用户数据的增删改查。

完成后的项目结构如下图所示:

在这里,person代表了一个用户的实体类。在该类中,描述了相关的信息,包括id、name、age、id_num信息。而personMapper则是该实体类的一个配置文件。需要注意的是,在上一篇博文中,namespace属性的值是其本身,而在这一篇中,使用的是接口。那么两者有什么区别呢?使用接口,那么相关的操作方法不用自己去实现,只需要调用该接口的相关的方法就能够实现相应的功能。

那么,在这里就有一个问题,接口如何实例化呢?直接new吗?这当然不行,在这里要想得到接口的实例,需要使用session的getmapper方法。然后就能够得到接口的实例,通过调用接口的相关方法,就能够实现相应的功能。在这里有一点需要注意的是,调用完方法之后,要记得调用session.commit()方法,将相应的结果保存于数据库中,另外,不要忘记调用close()方法来关闭session。

到这里,可能又有人要问了,那么这个接口与要操作的数据之间怎么保持联系呢?换句话说,我调用了这个方法,Mybatis怎么就知道这个方法是用来干什么的。其实在这里,有一点需要注意的就是,这个接口中的方法名必须与配置文件中的相对应属性的id保持一致。

好了到这里,让我们看看person实体类与该类的配置文件吧。

person.java

public class person {
private int id;
private int age;
private String name;
private String id_num; public person() { } public person(int id) {
this.id = id;
} public person(String name) {
this.name = name;
} public person(int id, int age, String name, String id_num) {
super();
this.id = id;
this.age = age;
this.name = name;
this.id_num = id_num;
} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getId_num() {
return id_num;
} public void setId_num(String id_num) {
this.id_num = id_num;
} @Override
public String toString() {
return "person [id=" + id + ", age=" + age + ", name=" + name
+ ", id_num=" + id_num + "]" + "\n";
}

  personMapper.xml

<mapper namespace="cn.jiang.dao.personDao">
<!-- save -->
<insert id="save">
insert into tb_person values(#{id} , #{name} , #{age} , #{id_num});
</insert> <!-- delete -->
<delete id="delete">
delete from tb_person
<where>
<choose>
<when test="id != 0">
id = #{id}
</when>
<when test="name != null">
name = #{name}
</when>
<when test="id_num != null">
id_num = #{id_num}
</when>
</choose>
</where>
</delete> <!-- update -->
<update id = "update">
update tb_person set name=#{name} , age = #{age} , id_num=#{id_num}
where id = #{id};
</update> <!-- search -->
<select id="search" resultType="cn.jiang.domain.person">
select * from tb_person
<where>
<choose>
<when test="id != 0">
id = #{id}
</when>
<when test="name != null">
name = #{name}
</when>
<when test="id_num != null">
id_num = #{id_num}
</when>
</choose>
</where>
</select>
</mapper>

  在这里,mapper中的namespace属性使用的就是为接口,而不再是其xml文件。好,现在让我们来看看该接口吧。

personDao.java

public interface personDao {
//save
public void save(person per);
//delete
public boolean delete(person per);
//update
public boolean update(person per);
//search
public List<person> search(person per);
}

  好了,虽说直接调用该接口的方法就能够实现相关的数据操作,但是,对其进行一些封装,还是能够方便以后的使用,同时也能够是代码更加简洁美观。现在让我们来看看对该接口实现的一个封装类。

public class PerDao {
//save
public void save(person per)
{
SqlSession session = MyBatisUnit.getSession();
personDao dao = session.getMapper(personDao.class); dao.save(per);
session.commit();
session.close();
}
//delete
public boolean delete(person per)
{
boolean result = false;
SqlSession session = MyBatisUnit.getSession();
personDao dao = session.getMapper(personDao.class); result = dao.delete(per);
session.commit();
session.close(); return result;
}
//update
public boolean update(person per)
{
boolean result = false;
SqlSession session = MyBatisUnit.getSession();
personDao dao = session.getMapper(personDao.class); result = dao.update(per);
session.commit();
session.close(); return result;
}
//search
public List<person> search(person per)
{
List<person> result = null;
SqlSession session = MyBatisUnit.getSession();
personDao dao = session.getMapper(personDao.class); result = dao.search(per);
session.commit();
session.close();
return result;
}
}

  好了,到这里,基本上就完成了。读者如果想了解MyBatisUnit类的具体功能以及源代码,请看上一篇博文《Mybatis的学习总结(一)——使用配置文件实现增删改查》。另外,要提醒的是,在使用MybatisUnit来调用getSession的时候,如果没有写config.xml配置文件,会抛出NullPointException。原因,请参照MyBatisUnit的源代码。

Mybatis学习总结(二)—使用接口实现数据的增删改查的更多相关文章

  1. SQLAlchemy(二):SQLAlchemy对数据的增删改查操作、属性常用数据类型详解

    SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 目录 SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 1.用se ...

  2. Mysql学习笔记(三)对表数据的增删改查。

    正文内容. 这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mys ...

  3. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  4. django学习-12.访问不同url/接口地址实现对指定数据的增删改查功能

    1.前言 通过前面博客[django学习-10.django连接mysql数据库和创建数据表]里的操作,我们已经成功在数据库[hongjingsheng_project]里创建了一张数据表[hello ...

  5. Mybatis框架基于注解的方式,实对数据现增删改查

    编写Mybatis代码,与spring不一样,不需要导入插件,只需导入架包即可: 在lib下 导入mybatis架包:mybatis-3.1.1.jarmysql驱动架包:mysql-connecto ...

  6. Mybatis实现数据的增删改查

    Mybatis实现数据的增删改查 1.项目结构(使用maven创建项目) 2.App.java package com.GetcharZp.MyBatisStudy; import java.io.I ...

  7. mysql学习笔记一 —— 数据的增删改查

    1.连接mysql mysql 直接回车(是以root身份,密码空,登陆的是本机localhost) [root@www mysql]# mysql -uroot -p123 -S /var/lib/ ...

  8. Hibernate3回顾-5-简单介绍Hibernate session对数据的增删改查

    5. Hibernate对数据的增删改查 5.1Hibernate加载数据 两种:get().load() 一. Session.get(Class arg0, Serializable arg1)方 ...

  9. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

随机推荐

  1. 使用XCode---下载组件

    XCode是一个轻量级的ORM组件(对象与关系数据库映射),提供以面向对象的方式操作数据库的功能,能够解决90%以上的数据库操作场景. 做为X系列组件最重要的一员,XCode秉承了简单实用的特点,力求 ...

  2. 使用 CustomScript 扩展程序自动执行 Linux 虚拟机自定义任务

    NingKuangWSSC WS ARD 高级项目经理 您可能已经从Windows扩展程序博客中了解了针对 Windows 虚拟机的 CustomScript扩展程序,现在的好消息是,这一扩展程序也已 ...

  3. tinyxml开源库的基本用法

    最近项目中的某个功能需要写xml,由于项目中已经引入了tinyxml,所以不再寻找其他开源库. 前提:你得有个xml对象,声明tinyxml的对象:基于tinyxml的内存管理,TiXmlDocume ...

  4. adb getprop setprop watchprop用法

    在android系统中,有一些初始化的配置文件,例如: /init.rc /default.prop /system/build.prop 文件里面里面配置了开机设置的系统属性值,这些属性值,可以通过 ...

  5. Fork 一个仓库并同步

    Fork 一个示例仓库 Fork 是对一个仓库的克隆.克隆一个仓库允许你自由试验各种改变,而不影响原始的项目. 一般来说,forks 被用于去更改别人的项目(贡献代码给已经开源的项目)或者使用别人的项 ...

  6. CSS里的 no-repeat 是什么意思

    CSS里的 no-repeat是针对背景图片来说的.当你设置了no-repeat这个属性后,你的背景图片将不会被重复,再换一种说法,你在网站上所看到的背景图片就是你所添加的图片, 不会出现平铺或者重复 ...

  7. 《BackboneJS框架的技巧及模式》(2)

    <BackboneJS框架的技巧及模式>(2) 本文紧接第一部分:<BackboneJS框架的技巧及模式(1)> 作者:chszs,转载需注明.博客主页:http://blog ...

  8. kindle paperwhite 使用说明

    calibre,eink必备转换软件. easypub,lucida制作的软件,支持txt to epub:txt to mobi,可以实现目录. 售后电话:400 817 0100 正常的设计格式转 ...

  9. jquery实现停留半秒后再选择

    jquery实现tab停留半秒后,选中菜单.切换tab下的内容: var showHandler=null; function init(){ $("#tab_ul").find( ...

  10. CodeForces 371D. Vessels

    暴力+胡乱优化就过了..tags给的东西似乎什么都没用到.....CF的数据是不是有点水啊.....果然是没有营养的题目..... D. Vessels time limit per test 2 s ...