当前位置: 移动技术网 > IT编程>开发语言>Java > 【MyBatis】MyBatis实现CRUD操作

【MyBatis】MyBatis实现CRUD操作

2019年01月24日  | 移动技术网IT编程  | 我要评论
1、实现基本CRUD功能 使用MyBatis对数据完整的操作,也就是CRUD功能的实现。根据之前的内容,要想实现CRUD,只需要进行映射文件的配置。 范例:修改EmpMapper.xml文件,实现CRUD 此时已经完成了映射文件的配置。就可以利用SqlSession类对象完成具体的操作,方法如下: ...

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

程序源码

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网