使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方法和Mapper接口开发方法。 Mapper接口开发方式是基于入门程序的基础上,对 控制程序 进行分层开发,程序员只需要 编写mapper接口Mappe.xml 配置文件即可,程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

一、SQL配置文件

1、EmpMapper.xml

使用Mapper动态代理的方式开发时, 映射文件namespace 必须为  Mapper接口文件全名

 <?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">
<mapper namespace="Mapper.EmpMapper">
<!-- 根据id获取员工信息 -->
<select id="findEmpById" parameterType="int" resultType="po.Emp">
select * from emp where empno = #{empno}
</select> <!-- 自定义条件查询员工列表 -->
<select id="findEmpByEmpname" parameterType="java.lang.String" resultType="po.Emp">
select * from emp where ename like '%${value}%'
</select> <!-- 添加员工信息 -->
<insert id="insertEmp" parameterType="po.Emp">
<selectKey keyProperty="empno" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into emp(ename,job) values(#{ename},#{job})
</insert> <!-- 删除员工信息 -->
<delete id="deleteEmpById" parameterType="int">
delete from emp where empno=#{empno}
</delete> <!-- 更新员工信息 -->
<update id="updateEmp" parameterType="po.Emp">
update emp set ename=#{ename},job=#{job}
where empno=#{empno}
</update>
</mapper>

2、pojo类

 package po;
//导入相关类
public class Emp {
private int empno;
private String ename;
private String job;
private int mgr;
private Date hiredate;
private double sal;
private double comm;
private int deptno; @Override
public String toString() {
return "编号:"+empno+" 姓名:"+ename+" 工作:"+job+"\n";
}
set()/get()方法 ...
}

3、SqlMapConfig.xml

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理-->
<transactionManager type="JDBC" />
<!-- 数据库连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/
scott?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="su486213" />
</dataSource>
</environment>
</environments> <!-- 加载映射文件 -->
<mappers>
<mapper resource="Mapper/EmpMapper.xml"/>
</mappers>
</configuration>

二、Dao层

1、开发规范

程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。相关的开发规范如下:

① 在mapper.xml中namespace等于mapper接口地址

② 接口中的方法名和mapper.xml中statement的id一致

③ 接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致

④ 接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致

总结:以上开发规范主要是对下边的代码进行统一生成:

 //在方法体内通过SqlSessionFactory创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//业务操作语句
Emp emp = sqlSession.selectOne("test.findEmpById",empno);

2、Mapper接口

 package Mapper;
//导入相关类
public interface EmpMapper {
public Emp findEmpById(int empno);
public List<Emp> findEmpByEmpname(String tname);
public int insertEmp(Emp emp);
public int deleteEmpById(int empno);
public int updateEmp(Emp emp);
}

三、测试程序

1、Junit单元测试

 package Test;
//导入相关类
public class Mybatis_Mapper { //使用 单例模式 管理会话工厂
private SqlSessionFactory sqlSessionFactory;
@Before
public void createSqlSessionFactory() throws IOException {
// Mybatis配置文件
String resource = "SqlMapConfig.xml";
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 创建会化工厂,传入Mybatis配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
} // 根据 id查询部门信息
@Test
public void testFindEmpById() {
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建EmpMapper对象,mybatis自动生成mapper代理对象
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = null; try {
//调用empMapper的方法
emp = empMapper.findEmpById(7900);
}finally {
sqlSession.close();
} System.out.println(emp);
} // 根据员工姓名模糊查询员工信息
@Test
public void testFindEmpByEmpname() {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
List<Emp> emp = null; try {
//调用empMapper的方法
emp = empMapper.findEmpByEmpname("th");
}
finally {
sqlSession.close();
} for(Emp e:emp) {
System.out.println(e);
}
} // 添加员工信息
@Test
public void testInsert() {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = new Emp();
emp.setEname("admin");
emp.setJob("admin"); int flag = 0;
try {
flag = empMapper.insertEmp(emp);
}finally {
sqlSession.commit();
sqlSession.close();
} if(flag == 1) {
System.out.println("自增主键值:"+emp.getEmpno());
}
} // 更新员工信息
@Test
public void testUpdate() {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class);
Emp emp = new Emp();
emp.setEmpno(7950);
emp.setEname("test7950");
emp.setJob("test7950"); int flag = 0;
try {
flag = empMapper.updateEmp(emp);
}finally {
sqlSession.commit();
sqlSession.close();
} if(flag == 1) {
System.out.println("更新成功!");
}
} // 根据id删除员工信息
@Test
public void testDelete() {
SqlSession sqlSession = sqlSessionFactory.openSession();
EmpMapper empMapper = sqlSession.getMapper(EmpMapper.class); int flag = 0;
try {
flag = empMapper.deleteEmpById(7950);
}finally {
sqlSession.commit();
sqlSession.close();
} if(flag == 1) {
System.out.println("删除成功!");
}
}
}

