Mybatis入门(二)利用statement方式实现CRUD

2.1 创建一张数据库表

这是我的student表

2.2 建立与该表映射的对象

Student.java
我在Student.java文件中也设置了三个变量,和数据库表中的三个变量一一映射。
然后利用IDEA直接生成各个变量的get和set方法,以及to string 方法和构造方法。

package one;

public class Student {
    int id;
    String name;
    String gname;

    public Student(int id, String name, String gname) {
        this.id=id;
        this.name=name;
        this.gname=gname;
    }

    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 getGname() {
        return gname;
    }

    public void setGname(String gname) {
        this.gname = gname;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", gname='" + gname + '\'' +
                '}';
    }
}
2.3 创建mapper映射文件

一般把mapper映射文件和对应的java文件放在一个包里。我喜欢把mapper文件放在resources包里,运行时也没出问题。
mapper文件的命名前一部分是对应的java文件的名字,后一部分是Mapper,比如我建立的 StudentMapper.xml 文件,这也不单单只是一种命名规则,有些Mybatis运行环境的jar包不支持命名不一致的情况。

<?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="StudentMapper">  <!--双引号里面写mapper文件的路径-->
    <!--parameterType是输入参数的类型,resultType是返回值的类型
    如果输入参数是八个基本类型,则#{}里可以是任意占位符,如果是对象类型,则必须写相应的参数名字
    -->
    <select id ="selectOneStudent" parameterType="int" resultType="one.Student">
        select * from student where id = #{id}
    </select>

    <insert id="addStudent" parameterType="one.Student">
        insert into student(id,name,gname) values(#{id},#{name},#{gname} )
    </insert>

   <delete id ="deleteStudent" parameterType="int">
        delete from student where id= #{id}
    </delete>

    <update id="updateStudent" parameterType="one.Student">
    update student set name=#{name},gname=#{gname} where id=#{id}
    </update>

    <select id="selectAllStudent" resultType="one.Student">
        select * from student
    </select>

</mapper>

我的注释已经写的很清楚了,需要我们自己改的就是两个mapper标签之间的insert、delete、select、update 这些标签里的信息,用什么就添加什么标签,我的代码里把这些全都写上了,其实他们之间就是sql语句。

测试
package one;

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 java.io.IOException;
import java.io.Reader;
import java.util.List;


public class test {
 public static void main(String[] args){
    /* try {
         selectOneStudent();    //查询单个学生
     } catch (IOException e) {
         e.printStackTrace();
     }
*/
//     try {
//         selectAllStudent();   //查询多个学生
//     } catch (IOException e) {
//         e.printStackTrace();
//     }

//     try {
//         addStudent();
//     } catch (IOException e) {
//         e.printStackTrace();
//     }

//     try {
//         deleteStudent();
//     } catch (IOException e) {
//         e.printStackTrace();
//     }
     try {
         updateStudent();
     } catch (IOException e) {
         e.printStackTrace();
     }
 }


    public static void selectOneStudent()throws IOException {
    //加载Mybatis配置文件
        Reader reader = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();

        String statement = "StudentMapper.selectOneStudent";
        //通过namespace和id来确定是哪个mapper文件里的哪个作用域
        Student student=session.selectOne(statement,1);
        System.out.println(student);
        session.close();
    }

    public static void selectAllStudent()throws IOException {
        Reader reader = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();

        String statement = "StudentMapper.selectAllStudent";

        List<Student> students=session.selectList(statement);
        System.out.println(students);
        session.close();
    }

    public static void addStudent()throws IOException {
        Reader reader = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();

        String statement = "StudentMapper.addStudent";

        Student student =new Student(4,"奈良","g2");
        int count=session.insert(statement,student);
        System.out.println(count);
        session.commit();
        session.close();
    }

    public static void deleteStudent()throws IOException{
        Reader reader = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();

        String statement = "StudentMapper.deleteStudent";
        session.delete(statement,4);
        session.commit();
        session.close();
    }

    public static void updateStudent()throws IOException{
        Reader reader = Resources.getResourceAsReader("conf.xml");
        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession session = sessionFactory.openSession();

        String statement = "StudentMapper.updateStudent";
        Student student =new Student(5,"马原","g1");
        session.update(statement,student);
        session.commit();
        session.close();
    }
}

main方法里,我把不用的方法给注释掉了,按照需要自行添加或删除注释。
每个方法的前三行都是一样的代码,加载mybatis的配置文件并打开数据库连接。statement里是“mapper文件里的namespace”+“ . ”+“增删改查标签的id”值,通过statement找到对应的mapper文件以及增删改查的sql语句。
输入session再加上一个 “ . ”会弹出很多session里的方法,找出自己需要的即可。
因为前一节事务处理方式配置的是jdbc,所以除了select外,其他的操作都需要在后面加上session.commit(),手动提交。另外,无论增删改查,都需要在最后加上session.close(),关闭数据库连接。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值