MyBatis 专题
您的位置:java > MyBatis专题 > Mybatis增删改查(CURD)
Mybatis增删改查(CURD)
作者:--    发布时间:2019-11-20

前面的小节我们已经讲到用接口的方式编程。使用这种方式,需要注意的一个地方就是,在user.xml 配置文件中,mapper namespace="com.h3.mybatis.inter.iuser" ,命名空间对应非常重要,名称不能有错,必须与我们定义的 package 和 接口一致。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下操作:

  1. 使用 mybatis 查询用户数据(读取用户列表)
  2. 使用 mybatis 增加用户数据
  3. 使用 mybatis 更新用户数据
  4. 使用 mybatis 删除用户数据

查询数据,前面已经讲过简单的查询单个用户数据,在这里将查询出用户列表,
要查询出列表,也就是返回 list, 在我们这个例子中也就是list<user> , 要以这种方式返回数据,需要在user.xml里面配置返回的类型 resultmap, 注意不是 resulttype, 而这个resultmap 所对应的应该是我们自己配置。

在此示例中,我们需要使用到以下表:

接下我们创建一个表:user,并插入一条记录信息,其结构如下所示:

create table `user` (
  `id` int(10) unsigned not null auto_increment,
  `name` varchar(64) not null default '',
  `dept` varchar(254) not null default '',
  `website` varchar(254) default '',
  `phone` varchar(16) not null default '',
  primary key (`id`)
) engine=innodb auto_increment=2 default charset=latin1;

-- ----------------------------
-- records of user
-- ----------------------------
insert into `user` values ('1', 'h3', 'tech', 'http://www.h3.com', '13800009988');

1、创建工程并配置所需环境

我们首先来创建一个工程:mybatis-curd-03,与第一节中介绍的环境配置一样,加入所需的 jar 包:mysql-connectormybatis3.jar。配置 src/config/configure.xml,其文件内容如下:

<?xml version="1.0" encoding="utf-8"?>
<!doctype configuration public "-//mybatis.org//dtd config 3.0//en"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typealiases>
        <typealias alias="user" type="com.h3.mybatis.models.user" />
    </typealiases>

    <environments default="development">
        <environment id="development">
            <transactionmanager type="jdbc" />
            <datasource type="pooled">
                <property name="driver" value="com.mysql.jdbc.driver" />
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/testdb" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </datasource>
        </environment>
    </environments>

    <mappers>
        <!-- // power by http://www.h3.com -->
        <mapper resource="com/h3/mybatis/models/user.xml" />
    </mappers>
</configuration>

2、创建 java 类和接口

在这里需要创建一个类和一个接口:user.java类和iuser.java接口,user.java类位于包 com.h3.mybatis.models 下,user.java类代码内容如下:

package com.h3.mybatis.models;

public class user {
    private int id;
    private string name;
    private string dept;
    private string phone;
    private string website;

    public string getwebsite() {
        return website;
    }
    public void setwebsite(string website) {
        this.website = website;
    }
    public int getid() {
        return id;
    }
    public void setid(int id) {
        this.id = id;
    }
    public string getname() {
        return name;
    }
    public void setname(string name) {
        this.name = name;
    }
    public string getdept() {
        return dept;
    }
    public void setdept(string dept) {
        this.dept = dept;
    }
    public string getphone() {
        return phone;
    }
    public void setphone(string phone) {
        this.phone = phone;
    }

}

iuser.java接口位于包com.h3.mybatis.dao 下,iuser.java接口代码内容如下:

package com.h3.mybatis.dao;

import java.util.list;

import org.apache.ibatis.annotations.select;

import com.h3.mybatis.models.user;
/**
 * 
 * @author h3
 *
 */
public interface iuser {
    //@select("select * from user where id= #{id}")
    //public user getuserbyid(int id);
    public list<user> getuserlist();

    public void insertuser(user user);

    public void updateuser(user user);

    public void deleteuser(int userid);

    public user getuser(int id);
}

这里还需要一个xml文件,与前一小节中一样,使用的是 user.xml,在这我们分别对应了增删改查的操作(每一个操作的 id 对应于iuser接口的方法),其内容如下:

