MyBatis普通模式开发

网友投稿 479 2022-09-04

MyBatis普通模式开发

普通模式,也称为传统DAO模式,就是在传统DAO模式下,定义接口和实现类,如 interface EmpDao  class EmpDaoImpl implements EmpDao.  在实现类中,用SQLSession对象调用 select insert delete update 等方法实现.目前极为少见.在传统模式下,我们需要知道SqlSession对象 实现CURD和 参数传递的处理

一、mybatis查询的三种方式

SqlSession对象本身API中就已经提供了三个查询方法,分别能够实现如下查询方式

selectOne:返回单个对象selectList:返回对象List集合selectMap:返回对象Map集合

1.准备emp表对应实体类

package com.augus01.pojo;import java.io.Serializable;import java.util.Date;public class Emp implements Serializable { private Integer empno; private String ename; private String job; private Integer mgr; private Date hiredate; private Double sal; private Double comm; private Integer deptno;}

2.创建EmpMapper.xml映射文件

特别注意的是需要在sqlMapConfig.xml中配置引入mapper文件,必须使用resource标签实现

3.进行测试

import com.augus01.pojo.Dept;import com.augus01.pojo.Emp;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.List;import java.util.Map;import java.util.Set;public class Test2 { private SqlSession sqlSession; @Before public void init(){ SqlSessionFactoryBuilder ssfb =new SqlSessionFactoryBuilder(); InputStream resourceAsStream = null; try { resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory factory=ssfb.build(resourceAsStream) ; sqlSession=factory.openSession(); } //返回单个对象 selectOne @Test public void testFindEmpOne(){ /*这里写需要执行的SQL * 就是接口类中定义的名字 * */ Emp findEmpOne = sqlSession.selectOne("findEmpOne"); System.out.println(findEmpOne); } //返回对象List集合 selectList @Test public void testFindEmpAllList(){ /*这里写需要执行的SQL * 就是接口类中定义的名字 * */ List findAllEmpList = sqlSession.selectList("findAllEmpList"); for (Emp emp : findAllEmpList) { System.out.println(emp); } } //返回对象Map集合 selectMap @Test public void testFindEmpAllMap(){ /* 这里写需要执行的SQL * 就是接口类中定义的名字 * 这里就是以EMPNO字段作为键,每一条结果作为值,这个键的名字必须和表字段大小写保持一致 * */ Map findAllEmpMap = sqlSession.selectMap("findAllEmpMap","EMPNO"); //获取map集合中的所有键 Set integers = findAllEmpMap.keySet(); //根据键取值 for (Integer integer : integers) { System.out.println(integer+ ":"+ findAllEmpMap.get(integer)); } System.out.println(); }}

二、mybatis参数传递的三种方式

对应SQL中进行参数化时设置参数而言,mybatis提供了三种方式:

单个基础数据类型作为参数多个基础数据类型的map 集合作为参数引用类型作为参数

1.创建EmpMapper2.xml映射文件

2.在sqlMapConfig.xml中设置加载EmpMapper2.xml文件

3.测试代码

import com.augus01.pojo.Emp;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.List;import java.util.Map;public class Test3 { private SqlSession sqlSession; @Before public void init(){ SqlSessionFactoryBuilder ssfb =new SqlSessionFactoryBuilder(); InputStream resourceAsStream = null; try { resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory factory=ssfb.build(resourceAsStream) ; sqlSession=factory.openSession(); } //单个基础数据类型作为参数 @Test public void testFindEmpByEmpno(){ /*这里写需要执行的SQL * 就是接口类中定义的名字 * */ Emp findEmpOne = sqlSession.selectOne("findEmpByEmpno", 7782); System.out.println(findEmpOne); } //多个基础数据类型的map 集合作为参数 @Test public void testFindEmpByDeptnoAndSal(){ /*这里写需要执行的SQL * 就是接口类中定义的名字 * Map args=new HashMap<>(); * */ //以Map集合传入数据 HashMap stringObjectHashMap = new HashMap(); //设置键所对应的值 stringObjectHashMap.put("deptno",30); stringObjectHashMap.put("sal",1000.0); //执行SQL sqlSession.selectList("findEmpByDeptnoAndSal"); List emps = sqlSession.selectList("findEmpByDeptnoAndSal", stringObjectHashMap); for (Emp emp : emps) { System.out.println(emp); } } //引用类型作为参数 @Test public void testFindEmpByDeptnoAndSal2(){ /*这里写需要执行的SQL * 就是接口类中定义的名字 * Map args=new HashMap<>(); * */ //引用类型作为参数 Emp emp1 = new Emp(); //设置参数 emp1.setDeptno(30); emp1.setSal(1000.0); //执行SQL List findEmpByDeptnoAndSal2 = sqlSession.selectList("findEmpByDeptnoAndSal2", emp1); for (Object o : findEmpByDeptnoAndSal2) { System.out.println(o); } }}

三、mybatis完成DML全部操作

1.创建EmpMapper2.xml映射文件

insert into emp values(#{empno},#{ename},#{job},#{mgr},#{hiredate},#{sal},#{comm},#{deptno}) update emp set ename = #{ename} where empno=#{empno} delete from emp where empno >= #{empno}

2.在sqlMapConfig.xml中设置加载EmpMapper2.xml文件

3.测试代码

import com.augus01.pojo.Emp;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import javax.xml.bind.annotation.XmlType;import java.io.IOException;import java.io.InputStream;import java.util.Date;public class Test4 { private SqlSession sqlSession; @Before public void init(){ SqlSessionFactoryBuilder ssfb =new SqlSessionFactoryBuilder(); InputStream resourceAsStream = null; try { resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml"); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory factory=ssfb.build(resourceAsStream) ; sqlSession=factory.openSession(); } @Test public void testAddEmp(){ /*这里写需要执行的SQL * 就是接口类中定义的名字 * */ Emp emp = new Emp(null,"张飞","test",7902,new Date(),8800.0,200.0,20); int addEmp = sqlSession.insert("addEmp", emp); //注意在增删改对数据作出影响的情况,必须提交事务 sqlSession.commit(); System.out.println(addEmp); } @Test public void testUpdateEmp(){ /*这里写需要执行的SQL * 就是接口类中定义的名字 * */ Emp emp = new Emp(); //设置属性 emp.setEmpno(7942); emp.setEname("无忌"); int updateEmpByEmpno = sqlSession.update("updateEmpByEmpno", emp); //注意在增删改对数据作出影响的情况,必须提交事务 sqlSession.commit(); System.out.println(updateEmpByEmpno); } @Test public void testDeleteEmp(){ /*这里写需要执行的SQL * 就是接口类中定义的名字 **/ int row = sqlSession.delete("deleteEmpByEmpno", 7942); //注意在增删改对数据作出影响的情况,必须提交事务 sqlSession.commit(); System.out.println(row); }}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Gin框架之Session的使用(详解)
下一篇:Linux这么在两个服务器直接传文件?
相关文章

 发表评论

暂时没有评论,来抢沙发吧~