2、测试结果

(1)根据 id查询部门信息

(2)根据员工姓名模糊查询员工信息

(3)添加员工信息

(4)更新员工信息

(5)根据id删除员工信息

-

Mybatis笔记 - Mapper动态代理的更多相关文章

  1. MyBatis笔记——Mapper动态代理

    前提概要 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法. Mappe ...

  2. JavaWeb_(Mybatis框架)Mapper动态代理开发_三

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  3. 【Mybatis】-- Mapper动态代理开发注意事项

    1.1. Mapper动态代理方式 1.1.1. 开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对 ...

  4. Mybatis之Mapper动态代理

    一.什么是Mapper的动态代理 采用Mapper动态代理方法只需要编写相应的Mapper接口(相当于Dao接口),那么Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同Dao接 ...

  5. MyBatis使用Mapper动态代理开发Dao层

    开发规范 Mapper接口开发方法只需要程序员编写Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同原始Dao接口实现类方法. Mappe ...

  6. Mybatis(五)Spring整合Mybatis之mapper动态代理开发

    要操作的数据库: IDEA创建的Java工程,目录结构如下: 一.导包 1.spring的jar包 2.Mybatis的jar包 3.Spring+mybatis的整合包. 4.Mysql的数据库驱动 ...

  7. MyBatis通过Mapper动态代理来实现curd操作

    MyBatis官方推荐使用mapper代理方法开发mapper接口,程序员不需要编写mapper实现类,使用mapper代理方法时,输入参数可以使用pojo包装对象或者map对象,保证dao的通用性 ...

  8. MyBatis使用mapper动态代理实现DAO接口

    工具: mysql 5.5.62   IDEA 参考自:https://www.cnblogs.com/best/p/5688040.html 遇到的问题: 无法读取src/main/java下配置文 ...

  9. Mybatis之旅第二篇-Mapper动态代理方式

    一.引言 通过上一篇mybatis的入门学习,我们已经会使用mybatis实现简单的增删改查,但是我们也发现了用原始Dao开发的一些问题: Dao方法体存在重复代码:通过SqlSessionFacto ...

随机推荐

  1. SSM框架整合依赖

    <dependencies> <!--mybatis核心jar包--> <dependency> <groupId>org.mybatis</gr ...

  2. 逆向思维——cf1241D

    /* 给定一个序列a,每次可以把值为x的所有元素放到a的首部或尾部,问将a变为lis的最少操作步数 对原序列离散化后重新打标记, 可以反着来考虑这个问题:即固定连续的元素值为[l,r]的点不动,那么剩 ...

  3. CF232E Quick Tortoise , Fzoj 3118

    这一题由于数据较多,我们考虑离线处理. 分治.对于两个点s,t,如果起点在mid这条横线上方,终点在下方,那么它必定会穿过mid这条线.所以只要s可以到mid上一点x,x可以到t,st就是安全的. 用 ...

  4. 9、TestNG介绍与安装

    介绍 TestNG是一个受JUnit和NUnit启发的测试框架,但引入了一些新功能,使其更加强大和易于使用,例如: 注释. 在任意大的线程池中运行你的测试,这些线程池有各种可用的策略(所有方法在他们自 ...

  5. 如何使用Intellij IDEA工具导入SVN项目

    Intellij IDEA是目前主流的IDE开发工具,工程项目导入也是必不可少的操作,本文讲述如何用 IDEA工具导入SVN项目. 步骤一:选择VCS打开Intellij IDEA开发工具,在导航栏中 ...

  6. 使用shell脚本查看文件类型

    显示文件类型 #如查看 /etc 目录 [root@localhost ~]# sh test.sh /etc /etc/ [目录文件] #如查看 /etc 目录下所有文件 [root@localho ...

  7. 《深入理解Java虚拟机》-(实战)boolean类型在虚拟机中是如何处理的

    这里先引出Java的8大基本类型.直接上图吧. 可以看到,除了boolean和char类型之外,越往下的类型的值域是包含以上的值域的.因此,从上面的基本类型转换成下面的基本类型,无需强制转换.关于它们 ...

  8. Flask数据库的基本操作

    Flask操作数据库基本操作   常用的SQLAlchemy字段类型 类型名 python中类型 说明 Integer int 普通整数,一般是32位 SmallInteger int 取值范围小的整 ...

  9. 5、如何快速找到多个字典中的公共键(key) 6 如何让字典保持有序 7 如何实现用户的历史记录功能(最多n条)

    5.如何快速找到多个字典中的公共键(key) from random import randint,sample #随机取数 # a = sample("ABCDEF",randi ...

  10. JavaScript小实例-文本循环变色效果

    在现实生活中我们常常看到文字循环变色的效果,此效果不仅能让人们印象深刻,还提高了美观度,代码及注释如下: <!DOCTYPE html> <html> <head> ...