【MyBatis】MyBatis实现CRUD操作
程序员文章站
2022-04-28 13:40:45
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