美文网首页橙小张的Java后端学习之路
那些书本中没告诉你的MyBatis

那些书本中没告诉你的MyBatis

作者: 橙小张 | 来源:发表于2019-01-07 21:12 被阅读5次

不管是《MyBatis从入门到精通》,还是21天精通MyBatis,都告诉了你怎么做?但是没告诉你为什么以及是什么。
本篇将会讲解MyBatis(Spring-MyBatis)的一些关键类,以及关于DB操作的内容

关键类

  • SqlSessionFactory
  • SqlSessionFactoryBean
  • SqlSession
  • MapperFactoryBean
  • SqlSessionDaoSupport
  • SqlSessionTemplate
  • MapperScannerConfigurer

如何访问数据库

mysql -uadmin -pxxx -h58.87.87.129 -P32007

当我们需要连接MySQL时,需要用到几个属性:

  • 用户名
  • 密码
  • 地址
  • 端口

这在MySQL中叫一次会话(session),在JDBC中JDBC定义了规范,其实现类具体去操作,在MyBatis中,MyBatis的关键类SqlSession定义了如何去操作数据库,例如:

  • selectOne
  • selectAll
  • selectList
  • insert
  • …..

具体的实现类有:

  • DefaultSqlSession
  • SqlSessionTemplate
  • SqlSessionManager

当然我们都不会直接使用这几个实现类,我们一般是这样的:

public class UserService {
    
    @Resource
    private UserMapper userMapper;
}

那这其中究竟是怎么做到这样简化的呢?

实现细节

SqlSessionFactoryBean&SqlSessionFactory

上面介绍了关键类SqlSession, 那如何创建SqlSession呢?MyBatis使用了工厂方法来创建SqlSession,由于工厂和SqlSession是一对多的关系,也就是说一个Factory可以创建多个SqlSession,MyBatis-Spring将SqlSessionFactory放入了容器的生命周期中,也就出现了SqlSessionFactoryBean,我们一般这样配置:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
</bean>
  • DataSource(必须配置): SqlSessionFactory 需要一个(也可以是多个) DataSource

MapperFactoryBean

大家都知道MyBatis是基于Mapper的,一般情况MyBatis的一个Mapper就对应一张DB的Table,就有了

  • UserMapper
  • PersonMapper
  • AddressMapper
  • …..

那MapperFactoryBean是干什么用的呢?

  • 告诉容器(可以是Spring容器):我的这个Mapper可以访问这个数据,所以MapperFactoryBean需要配置MapperSqlSessionFactory
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="org.mybatis.spring.sample.mapper.UserMapper" />
  <property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>

到目前为止,我们没有定义mapper.xml文件,但是我们可以这样用了

public interface UserMapper {
  @Select("SELECT * FROM users WHERE id = #{userId}")
  User getUser(@Param("userId") String userId);
} 

AND

public class FooServiceImpl implements FooService {

private UserMapper userMapper;

public void setUserMapper(UserMapper userMapper) {
  this.userMapper = userMapper;
}

public User doSomeBusinessStuff(String userId) {
  return this.userMapper.getUser(userId);
}
}

但是只用注解的话面对繁杂的SQL,会显得代码凌乱,就出现了使用xml来描述SQL(当然其他的ORM甚至可以使Markdown),MyBatis要知道SQL文件在哪里有两种方式:

  • 和mapper接口在同一个包路径下
  • mapperLocations:将目录地址设置到mapperLocations中
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="mapperLocations" value="classpath*:sample/config/mappers/**/*.xml" />
</bean>

MapperScannerConfigurer

在上面的方法中,我们需要把Mapper当做Service的Bean中的属性设置进去,这样显得太麻烦了,就有了MapperScannerConfigurer

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="org.mybatis.spring.sample.mapper" />
</bean>
  • basePackage 属性是让你为映射器接口文件设置基本的包路径
  • MapperScannerConfigurer , 它 将 会 查 找 类 路 径 下 的 映 射 器 并 自 动 将 它 们 创 建 成 MapperFactoryBean

相关文章

  • 那些书本中没告诉你的MyBatis

    不管是《MyBatis从入门到精通》,还是21天精通MyBatis,都告诉了你怎么做?但是没告诉你为什么以及是什么...

  • 那些没告诉你的话

    ⒈ 春天要来了 我在的村庄依然很冷 夜晚会有呼啸而过的风 很久看不到星星 你不回来了 该到哪找你呢 我不怕路途遥远...

  • 那些HR没告诉你的事

    我一直觉得我人生中最幸运的事情之一,就是在刚毕业的时候,阴差阳错进了猎头行业。从一个不知道是猎头做什么的小白,成长...

  • 那些照片没告诉你的故事

    今天朋友圈辣眼睛的程度,堪比当年QQ空间满屏“年少轻狂的错误,追悔莫及的恶果,最好得幸福”点点点。也是呢,年底...

  • 那些It girls没告诉你的事

    那些It girls没告诉你的事,我告诉你。 1.好看是因为身材好。看看kate moss、alexa chung...

  • 书本中那些得以领悟的句子…

    1.未曾哭过长夜的人,不足以语人生。——歌德 2.梦里走了千万里,醒来还是在床上。——艾青 3.为了避免结束,你避...

  • 那些学长学姐没告诉你的事

    孟子在《大学》里说,“大学之道,在明明德,在亲民,在止于至善。”暂且不说空泛的修身养性,但是,身处大学的我们,究竟...

  • 省图没告诉你的那些事

    最近看到小六的推荐,忍不住tfxxr溶血性想人吓人休息要入手欣频老师的新书,同时之前将省图的书籍在手上停大的小的留...

  • 那些书本教我的

    题记:书确实意味着思想和精神的独立,没有人知道你当时在想什么。 拉莫娜在10岁的时候,母亲给她办了汽车图书馆的借书...

  • 我再也不会感谢让我流泪的人

    我再也不会感谢让我流泪的人,是的,再也不会。 从小到大,书本告诉我,心灵鸡汤告诉我,学会感谢那些伤害你的人,他们让...

网友评论

    本文标题:那些书本中没告诉你的MyBatis

    本文链接:https://www.haomeiwen.com/subject/vviprqtx.html