user.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.h3.mybatis.dao.iuser">

    <select id="getuser" parametertype="int"
        resulttype="com.h3.mybatis.models.user">
        select *
        from user
        where id = #{userid}
    </select>


    <insert id="insertuser" parametertype="user">
        insert into user(name,
        dept, website,phone)
        values(#{name}, #{dept}, #{website}, #{phone})
    </insert>

    <select id="getuserlist" resulttype="com.h3.mybatis.models.user">
        select * from user
    </select>

    <update id="updateuser" parametertype="user">
        update user
        set
        name=
        #{name},
        dept = #{dept},
        website = #{website},
        phone = #{phone}
        where
        id =
        #{id}
    </update>

    <delete id="deleteuser" parametertype="int">
        delete from user where id = #{id}
    </delete>

</mapper>

测试程序主类:

import java.io.reader;
import java.text.messageformat;
import java.util.list;

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.h3.mybatis.dao.iuser;
import com.h3.mybatis.models.user;

public class main {
    private static sqlsessionfactory sqlsessionfactory;
    private static reader reader;

    static {
        try {
            reader = resources.getresourceasreader("config/configure.xml");
            sqlsessionfactory = new sqlsessionfactorybuilder().build(reader);
        } catch (exception e) {
            e.printstacktrace();
        }
    }

    public static sqlsessionfactory getsession() {
        return sqlsessionfactory;
    }

    /**
     * @param args
     */
    public static void main(string[] args) {
        // todo auto-generated method stub
        sqlsession session = sqlsessionfactory.opensession();
        try {
            //sqlsessionfactory.getconfiguration().addmapper(iuser.class);
            //user user = (user) session.selectone( "com.h3.mybatis.models.usermapper.getuserbyid", 1);

            // 用户数据列表
            getuserlist();
            // 插入数据
            // testinsert();

            // 更新用户
            //testupdate();

            // 删除数据
            //testdelete();

        } finally {
            session.close();
        }
    }

    //
    public static void testinsert()
    {
        try
        {
            // 获取session连接
            sqlsession session = sqlsessionfactory.opensession();
            // 获取mapper
            iuser usermapper = session.getmapper(iuser.class);
            system.out.println("test insert start...");
            // 执行插入
            user user = new user();
            user.setid(0);
            user.setname("google");
            user.setdept("tech");
            user.setwebsite("http://www.google.com");
            user.setphone("120");
            usermapper.insertuser(user);
            // 提交事务
            session.commit();

            // 显示插入之后user信息
            system.out.println("after insert");
            getuserlist();
            system.out.println("test insert finished...");
        }
        catch (exception e)
        {
            e.printstacktrace();
        }
    }

    // 获取用户列表
    public static void getuserlist() {
        try {
            sqlsession session = sqlsessionfactory.opensession();
            iuser iuser = session.getmapper(iuser.class);
            // 显示user信息
            system.out.println("test get start...");
            printusers(iuser.getuserlist());
            system.out.println("test get finished...");
        } catch (exception e) {
            e.printstacktrace();
        }
    }

    public static void testupdate()
    {
        try
        {
            sqlsession session = sqlsessionfactory.opensession();
            iuser iuser = session.getmapper(iuser.class);
            system.out.println("test update start...");
            printusers(iuser.getuserlist());
            // 执行更新
            user user = iuser.getuser(1);
            user.setname("new name");
            iuser.updateuser(user);
            // 提交事务
            session.commit();
            // 显示更新之后user信息
            system.out.println("after update");
            printusers(iuser.getuserlist());
            system.out.println("test update finished...");
        }catch (exception e)
        {
            e.printstacktrace();
        }
    }

    // 删除用户信息
    public static void testdelete()
    {
        try
        {
            sqlsession session = sqlsessionfactory.opensession();
            iuser iuser = session.getmapper(iuser.class);
            system.out.println("test delete start...");
            // 显示删除之前user信息
            system.out.println("before delete");
            printusers(iuser.getuserlist());
            // 执行删除
            iuser.deleteuser(2);
            // 提交事务
            session.commit();
            // 显示删除之后user信息
            system.out.println("after delete");
            printusers(iuser.getuserlist());
            system.out.println("test delete finished...");
        }catch (exception e)
        {
            e.printstacktrace();
        }
    }

    /**
     * 
     * 打印用户信息到控制台
     * 
     * @param users
     */
    private static void printusers(final list<user> users) {
        int count = 0;

        for (user user : users) {
            system.out.println(messageformat.format(
                    "============= user[{0}]=================", ++count));
            system.out.println("user id: " + user.getid());
            system.out.println("user name: " + user.getname());
            system.out.println("user dept: " + user.getdept());
            system.out.println("user website: " + user.getwebsite());
        }
    }
}

测试运行

执行以上程序,如果没有问题,应该能正确输出。那么这里所有增删改查都完成了,需要注意的是在增加,更改,删除的时候需要调用 session.commit() 来提交事务,这样才会真正对数据库进行操作提交保存,否则操作没有提交到数据中。
到此为止,简单的单表操作已经完成了,接下来在下一节中将会讲解多表联合查询,以及结果集的选取。如遇到不明白的问题,请留言评论。

最后,附上项目结构图,如下:


以下是纠正/补充内容:

getuserint id的方法执行时 user.xml文件中是#{id}而不是#{userid}  提交时间:2019-08-30
网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册