美文网首页
MyBatis #{}和${}

MyBatis #{}和${}

作者: ChanHsu | 来源:发表于2017-05-04 08:29 被阅读63次

    1.#{}和${}

    {}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。

    如果接收简单类型,#{}中可以写成value或其它名称。

    {}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

    ${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。

    ${}接收输入参数,类型可以是简单类型,pojo、hashmap。

    如果接收简单类型,${}中只能写成value。

    ${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

    2.SqlSession使用范围

    SqlSessionFactoryBuilder
    通过SqlSessionFactoryBuilder创建会话工厂SqlSessionFactory将SqlSessionFactoryBuilder当成一个工具类使用即可,不需要使用单例管理SqlSessionFactoryBuilder。在需要创建SqlSessionFactory时候,只需要new一次SqlSessionFactoryBuilder即可。

    SqlSessionFactory
    通过SqlSessionFactory创建SqlSession,使用单例模式管理sqlSessionFactory(工厂一旦创建,使用一个实例)。将来mybatis和spring整合后,使用单例模式管理sqlSessionFactory。

    SqlSession
    SqlSession是一个面向用户(程序员)的接口。SqlSession中提供了很多操作数据库的方法:如:selectOne(返回单个对象)、selectList(返回单个或多个对象)。

    原始dao开发问题

    1.dao接口实现类方法中存在大量模板方法,设想能否将这些代码提取出来,大大减轻程序员的工作量。

    2.调用sqlsession方法时将statement的id硬编码了

    3.调用sqlsession方法时传入的变量,由于sqlsession方法使用泛型,即使变量类型传入错误,在编译阶段也不报错,不利于程序员开发。

    开发规范

    • 在mapper.xml中namespace等于mapper接口地址

    • mapper.java接口中的方法名和mapper.xml中statement的id一致

    • mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。

    • mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。

    SqlSession是线程不安全的,在SqlSesion实现类中除了有接口中的方法(操作数据库的方法)还有数据域属性。

    SqlSession最佳应用场合在方法体内,定义成局部变量使用。

    相关文章

      网友评论

          本文标题:MyBatis #{}和${}

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