MyBatis--------基础使用总结

一、基础使用

  • 什么是MyBatis:

    MyBatis是针对映射器构造的SQL构建的轻量级框架,并且通过配置生成对应的JavaBean返回给调用者!在MyBatis中你可以根据情况定义动态SQL来满足不同场景的需要,比其他框架灵活的多。

  • MyBatis的基础运行流程:

    API接口层(接受请求然后调用)---->数据处理层(根据请求进行sql数据库操作)<----基础支撑层(连接管理、事务管理、配置加载和缓存处理等,为上层数据处理提供最基础的支撑)


    加载数据源连接数据库->加载映射器配置文件->当调用映射器接口中的方法时,映射器会根据根据自身路径去与加载的所有配置文件中namespace属性值去一一匹配(中间任何一步例如该映射器接口对应的配置文件路径出错未成功加载或者与任一namespace不匹配都会报错找不到该类型接口的注册地)->再根据id对应方法名和参数返回值等调用相应sql语句进行查询,查询结果输出映射关联对象进行返回(因为这里的sql语句和对应关系是我们写的,而参数输入映射和输出映射才是自动完成的,所以Mabatis是半自动化;类比Hibernate输入映射,Hql到sql的转化和输出映射都是自动完成的)

    与Hibernate一样,都是需要2建立(数据库表和对应的实体类),2配置(mybatis-config.xml和mapper.xml),1控制(代码逻辑控制)

  • 缓存机制

    为了提高数据利用率和减小服务器和数据库的压力,MyBatis 会对于一些查询提供会话级别的数据缓存,会将对某一次查询,放置到SqlSession 中,在允许的时间间隔内,对于完全相同的查询,MyBatis 会直接将缓存结果返回给用户,而不用再到数据库中查找。

  • 动态SQL:

     根据传递过来的参数和参数值进行判断,动态生成sql语句进行数据库的增删改查。

    根据参数的设置进行判断来动态组装SQL,以满足不同业务的要求。远比Hibernate和JDBC大量判断Java代码要清晰和明确的多。(一个对参数是否为空的判断在java代码中,一个在xml配置文件中)

    强大之处在于:针对同一个表而言,多次不同条件的查询只需写一次select,多次不同字段的更新只需写一次update


二、细节总结


1.<typeAlias alias="User" type="com.yiibai.mybatis.models.User"/> 这个别名非常重要,在具体的类的映射中,比如:User.xml 中 resultType 就是对应这个。
2.SQL语句中数据库列名不区分大小写,
3.两种方法中,其一在实现mapper代理中,切记:在mapper.xml中namespace必须等于mapper接口地址,否则找不到接口对应的映射器!
4.MyBatis提供自动映射的功能,前提是数据库列名和JavaBean的属性名一致(不区分大小写),但是一般情况下我们对数据库和java对象命名规范不同,导致无法自动映射。MyBatis考虑到了这点,所以在sql语句的编写中,当遇到与属性名不对应的列名时候,我们可以使用列的别名来与JavaBean对象属性名对应(格式:select a_clumn as aclumn)。

  • 5.切记:当自定义结果集与POJO对象的映射关系时候,返回值类型标签不再是resultType,而是resultMap!

6.如果你的数据库是规范命名的,即每一个单词都用下划线分割,POJO采用驼峰式命名方法,那么你也可以在mybatis-config.xml设置mapUnderscoreToCamelCase为true,这样无需使用列的别名就可以完全实现从数据库到POJO的自动映射了。所以说规范开发还是很必要的,一定程度上可以提高我们的开发效率!另一方面,我们在映射器配置文件中,也可以使用resultMap元素自定义映射规则。

  • 7.在映射器.xml配置文件,默认情况下的SQL语句都是支持sqlSession对象下的一级缓存的,当设置<cache />标签同时POJO对象实现Serializable接口即可时候,即可支持SqlSessionFactory下的二级缓存!

8.在MyBatis的sql拼接中符号%代表通配符!
例如:a%-abc
      %a-bca
      %a%-bac、abc、bca
9.在有些SQL语句中:where1=1主要是为了满足sql语句的基本格式,与后面的and判断语句进行拼接,始终为真,所以真正的sql语句取决于后面的拼接语句!一般不建议使用,直接使用where标签即可!
10.动态SQL语句:
    where标签会默认将拼接过来的sql语句中第一个and去掉!
    set标签会默认将拼接过来的sql语句中最后一个逗号去掉!
11.最最坑爹的细节问题:
    当缺少sqlSession.commit()这语句时候,在select数据库时候,没有任何影响;但是只要我们进行update、delete和insert等对数据库的修改操作时,控制台包括日志等都提示sql语句正常且更新数据库成功。实际数据库没有进行任何的修改!我找了很长时间,才找到无意删除了这条语句,而且从控制台上你是根本找不到任何异常的,只能通过笨办法找出来。
    所以,在对数据库进行修改操作时候,事务的概念极其重要!当你运行了sql语句,但是最后没用进行sqlSession.commit()对事务进行提交操作的时候,数据库是不会发生任何改变的!!!


三、遗留问题

  1. 私有化构造参数?单例模式
  2. 为什么mybatis-config.xml文件必须放在与src同级的config目录下?
  3. log4j日志的使用

猜你喜欢

转载自blog.csdn.net/qq_37230121/article/details/81836120