本文共 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=root2.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()); }}