博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis(6)---mapper动态代理方式
阅读量:4087 次
发布时间:2019-05-25

本文共 3649 字,大约阅读时间需要 12 分钟。

mapper动态代理实现原理:

mapper接口开发方式只需要程序员编写mapper接口(相当于dao层接口)

mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法同dao接口实现类方法。

mapper接口开发需要遵循以下规范:

1)、mapper.xml文件中的namespace和mapper接口的类路径相同,即namespace设置为接口的类路径

2)、mapper接口中的方法名称应该与mapper.xml中的id名称相同,即接口中的方法名和映射文件中的id名称相同

3)、mapper接口中的方法中的参数类型应该与mapper.xml中的每个sql的paramterType的类型相同

4)、mapper接口中的方法中的结果类型和mapper.xml中的每个sql的resultType的类型相同

操作步骤如下:

1、新建项目mybatisDemo,并导入所需要的jar包

2、在src下新建mybatis的核心配置文件mybatis.cfg.xml

2.1、新建数据库配置db.properites

driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8user=rootpassword=root
2.2、mybatis.cfg.xml配置文件如下:

3、创建数据库

4、在src下新建数据库表t_student所对应的实体类StudentVO

package com.cn.vo;/** * 学生实体类 * */public class StudentVO {	private int stuId;           //学生id	private String stuName;      //学生姓名	private String sex;          //学生性别		public int getStuId() {		return stuId;	}	public void setStuId(int stuId) {		this.stuId = stuId;	}	public String getStuName() {		return stuName;	}	public void setStuName(String stuName) {		this.stuName = stuName;	}	public String getSex() {		return sex;	}	public void setSex(String sex) {		this.sex = sex;	}	@Override	public String toString() {		return "StudentVO [stuId=" + stuId + ", stuName=" + stuName + ", sex="				+ sex + "]";	}		}
注:上面的实体类字段取名会存在一个隐患问题,不知发现没有,数据库字段stu_id对应实体类字段stuId,stu_name对应stuName,sex对应sex

数据库表字段名和实体类字段名不一致解决问题:

5、在src下新建包名com.cn.mapper,然后在包下新建实体类映射文件 StudentMapper.xml

select LAST_INSERT_ID() insert into t_student( stu_name, sex )values( #{stuName}, #{sex} )
6、在src新建包com.cn.dao,然后新建接口类StudentDao(注意:和StudentMapper.xml文件中的<mapper>标签对的namespace属性值相同)

package com.cn.dao;import com.cn.vo.StudentVO;public interface StudentMapper {	//根据学生id查询学生信息	public StudentVO selectStudentById(int stuId);	//根据学生名称查询学生信息	public StudentVO selectStudentByName(String stuName);	//新增用户	public void insertUser(StudentVO studentVO);}
7、在mybatis.cfg.xml中注册映射文件StudentMapper.xml

8、测试

1、新增Student测试代码如下

package com.cn.test1;import org.apache.ibatis.session.SqlSession;import com.cn.dao.StudentDao;import com.cn.utils.MybatisUtil;import com.cn.vo.StudentVO;/** * 新增学生 * */public class InsertStudent {	public static void main(String[] args) {		//1.获得sqlSession		SqlSession session=MybatisUtil.getSqlSession(true);		//2.获取mapper接口的代理对象		StudentDao studentDao=session.getMapper(StudentDao.class);		//3.实例化对象		StudentVO studentVO =new StudentVO();		studentVO.setStuName("哈哈");		studentVO.setSex("男");		//4.通过mapper接口添加学生		studentDao.insertUser(studentVO);	}}
2、通过id查询Student测试代码如下:

package com.cn.test1;import org.apache.ibatis.session.SqlSession;import com.cn.dao.StudentDao;import com.cn.utils.MybatisUtil;import com.cn.vo.StudentVO;public class FindUserById {	public static void main(String[] args) {		//1.获取sqlSession 		SqlSession session=MybatisUtil.getSqlSession();		//2.获取mapper接口的代理对象		StudentDao stuDao=session.getMapper(StudentDao.class);		//3.sessio操作执行查询		StudentVO stuVO=stuDao.selectStudentById(2);		//4.打印结果		System.out.println(stuVO.toString());	}}

你可能感兴趣的文章
四两拨千斤!深度主动学习综述2020
查看>>
了解DeepFakes背后的技术
查看>>
VSCode cv2 PyTorch 的红色波浪线【2020年解决方案】
查看>>
记【安装mmcv教程】 以及 遇到的Error
查看>>
深度解读AI从业者必备算法和工具 -- 公开课
查看>>
深度学习换脸发展调研-Deepfake
查看>>
《剑指Offer》JZ3:从尾到头打印链表
查看>>
《剑指Offer》JZ14:输出链表中倒数第k个结点
查看>>
《剑指Offer》JZ15:反转链表(双解法)
查看>>
《剑指Offer》JZ16:合并两个排序的链表(迭代法)
查看>>
(python版)《剑指Offer》JZ25:复杂链表的复制(详解)
查看>>
(python版)《剑指Offer》JZ36:两个链表的第一个公共结点
查看>>
(python版)《剑指Offer》JZ55:链表中环的入口结点
查看>>
(python版)《剑指Offer》JZ4:重建二叉树
查看>>
(python版)《剑指Offer》JZ17:树的子结构
查看>>
(python版)《剑指Offer》JZ18:二叉树的镜像
查看>>
(python版)《剑指Offer》JZ22:从上往下打印二叉树
查看>>
(python版)《剑指Offer》JZ24:二叉树中和为某一值的路径
查看>>
(python版)《剑指Offer》JZ38:二叉树的深度
查看>>
(python版)《剑指Offer》JZ39:判断是否为平衡二叉树
查看>>