【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】数据更新行数:
范例:删除数据
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操作的更多相关文章
- 使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作(转载)
本文转载自:http://www.cnblogs.com/jpf-java/p/6013540.html 上一篇博文MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybati ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作--基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...
- MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...
- mybatis(二)执行CRUD操作的两种方式配置和注解
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- MyBatis学习总结_02_使用MyBatis对表执行CRUD操作
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: 1 <?xml version="1.0&q ...
- 【转】MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作
[转]MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作 上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据, ...
- Mybatis的学习总结二:使用Mybatis对表进行CRUD操作【参考】
一.使用Mybatis对表进行CRUD操作------基于XML的实现 1.定义SQL的映射文件 2.在conf.xml中进行注册. 2.创建测试类 [具体过程参考:Mybatis的学习总结一] 二. ...
- 【Mybatis】MyBatis对表执行CRUD操作(三)
本例在[Mybatis]MyBatis配置文件的使用(二)基础上继续学习对表执行CRUD操作 使用MyBatis对表执行CRUD操作 1.定义sql映射xml文件(EmployeeMapper.xml ...
随机推荐
- InnoDB索引概述,二分查找法,平衡二叉树
索引是应用程序设计和开发的一个重要方面.如果索引太多,应用的性能可能会受到影响:如果索引太少,对查询性能又会产生影响.要找到一个合适的平衡点,这对应用的性能至关重要. 如果知道数据的使用,从一开始就应 ...
- WPF的Label默认的padding不为0
1.如图: 要求让“Tools” 左对齐,代码中已设置:HorizontalContentAlignment="Left" <Label Foreground="W ...
- Java SE 基础知识
常量: 常量是一种标识符,它的值在运行期间恒定不变,并且常量在程序中只能被引用,而不能被重新赋值. 常量的命名规则: 1.在 Java 中,在变量声明中加入 final 关键字代表常量,加入 stat ...
- *2_3_5_加入reference model
摘自:http://book.2cto.com/201408/46009.html 在2.1节中讲述验证平台的框图时曾经说过,reference model用于完成和DUT相同的功能. referen ...
- 将一个表的数据导入到另一个表的sql
ALTER PROCEDURE [dbo].[usp_ea_Copy] ( @eaId int, @createdBy varchar(), @newEaId int output ) AS decl ...
- JavaScript函数——闭包
闭包 概念 只有函数内部的子函数才能读取局部变量,所以闭包可以理解成"定义在一个函数内部的函数".在本质上,闭包是将函数内部和函数外部连接起来的桥梁 例子 function out ...
- Python——爬虫学习1
爬虫了解一下 网络爬虫(Web crawler),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本. Python的安装 本篇教程采用Python3 来写,所以你需要给你的电脑装上Python ...
- 【原】spring boot source 1.5 中不支持 diamond 运算符
最近要开发新的项目,就花了几天时间看了下spring boot的相关资料,然后做了一个demo,不得不说开发效率确实很快,几行注解就完成了事务,aop,数据库等相关配置:但由于先前习惯了spring ...
- javaweb浏览器url上项目名称的更改
如何改变上面url项目名称地址,如把04去掉改成teachershare 如下图:在项目设置中设置web context-root属性,将04去掉. 就可以用这个登录了. 要注意的是如果之前已经部署在 ...
- php之连接mssql(sql server)新手教程
ps:网上搜了很多教程,讲的都很好,就是都有点漏的地方,花了一天时间查缺补漏终于弄好了(;´༎ຶД༎ຶ`),希望我的教程能帮到新手,还有写博客的时候因为不小心按错一个键,导致重写了,博客园这个编辑器真 ...