【MyBatis】MyBatis实现CRUD操作

1、实现基本CRUD功能

使用MyBatis对数据完整的操作,也就是CRUD功能的实现。根据之前的内容,要想实现CRUD,只需要进行映射文件的配置。

范例:修改EmpMapper.xml文件,实现CRUD

<?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">
  <!--     每个POJO都对应MyBatis的一个命名空间,不能重复。
          resultType使用全路径
          设置命名空间,可以与不同表的同类型操作进行区分,使用时以“namespace.id”的方式调用;命名空间按照表名称给出   -->
<mapper namespace="com.github.logsave.pojo.EmpMapper">

  <insert id="creatOne" parameterType="com.github.logsave.pojo.Emp">
      INSERT INTO emp(empno,ename,job,mgr,hiredate,sal)
      VALUES (#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal})
  </insert>

  <!-- 数据更新操作,最简单的更新一定是基于Emp类的数据实现的 -->
  <update id="updateOne" parameterType="com.github.logsave.pojo.Emp">
      UPDATE emp SET empno=#{empno}, ename=#{ename}, job=#{job},
          mgr=#{mgr}, hiredate=#{hiredate}, sal=#{sal}
      WHERE empno={empno}
  </update>

  <!-- 删除数据,一般根据主键删除empno,empno这里是Integer类型 -->
  <delete id="removeOne" parameterType="java.lang.Integer">
      DELETE FROM emp WHERE empno=#{empno}
  </delete>

  <!-- 根据empno查询 -->
  <select id="selOne" resultType="com.github.logsave.pojo.Emp">
    SELECT empno,ename,job,mgr,hiredate,sal FROM emp
    WHERE empno=#{empno}
  </select>

  <!-- 查询全部数据,此时配置的resultType表示当前查询结果中每一条数据返回的对象类型,不是整个方法的返回。 -->
  <select id="selAll" resultType="com.github.logsave.pojo.Emp">
       SELECT empno,ename,job,mgr,hiredate,sal FROM emp
  </select>
</mapper>

此时已经完成了映射文件的配置。就可以利用SqlSession类对象完成具体的操作,方法如下:

  • 增加数据:public int insert(String statrment, Object parameter), 返回增加的行数;
  • 删除数据:public int delete(String statrment, Object parameter), 返回删除的行数;
  • 更新数据:public int update(String statrment, Object parameter), 返回更新的行数;
  • 查询单个数据:public T selectOne(String statrment, Object parameter);
  • 查询全部数据:public List selectList(String statement)。

测试CRUD功能,分别编写函数进行测试。

范例:执行函数主方法

public static void main(String[] args) {

    try {
        // 1、取得操作的SqlSession对象
        String resource = "mybatis-config.xml"; // MyBatis配置文件路径
        Reader reader = Resources.getResourceAsReader(resource); // 当前配置文件输入流
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); // 数据库会话工厂
        SqlSession sqlSession = sqlSessionFactory.openSession(); // 取得连接

            // 2、操作简单Java类
            // 为了测试方便,将各个方法分别编写函数进行测试。在函数中改变方法内容进行测试。
//            creat(sqlSession);                     // 增加数据
//            selectByEmpNo(sqlSession,7499);     // 按empno查询数据
//            update(sqlSession);                    // 更新数据
//            remove(sqlSession);                    // 删除数据
//            selectAll(sqlSession);                // 查询全部数据

        sqlSession.close();        // 关闭连接
    } catch(IOException e) {
        e.printStackTrace();
    }
}

范例:增加数据

public static void creat(SqlSession sqlSession) {
    Emp emp = new Emp();
    emp.setEmpno(7369);
    emp.setEname("SMITH");
    emp.setJob("CLERK");
    emp.setMgr(7902);

    Calendar c = Calendar.getInstance();
    c.set(1980,10,17);
    Date date = c.getTime();
    emp.setHiredate(date);

    emp.setSal(800.00);

    System.out.println("【INSERT】数据更新行数:"     + sqlSession.insert("com.github.logsave.pojo.EmpMapper.creatOne",emp));
    sqlSession.commit();     // 事务提交
}
【INSERT】数据更新行数:1

范例:删除数据

public static void remove(SqlSession sqlSession) {
    int empno = 7499;     // 删除数据的empno
    System.out.println("【DELETE】数据更新行数:" +
        sqlSession.delete("com.github.logsave.pojo.EmpMapper.removeOne",empno));
    sqlSession.commit();
}
【DELETE】数据更新行数:1

范例:更新数据

public static void update(SqlSession sqlSession) {
    Emp emp = new Emp();
    emp.setEmpno(7369);
    emp.setEname("Logsave");
    emp.setJob("MANAGER");
//    emp.setMgr(7839);   // 注释掉数据库中对应值为null

    Calendar c = Calendar.getInstance();
    c.set(2015,10,20);
    Date date = c.getTime();
    emp.setHiredate(date);
    emp.setSal(1600.00);

    System.out.println("【UPDATE】数据更新行数:"     + sqlSession.update("com.github.logsave.pojo.EmpMapper.updateOne",emp));
    sqlSession.commit();     // 事务提交
}
【UPDATE】数据更新行数:1

范例:查询单条数据

public static void selectByEmpNo(SqlSession sqlSession) {
    int empno = 7369;
    System.out.println("【SELECT】selectByEmpno:" + empno + "\n \t"     + sqlSession.selectOne("com.github.logsave.pojo.EmpMapper.selOne",
    empno));
    }
【SELECT】selectByEmpno:7369
     Emp [empno=7369, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov 20 00:00:00 CST 2015, sal=1600.0]

