mybatis

作者: 奋斗的磊哥 | 来源:发表于2017-10-10 21:32 被阅读0次

    什么是mybatis

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

    我们的项目是通过maven管理的话,使用mybatis的时候,需要引入mybatis依赖的包

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>x.x.x</version>
    </dependency>
    

    mybatis的优缺点

    优点

    1、简单易学
    mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

    2、灵活
    mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

    3、解除sql与程序代码的耦合
    通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

    4、提供映射标签,支持对象与数据库的orm字段关系映射

    5、提供对象关系映射标签,支持对象关系组建维护

    6、提供xml标签,支持编写动态sql。

    7、不用写dao实现

    缺点

    1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。

    2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。

    3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

    4、二级缓存机制不佳

    SqlSessionFactory

    每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。
    从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。

    String resource = "org/mybatis/example/mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactorysqlSessionFactory=
    newSqlSessionFactoryBuilder().build(inputStream);
    

    创建mybatis-config.xml文件

    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
      <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/bank?useUnicode=true&characterEncoding=utf-8"/>
            <property name="username" value="root"/>
            <property name="password" value=""/>
          </dataSource>
        </environment>
      </environments>
      <mappers>
        <mapper resource="UserMapper.xml"/>
      </mappers>
    </configuration>
    

    创建映射文件UserMapper.xml

    <!DOCTYPE mapper
      PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
      <mapper namespace="user">
        <select id="selectUser" resultType="com.hemi.mybatis.bean.User">
            select * from user where uid=1;
        </select>
      </mapper>
    

    获取xml配置文件

    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    

    创建SqlSessionFactory

    SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(inputStream);
    

    获取SqlSession

    SqlSession sqlSession = factory.openSession();
    

    调用SqlSession的selectOne(命名空间.id名称);

    Object object = sqlSession.selectOne("user.selectUser");
    

    关闭SqlSession

    sqlSession.close();
    

    mybatis-plus

    <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus</artifactId>
          <version>2.0.8</version>
    </dependency>
    
    <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource"/>
            <!-- 自动扫描Mapping.xml文件 -->
            <property name="mapperLocations" value="classpath*:/mapper/*.xml"></property>
            <!--扫描实体类-->
            <property name="typeAliasesPackage" value="com.study.entity"/>
            <!--mybatis-plus全局配置-->
            <property name="globalConfig" ref="globalConfig"/>
        </bean>
    
        <!-- MP 全局配置 -->
        <bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
            <!--主键为自增长-->
            <property name="idType" value="0"/>
            <!--下划线转驼峰命名-->
            <property name="dbColumnUnderline" value="true"/>
        </bean>
    
        <!-- MyBatis 动态实现  -->
        <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 对Dao 接口动态实现,需要知道接口在哪  -->
            <property name="basePackage" value="com.study.mapper"/>
        </bean>
    

    相关文章

      网友评论

          本文标题:mybatis

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