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();
- }
- }
范例:增加数据
- = 7369"SMITH""CLERK"7902=1980,10,17=800.00"【INSERT】数据更新行数:"
- + sqlSession.insert("com.github.logsave.pojo.EmpMapper.creatOne"}
- 【INSERT】数据更新行数:1
范例:删除数据
- public static void remove(SqlSession sqlSession) {int empno = 7499; // 删除数据的empnoSystem.out.println("【DELETE】数据更新行数:" +
- sqlSession.delete("com.github.logsave.pojo.EmpMapper.removeOne",empno));
- sqlSession.commit();
- }
- 【DELETE】数据更新行数:1
范例:更新数据
- = 7369"Logsave""MANAGER"=2015,10,20=1600.00"【UPDATE】数据更新行数:"
- + sqlSession.update("com.github.logsave.pojo.EmpMapper.updateOne"}
- 【UPDATE】数据更新行数:1
范例:查询单条数据
- empno = 7369"【SELECT】selectByEmpno:" + empno + "\n \t"
- + sqlSession.selectOne("com.github.logsave.pojo.EmpMapper.selOne"
- 【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之后,我们就应该实现数据的分页显示。分页显示所需要的参数:
注意: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 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
程序源码
原文链接:http://www.cnblogs.com/yan-lei/p/10311874.html