经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MyBatis » 查看文章
MyBatis实现CRUD操作
来源:cnblogs  作者:Python学习者  时间:2019/1/24 9:48:27  对本文有异议

1、实现基本CRUD功能

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

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

  1. <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper
  2.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  3.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  4.   <!--     每个POJO都对应MyBatis的一个命名空间,不能重复。
  5.           resultType使用全路径
  6.           设置命名空间,可以与不同表的同类型操作进行区分,使用时以“namespace.id”的方式调用;命名空间按照表名称给出   --><mapper namespace="com.github.logsave.pojo.EmpMapper">
  7.  
  8.   <insert id="creatOne" parameterType="com.github.logsave.pojo.Emp">  INSERT INTO emp(empno,ename,job,mgr,hiredate,sal)
  9.       VALUES (#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal})  </insert>
  10.  
  11.   <!-- 数据更新操作,最简单的更新一定是基于Emp类的数据实现的 -->
  12.   <update id="updateOne" parameterType="com.github.logsave.pojo.Emp">  UPDATE emp SET empno=#{empno}, ename=#{ename}, job=#{job}, 
  13.           mgr=#{mgr}, hiredate=#{hiredate}, sal=#{sal}
  14.       WHERE empno={empno}  </update>
  15.  
  16.   <!-- 删除数据,一般根据主键删除empno,empno这里是Integer类型 -->
  17.   <delete id="removeOne" parameterType="java.lang.Integer">  DELETE FROM emp WHERE empno=#{empno}  </delete>
  18.  
  19.   <!-- 根据empno查询 -->
  20.   <select id="selOne" resultType="com.github.logsave.pojo.Emp">SELECT empno,ename,job,mgr,hiredate,sal FROM emp 
  21.     WHERE empno=#{empno}  </select>
  22.  
  23.   <!-- 查询全部数据,此时配置的resultType表示当前查询结果中每一条数据返回的对象类型,不是整个方法的返回。 -->
  24.   <select id="selAll" resultType="com.github.logsave.pojo.Emp">   SELECT empno,ename,job,mgr,hiredate,sal FROM emp 
  25.   </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功能,分别编写函数进行测试。

范例:执行函数主方法

  1. 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查询数据    
  2. //            update(sqlSession);                    // 更新数据//            remove(sqlSession);                    // 删除数据//            selectAll(sqlSession);                // 查询全部数据        
  3.         sqlSession.close();        // 关闭连接} catch(IOException e) {
  4.         e.printStackTrace();
  5.     }
  6. }

范例:增加数据

  1.   = 7369"SMITH""CLERK"7902=1980,10,17=800.00"【INSERT】数据更新行数:" 
  2.     + sqlSession.insert("com.github.logsave.pojo.EmpMapper.creatOne"}
  1. INSERT】数据更新行数:1

范例:删除数据

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

范例:更新数据

  1.   = 7369"Logsave""MANAGER"=2015,10,20=1600.00"【UPDATE】数据更新行数:" 
  2.     + sqlSession.update("com.github.logsave.pojo.EmpMapper.updateOne"}
  1. UPDATE】数据更新行数:1

范例:查询单条数据

  1.    empno = 7369"【SELECT】selectByEmpno:" + empno + "\n \t" 
  2.     + sqlSession.selectOne("com.github.logsave.pojo.EmpMapper.selOne"
  1. SELECTselectByEmpno7369 Emp [empno=7369, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov 20 00:00:00 CST 2015, sal=1600.0]

范例:查询全部数据

  1. public static void selectAll(SqlSession sqlSession) {
  2.     List<Emp> empList = sqlSession.selectList("com.github.logsave.pojo.EmpMapper.selAll");
  3.     System.out.println("【SELECT】selectAll:");for(Emp emp: empList) {
  4.         System.out.println("\t" + emp);
  5.     }    
  6. }
  1. SELECTselectAll
  2.     Emp [empno=7369, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov 20 00:00:00 CST 2015, sal=1600.0]
  3.     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文件

  1.   <!-- 定义分页查询,其中所有的参数都利用Map集合传递,返回的每行数据类型为Emp -->
  2.   <select id="selAllBySplit" parameterType="java.util.Map" resultType="com.github.logsave.pojo.Emp">SELECT empno,ename,job,mgr,hiredate,sal FROM emp
  3.     WHERE ${column} LIKE #{keyWord}
  4.     LIMIT #{start}, #{lineSize}  </select>
  5.   
  6.   <!-- 查询全部数据量,参数使用Map集合,返回COUNT()的统计结果  -->
  7.   <select id="count" parameterType="java.util.Map" resultType="java.lang.Integer"> SELECT COUNT(empno) FROM emp 
  8.      WHERE ${column} LIKE #{keyWord}  </select>

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

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

范例:实现分页查询

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

范例:统计数据行数

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

程序源码

原文链接:http://www.cnblogs.com/yan-lei/p/10311874.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号