莫问天涯路几重,轻衫侧帽且从容。这篇文章主要讲述Mybatis笔记 - Mapper动态代理开发方式相关的知识,希望能为你提供帮助。
使用Mapper代理的方式开发
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法。 Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mapper接口 和 Mappe.xml 配置文件即可,程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。
一、SQL配置文件
1、EmpMapper.xml
使用Mapper动态代理的方式开发时, 映射文件的namespace 必须为
Mapper接口文件 的全名。
1 < ?xml version="1.0" encoding="UTF-8" ?> 2 < !DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 < mapper namespace="Mapper.EmpMapper"> 6< !-- 根据id获取员工信息 --> 7< select id="findEmpById" parameterType="int" resultType="po.Emp"> 8select * from emp where empno = #{empno} 9< /select> 10 11< !-- 自定义条件查询员工列表 --> 12< select id="findEmpByEmpname" parameterType="java.lang.String" resultType="po.Emp"> 13select * from empwhere ename like \'%${value}%\' 14< /select> 15 16< !-- 添加员工信息 --> 17< insert id="insertEmp" parameterType="po.Emp"> 18< selectKey keyProperty="empno" order="AFTER" resultType="java.lang.Integer"> 19select LAST_INSERT_ID() 20< /selectKey> 21insert into emp(ename,job) values(#{ename},#{job}) 22< /insert> 23 24< !-- 删除员工信息 --> 25< delete id="deleteEmpById" parameterType="int"> 26delete from emp where empno=#{empno} 27< /delete> 28 29< !-- 更新员工信息 --> 30< update id="updateEmp" parameterType="po.Emp"> 31update emp set ename=#{ename},job=#{job} 32where empno=#{empno} 33< /update> 34 < /mapper>
2、pojo类
1 package po; 2 //导入相关类 3 public class Emp { 4private int empno; 5private String ename; 6private String job; 7private int mgr; 8private Date hiredate; 9private double sal; 10private double comm; 11private int deptno; 12 13@Override 14public String toString() { 15return "编号:"+empno+"姓名:"+ename+"工作:"+job+"\\n"; 16} 17set()/get()方法 ... 18 }
3、SqlMapConfig.xml
1 < ?xml version="1.0" encoding="UTF-8" ?> 2 < !DOCTYPE configuration 3 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 5 < configuration> 6< !-- 和spring整合后 environments配置将废除--> 7< environments default="development"> 8< environment id="development"> 9< !-- 使用jdbc事务管理--> 10< transactionManager type="JDBC" /> 11< !-- 数据库连接池--> 12< dataSource type="POOLED"> 13< property name="driver" value="https://www.songbingjia.com/android/com.mysql.jdbc.Driver" /> 14< property name="url" value="https://www.songbingjia.com/android/jdbc:mysql://localhost:3306/ 15scott?characterEncoding=utf-8" /> 16< property name="username" value="https://www.songbingjia.com/android/root" /> 17< property name="password" value="https://www.songbingjia.com/android/su486213" /> 18< /dataSource> 19< /environment> 20< /environments> 21 22< !-- 加载映射文件 --> 23< mappers> 24< mapper resource="Mapper/EmpMapper.xml"/> 25< /mappers> 26 < /configuration>
二、Dao层 1、开发规范
程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。相关的开发规范如下:
① 在mapper.xml中namespace等于mapper接口地址
② 接口中的方法名和mapper.xml中statement的id一致
③ 接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致
④ 接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致
【Mybatis笔记 - Mapper动态代理开发方式】 总结:以上开发规范主要是对下边的代码进行统一生成:
1 //在方法体内通过SqlSessionFactory创建SqlSession 2 SqlSession sqlSession = sqlSessionFactory.openSession(); 3 //业务操作语句 4 Emp emp = sqlSession.selectOne("test.findEmpById",empno);
2、Mapper接口
1 package Mapper; 2 //导入相关类 3 public interface EmpMapper { 4public Emp findEmpById(int empno); 5public List< Emp> findEmpByEmpname(String tname); 6public int insertEmp(Emp emp); 7public int deleteEmpById(int empno); 8public int updateEmp(Emp emp); 9 }
三、测试程序 1、Junit单元测试
1 package Test; 2 //导入相关类 3 public class Mybatis_Mapper { 4 5//使用 单例模式 管理会话工厂 6private SqlSessionFactory sqlSessionFactory; 7@Before 8public void createSqlSessionFactory() throws IOException { 9// Mybatis配置文件 10String resource = "SqlMapConfig.xml"; 11// 得到配置文件流 12InputStream inputStream = Resources.getResourceAsStream(resource); 13// 创建会化工厂,传入Mybatis配置文件信息 14sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 15} 16 17// 根据 id查询部门信息 18@Test 19public void testFindEmpById() { 20SqlSession sqlSession = sqlSessionFactory.openSession(); 21//创建EmpMapper对象,mybatis自动生成mapper代理对象 22EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class); 23Emp emp = null; 24 25try { 26//调用empMapper的方法 27emp = empMapper.findEmpById(7900); 28}finally { 29sqlSession.close(); 30} 31 32System.out.println(emp); 33} 34 35// 根据员工姓名模糊查询员工信息 36@Test 37public void testFindEmpByEmpname() { 38SqlSession sqlSession = sqlSessionFactory.openSession(); 39EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class); 40List< Emp> emp = null; 41 42try { 43//调用empMapper的方法 44emp = empMapper.findEmpByEmpname("th"); 45} 46finally { 47sqlSession.close(); 48} 49 50for(Emp e:emp) { 51System.out.println(e); 52} 53} 54 55// 添加员工信息 56@Test 57public void testInsert() { 58SqlSession sqlSession = sqlSessionFactory.openSession(); 59EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class); 60Emp emp = new Emp(); 61emp.setEname("admin"); 62emp.setJob("admin"); 63 64int flag = 0; 65try { 66flag =empMapper.insertEmp(emp); 67}finally { 68sqlSession.commit(); 69sqlSession.close(); 70} 71 72if(flag == 1) { 73System.out.println("自增主键值:"+emp.getEmpno()); 74} 75} 76 77// 更新员工信息 78@Test 79public void testUpdate() { 80SqlSession sqlSession = sqlSessionFactory.openSession(); 81EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class); 82Emp emp = new Emp(); 83emp.setEmpno(7950); 84emp.setEname("test7950"); 85emp.setJob("test7950"); 86 87int flag = 0; 88try { 89flag = empMapper.updateEmp(emp); 90}finally { 91sqlSession.commit(); 92sqlSession.close(); 93} 94 95if(flag == 1) { 96System.out.println("更新成功!"); 97} 98} 99 100// 根据id删除员工信息 101@Test 102public void testDelete() { 103SqlSession sqlSession = sqlSessionFactory.openSession(); 104EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class); 105 106int flag = 0; 107try { 108flag = empMapper.deleteEmpById(7950); 109}finally { 110sqlSession.commit(); 111sqlSession.close(); 112} 113 114if(flag == 1) { 115System.out.println("删除成功!"); 116} 117} 118 }
2、测试结果
(1)根据 id查询部门信息
文章图片
(2)根据员工姓名模糊查询员工信息
文章图片
(3)添加员工信息
文章图片
(4)更新员工信息
文章图片
(5)根据id删除员工信息
文章图片
-
推荐阅读
- NFC读卡APP
- 安卓开发 4
- DAPP 开发直通车-如何基于NEL 轻钱包来开发DAPP
- ADB(Android Debug Bridge)小结
- AndroidStudio中导入module(简单版)
- Android 广播机制
- android中的回调
- 安卓软键盘的搜索
- Android中onBackPressed()的使用