范例:查询全部数据

public static void selectAll(SqlSession sqlSession) {
    List<Emp> empList = sqlSession.selectList("com.github.logsave.pojo.EmpMapper.selAll");
    System.out.println("【SELECT】selectAll:");
    for(Emp emp: empList) {
        System.out.println("\t" + emp);
    }
}
【SELECT】selectAll:
    Emp [empno=7369, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov 20 00:00:00 CST 2015, sal=1600.0]
    Emp [empno=7521, ename=WARD, job=SALESMAN, mgr=7698, hiredate=Thu Oct 20 00:00:00 CST 1983, sal=1250.0]

现在完成了MyBatis的CRUD操作,已经可以进行简单的操作了。

2、分页显示

实现了CRUD之后,我们就应该实现数据的分页显示。分页显示所需要的参数:

  • 模糊查询的列:column;
  • 模糊查询关键字:keyWord;
  • 开始行:start(currentPage *lineSize)
  • 取得数据的长度:lineSize。

注意:MySQL中使用LIMIT进行分页,在Oracle中使用伪列ROWNUM进行分页操作。

实现分页操作需要多个参数,那么这些参数需要一次性传递完成,这个时候就需要设置Map集合,利用Map集合完成参数传递。

范例:修改EmpMapper.xml文件

  <!-- 定义分页查询,其中所有的参数都利用Map集合传递,返回的每行数据类型为Emp -->
  <select id="selAllBySplit" parameterType="java.util.Map" resultType="com.github.logsave.pojo.Emp">
    SELECT empno,ename,job,mgr,hiredate,sal FROM emp
    WHERE ${column} LIKE #{keyWord}
    LIMIT #{start}, #{lineSize}
  </select>

  <!-- 查询全部数据量,参数使用Map集合,返回COUNT()的统计结果  -->
  <select id="count" parameterType="java.util.Map" resultType="java.lang.Integer">
     SELECT COUNT(empno) FROM emp
     WHERE ${column} LIKE #{keyWord}
  </select>

下面的查询依然需要的是查询全部数据,但是需要传递参数:

  • 查询全部数据:public List selectList(String statement)

范例:实现分页查询

public static void split(SqlSession sqlSession) {
    // 分页操作必要的参数
    int currentPage = 1; // 当前所在页
    int lineSize = 3; // 每页显示的长度
    // 需要将参数设置为Map集合后传递到调用的方法里
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("column", "ename");
    map.put("keyWord", "%o%");
    map.put("start", (currentPage - 1) * lineSize);
    map.put("lineSize", lineSize);
    List<Emp> empList = sqlSession.selectList("com.github.logsave.pojo.EmpMapper.selAllBySplit", map);
    System.out.println("【SELECT】分页操作:");
    for(Emp emp: empList) {
        System.out.println("\t" + emp);
    }
}
【SELECT】分页操作:
    Emp [empno=7369, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov 20 00:00:00 CST 2015, sal=1600.0]
    Emp [empno=7777, ename=Hello, job=work, mgr=8888, hiredate=Tue Jan 01 00:00:00 CST 2019, sal=1800.0]
    Emp [empno=7771, ename=nihao, job=work, mgr=8888, hiredate=Mon Feb 02 00:00:00 CST 2015, sal=1800.0]

范例:统计数据行数

public static void count(SqlSession sqlSession) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("column", "ename");
    map.put("keyWord", "%o%");
    System.out.println("【COUNT】数据个数:"
    + sqlSession.selectOne("com.github.logsave.pojo.EmpMapper.count", map) );
}
【COUNT】数据个数:3

程序源码

原文地址:https://www.cnblogs.com/yan-lei/p/10311874.html

时间: 2024-10-05 23:25:26

【MyBatis】MyBatis实现CRUD操作的相关文章

使用MyBatis对表执行CRUD操作

一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-ma

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

本文中使用到的测试环境是上一篇博文中的测试环境. 一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis

MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)

孤傲苍狼 只为成功找方法,不为失败找借口! MyBatis学习总结(二)--使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对users表执行CRUD操作.本文中使用到的测试环境是上一篇博文中的测试环境. 一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMa

mybatis(二)执行CRUD操作的两种方式配置和注解

一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.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

【Mybatis】MyBatis对表执行CRUD操作(三)

本例在[Mybatis]MyBatis配置文件的使用(二)基础上继续学习对表执行CRUD操作 使用MyBatis对表执行CRUD操作 1.定义sql映射xml文件(EmployeeMapper.xml) 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "htt

mybatis 两种CRUD操作操作

最简单的查询 进阶1 封装util的查询 进阶2   添加一个mapper接口(同时也要有util) 进阶3 添加properties文件 进阶4 给实体类路径一个缩写 在用到的地方可以直接写缩写 例如:在mapper文件中的写法 进阶5 实体类字段名和属性名不一样的解决方案 未完待续 ................................

尚硅谷-MyBatis的CRUD操作

项目结构: User实体类代码: package com.atguigu.mybatis.bean; public class User { private int id; private String name; private int age; public User() { super(); } public User(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = ag

MyBatis 学习总结 02 对表执行增删改查(CRUD)操作 OLD

 可以对上一节中使用mybatis打开一次session的业务逻辑进行封装,封装的成工具类命名为: MyBatisUtil package com.mybatis.util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlS

mybatis学习(二)----对表进行CRUD操作

一.使用MyBatis对表执行CRUD操作--基于XML的实现 userMapper.xml映射文件如下: 1 <?xml version="1.0" encoding="utf-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"&g

MyBatis学习(2)-----------执行CRUD操作

一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-ma