二、Mybatis实现对数据库的增删改查

准备工作:

如果还没有完成Mybatis的核心配置,请参考“一、Mybatis核心配置”,先自行完成Mybatis的核心配置。

此外,为了测试Mybatis对数据库的增删改查操作,我们需要先创建一个名为“demo1”的数据库,再创建一个名为“dept”的表。创建表的sql文件内容为:

    -- ----------------------------

    -- Table structure for dept

    -- ----------------------------

    DROP TABLE IF EXISTS `dept`;

    CREATE TABLE `dept` (

     `DEPTNO` int(2) NOT NULL AUTO_INCREMENT,

     `DNAME` varchar(20) DEFAULT NULL,

     `LOC` varchar(30) DEFAULT NULL,

     PRIMARY KEY (`DEPTNO`)

    ) ENGINE=InnoDB AUTO_INCREMENT=51DEFAULT CHARSET=utf8;


    -- ----------------------------

    -- Records of dept

    -- ----------------------------

    INSERT INTO `dept` VALUES ('10','ACCOUNTING', 'NEW YORK');

    INSERT INTO `dept` VALUES ('20','RESEARCH', 'DALLAS');

    INSERT INTO `dept` VALUES ('30','SALES', 'CHICAGO');

    INSERT INTO `dept` VALUES ('40','OPERATIONS', 'BOSTON');

当然,你也可以使用自己已经创建好的数据库和表,此时你需要修改相应的配置文件中的配置信息。注意:此处我们使用的数据库是MySQL,如需使用其它数据库,请自行更改相应的配置信息。

1. 配置实体类

    在src/main/java目录下(如果是普通java项目,则在src目录下,这里默认是Maven项目),创建名为“com.domain”的package,在该package中创建名为“Dept”的实体类,内容如下:

    package com.domain;

    public class Dept {

        private Integer deptNo;

        private String dname;

        private String loc;

        public Integer getDeptNo() {

            return deptNo;

        }

        public void setDeptNo(Integer deptNo) {

            this.deptNo = deptNo;

        }

        public String getDname() {

            return dname;

        }

        public void setDname(String dname) {

            this.dname = dname;

        }

        public String getLoc() {

            return loc;

        }

        public void setLoc(String loc) {

            this.loc = loc;

        }

        @Override

        public String toString() {

            return "Dept [deptNo=" + deptNo + ", dname=" + dname + ", loc=" + loc + "]";

        }

    }

效果图如下:


创建实体类

2. 配置映射文件

    在src/main/resources目录下,创建名为“mapper”的package,在该package中创建名为“DeptMapper.xml”的映射文件,内容如下:

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE mapper

      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

    <mapper namespace="com.domain.Dept">

        <select id="selectDept" parameterType="Integer" resultType="com.domain.Dept">

            select * from dept where deptno = #{deptno}

        </select>

        <insert id="insertDept" parameterType="com.domain.Dept">

            insert into dept values(#{deptNo}, #{dname}, #{loc})

        </insert>

        <update id="updateDept" parameterType="com.domain.Dept">

            update dept set dname=#{dname}, loc=#{loc} where deptno=#{deptNo}

        </update>

        <delete id="deleteDept" parameterType="Integer">

            delete from dept where deptno=#{deptno}

        </delete>

    </mapper>

然后在Mybatis配置文件“mybatis.xml”中,添加该映射文件,如图所示:


添加映射文件

3. 实现新增功能,实现代码如下:

    package com.test;

    import java.io.IOException;

    import java.io.InputStream;

    import org.apache.ibatis.io.Resources;

    import org.apache.ibatis.session.SqlSession;

    import org.apache.ibatis.session.SqlSessionFactory;

    import org.apache.ibatis.session.SqlSessionFactoryBuilder;

    import com.domain.Dept;

    public class Test {

         public static void main(String[] args) {

          SqlSession session = null;

          try {

               //配置文件路径

               String resource = "mybatis.xml";

               //读取配置文件

               InputStream is = Resources.getResourceAsStream(resource);

               //获取SqlSessionFactory对象

               SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

               //获取SqlSession对象

               session = ssf.openSession();

               //执行添加

               Dept dept = new Dept();

               dept.setDeptNo(50);

               dept.setDname("Technology");

               dept.setLoc("Huston");

               session.insert("insertDept", dept);

               session.commit();

          } catch (IOException e) {

               e.printStackTrace();

          } finally {

               //关闭Session

               if (session != null)

                    session.close();

              }

         }

    }

执行完成后,可以使用Navicat查看dept表新增了一条记录,这说明我们成功实现了新增功能,如图所示:


成功添加deptno为50的记录

4. 实现修改功能,核心代码如下:

    //配置文件路径

    String resource = "mybatis.xml";

    //读取配置文件

    InputStream is = Resources.getResourceAsStream(resource);

    //获取SqlSessionFactory对象

    SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

    //获取SqlSession对象

    SqlSession session = ssf.openSession();

    //执行修改

    Dept dept = session.selectOne("selectDept", 50);

    dept.setDname("TECHNOLOGY");

    dept.setLoc("HUSTON");

    session.update("updateDept", dept);

    session.commit();

执行成功后,我们可以查询出这条记录,来确定我们修改成功,至于如何查询,请往下看。

5. 实现查询功能,核心代码如下:

    //配置文件路径

    String resource = "mybatis.xml";

    //读取配置文件

    InputStream is = Resources.getResourceAsStream(resource);

    //获取SqlSessionFactory对象

    SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

    //获取SqlSession对象

    SqlSession session = ssf.openSession();

    //查询deptno为50的dept

    Dept dept = session.selectOne("selectDept", 50);

    System.out.println(dept);

执行结果如图所示:


成功修改deptno为50的记录

6. 实现删除功能,核心代码如下:

    //配置文件路径

    String resource = "mybatis.xml";

    //读取配置文件

    InputStream is= Resources.getResourceAsStream(resource);

    //获取SqlSessionFactory对象

    SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);

    //获取SqlSession对象

    SqlSession session = ssf.openSession();

    //执行删除

    session.delete("deleteDept", 50);

    session.commit();

执行成功之后,我们可以发现,在Navicat中已经没有deptno为50的记录了,说明我们已经删除成功了,如图所示:


成功删除deptno为50的记录

至此,我们简单地使用Mybatis实现了对数据库的增删查改的功能。


参考资料:

    http://www.mybatis.org/mybatis-3/getting-started.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,240评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,328评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,182评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,121评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,135评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,093评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,013评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,854评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,295评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,513评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,398评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,989评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,636评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,657评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容