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】数据更新行数:

范例:删除数据

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】数据更新行数:

范例:更新数据

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】数据更新行数:

范例:查询单条数据

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:
Emp [empno=, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov :: CST , 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=, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov :: CST , sal=1600.0]
Emp [empno=, ename=WARD, job=SALESMAN, mgr=, hiredate=Thu Oct :: CST , 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=, ename=Logsave, job=MANAGER, mgr=null, hiredate=Fri Nov :: CST , sal=1600.0]
Emp [empno=, ename=Hello, job=work, mgr=, hiredate=Tue Jan :: CST , sal=1800.0]
Emp [empno=, ename=nihao, job=work, mgr=, hiredate=Mon Feb :: CST , 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】数据个数:

程序源码

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

  1. 使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

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

    本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...

  3. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

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

    一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...

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

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

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

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...

  7. MyBatis学习总结_02_使用MyBatis对表执行CRUD操作

    一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...

  8. 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    [转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...

  9. Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】

    一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...

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

    本例在[Mybatis]MyBatis配置文件的使用(二)基础上继续学习对表执行CRUD操作 使用MyBatis对表执行CRUD操作 1.定义sql映射xml文件(EmployeeMapper.xml ...

随机推荐

  1. Spring MVC 使用kaptcha生成验证码

    Spring MVC 使用kaptcha生成验证码 1.下载kaptcha-2.3.2.jar(或直接通过该文章附件下载) http://code.google.com/p/kaptcha/downl ...

  2. Rechnernetz

    1.Der Aufbau des Internets 1.1 Randabschnitt Er besteht aus Rechner,der mit Internet verbunden ist.D ...

  3. Android studio的调试方法

    1. DDMS DDMS 全称 Dalvik Debug Monitor Service, dalvik虚拟机调试监控服务. 可以进行的操作有:为测试设备截屏,查看特定行程中正在运行的线程以及堆信息. ...

  4. winform httplicent调用API

    绑定datagriview Uri uri = new Uri("http://localhost:49423");//地址            HttpClient clien ...

  5. 撩课-Java每天10道面试题第1天

    1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...

  6. 图解源码之FutureTask篇(AQS应用)

    所以,FutureTask既可以由Executor来调度执行,也可以由调度线程调用FutureTask.run()直接执行. FutureTask是通过AQS的模板设计模式来实现阻塞get方法的. 从 ...

  7. aabb问题

    输出所有aabb型的完全平方数 这个问题主要是提供一个判断完全平方的思路,就是用floor函数 #include <iostream> #include <string> #i ...

  8. UGUI——重写Image类实现进度条

    目的: 游戏中经常会用到进度条,但是美术给的图片用filled一拉伸就很难看,如下图 第一种模式是九宫格模式,第二种是filled.而我们需要的是两种可结合的. 如何实现: 新建一个类,继承image ...

  9. MySQL三层逻辑架构

    MySQL的存储引擎架构将查询处理与数据的存储/提取相分离.下面是MySQL的逻辑架构图: 第一层负责连接管理.授权认证.安全等等. 每个客户端的连接都对应着服务器上的一个线程.服务器上维护了一个线程 ...

  10. NOI 2016 区间 解题报告

    题目描述 在数轴上有 n个闭区间 [l1,r1],[l2,r2],...,[ln,rn].现在要从中选出 m 个区间,使得这 m个区间共同包含至少一个位置.换句话说,就是使得存在一个 x,使得对于每一 ...