• 【Mybatis】Bonus02 补充



    关于主键生成问题

    Mybatis的主键生成是基于JDBC的使用主键【getGeneratedKeys()】方法

    也就是说,必须要JDBC驱动的支持才行

        @Test
        public void junitTest() throws SQLException {
            Connection connectionByOriginalJdbc = CompleteJdbcUtils.getConnectionByOriginalJdbc();、
    PreparedStatement preparedStatement
    = connectionByOriginalJdbc.prepareStatement("");
    ResultSet generatedKeys
    = preparedStatement.getGeneratedKeys(); }

    useGeneratedKeys 表示使用数据库生成的主键,

    keyProperty 表示绑定数据表的主键返回给实体类的哪个字段

    在之前的插入SQL中并不需要主键生成功能就能完成主键自增生成,

    看来是JDBC自动生成的【如果开启就像官方说的一样,是强制生成的】


    实现主键生成的第二种方式:

    使用<SelectKey> 标签

    SELECT last_insert_id 表示查询最后一次插入的id

    如果在SQL执行前查询,就返回最后一次插入的记录的id

    然后我们的插入SQL就会按这个查询的id插入,这样插入是有问题的,

    所以要选择AFTER,在执行插入后返回主键,再生成

    对应的,使用注解实现的方式


    关于getMapper底层实现原理

    这是一个查询的SQL

    先获取会话实例

    然后从会话中获取Mapper实现类

    调用查询SQL,完成后释放资源

    通过调试查看源码

    其实也是使用动态代理完成的

    根据command的类型来处理,

    一共四个Case,也正好就是我们Mapper的4个SQL标签

    而在增删改3个,都是直接注入SQL即可,因为返回只有修改的记录结果数

    SELECT反而更为复杂

    需要根据查询的结果要求进行处理

    摘要自: https://www.bilibili.com/video/BV1dV411o7bA?p=11


    关于参数占位符

    在多个普通参数注入的情况,我们可以使用这种占位符表示,

    也就是不通过名称标识注入

    如果是多个实体类类型的参数。。。


     关于驼峰命名匹配

    Java实体类声明的映射字段是以驼峰命名的,

    例如:

      userId,userName,userPassword

    但是数据库的字段是不区分大小写的,尤其是Oracle数据库,会直接全大写

    一般设置的字段会是这样,

    例如:

      user_id,user_name,user_password

    或者Oracle全大写的这样

      USER_ID,USER_NAME,USER_PASSWORD

    Mybatis的设置项中可以开启一个驼峰命名映射,帮助这个字段进行匹配

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    如果你打算完全一致的声明ORM字段列表示,请不要设置驼峰匹配!!!

    这会导致Mybatis无法找到数据表的字段【显示一切正常】

    你会根本找不到什么问题,所有配置完全一致,结果就是返回null


    关于模糊查询Like 更好的安全写法


  • 相关阅读:
    Codeforces Round #536 E. Lunar New Year and Red Envelopes /// 贪心 记忆化搜索 multiset取最大项
    牛客网暑期ACM多校训练营(第五场) F
    关于线段树or 树状树状 在二维平面搞事情!Orz
    ZOJ 3822 ( 2014牡丹江区域赛D题) (概率dp)
    HDU4336 Card Collector (概率dp+状压dp)
    POJ 2151 Check the difficulty of problems(概率DP)
    CF E2
    HDU4089 Activation(概率DP+处理环迭代式子)
    HDU4035 Maze (概率DP)
    牛客 Rabbit的数列 (线段树维护值为x的个数+区间覆盖)
  • 原文地址:https://www.cnblogs.com/mindzone/p/12840751.html
Copyright © 2020-2023  润新知