Mybatis注解、Mybatis运行原理

注解

作用:mybatis为了简化mapper.xml文件,但是动态Sql依然使用mapper.xml文件。

  • mapper.xml和注解是可以共同存在的。
  • 使用注解时,mybatis.xml中<mappers ‘>使用<package =/>或者是<mapper class=’’‘/>

注解示例

1、基本的增删改查

 @Select("select * from teacher")
 public List<Teacher> selAll();
 
 //增删改返回值都是int
 @Insert("insert into teacher values(default,#{name})")
 public int add(Teacher teacher);
 
 @Update("update teacher set name=#{name} where id=#{id}")
 public int update(Teacher teacher);
 
 @Delete("delete from teacher where id=#{id}")
 public int delete(int id);

2、使用AutoMapping根据查询学生信息查询老师信息

@Select("select s.id,s.name,age,tid,t.id `teacher.id`,t.name `teacher.name` from stu s left join teacher t on s.tid=t.id")
 List<Stu> selAll();

3、使用注解配置resultMap,根据查询老师信息查询学生信息

  • 在StudentMapper中,查询全部学生信息
@Select("select * from stu where tid=#{tid}")
 List<Stu> selStu(int tid);
  • 在TeacherMapper中,配置resultMap
    注:@Results相当于<resultMap ‘/>
    @Result,id=true时相当于<id’>标签,否则相当于<result’>。
    @Many相当于<collection’>标签
    @One相当于<association’>标签
@Results(value={@Result(id=true,property="id",column="id"),
     @Result(property="name",column="name"),
     @Result(column="id",property="list",many=@Many(select="com.mapper.StudentMapper.selStu"))
   })
 @Select("select * from teacher")
 public List<Teacher> selAndStu();

Mybatis运行原理

  • Resources类, Mybatis中IO流工具类。作用:加载mybatis.xml配置文件。
  • SqlSessonFactoryBuilder() 构建器。作用:创建SqlSessionFactory接口的实现类。
  • XMLconfigBuilder类, Mybatis全局配置文件内容构建器类。作用:负责读取流内容并转换为JAVA代码。
  • Configuration类, 封装了全局配置文件所有配置信息。
  • DefaultSqlSessionFactory类,是SqlSessionFactory接口的实现类。
  • Transaction事务类。每个SqlSession会带有一个Transaction对象。
  • TransactionFactory事务工厂。负责生产Transaction。
  • Executor类,Mybatis执行器。作用:负责执行SQL命令,相当于JDBC中statement对象(或者PrepareStatement或CallableStatement),默认执行器为SimpleExcutor、批量操作为BatchExcutor,通过openSession(参数控制)
  • DefaultSqlSession类是SqlSession接口的实现类
    10.ExceptionFactory类,Mybatis中异常工厂。
    运行流程:
    在这里插入图片描述
    文字描述:

首先,在Mybatis运行开始时需要先通过Resources加载全局配置文件,下面需要实例化SqlSessionFactoryBuilder构建器,帮助SqlSessionFactory接口实现DefaultSqlSessionFactory。
其次,在实例化DefaultSqlSessionFactory之前,需要先创建XmlConfigBuilder解析全局配置文件流,并把解析结果存放在Configuration之中,之后把Configuration传递给DefaultSqlSessionFactory。到此SqlSessionFactory工厂创建成功。
然后,由SqlSessionFactory工厂创建SqlSession,每次创建SqlSession时,都需要TransactionFactory创建Transactio对象,同时还需要创建SqlSession的执行器Excutor,最后实例化DefaultSqlSession,传递给SqlSession接口。
最后, 根据项目需求使用SqlSession接口中的API完成具体的事务操作。
如果事务执行成功,提交给数据库,关闭SqlSession。
如果事务执行失败,需要进行rollback回滚事务。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值