• 【Mybatis】06 Session获取 & 配置参数总结


    会话获取

    SqlSessionFactory

    最佳的获取方式就是使用Mybatis提供的资源类加载配置文件

    调用会话工厂建造者实例的建造方法注入读取流

    要注意的是建造者生成了了实例就可以不需要了

    这里我们可以使用null赋值,让指针解除引用,引导GC回收建造者实例

    获取的SqlSessionFactory有且只需要一个且一直存在

    那就是单例模式,保持在这个运行的范围内即可

    在获取SqlSession,加入事务开关按钮

    我们在环境标签配置的事务管理类型是JDBC,默认是开启的

    在封装获取方法openSession时,可以注入布尔参数,

    以灵活设置是否关闭事务

    MybatisUtil调整后的写法:

    public class MybatisUtil {
    
        private static org.apache.ibatis.session.SqlSessionFactory sqlSessionFactory;
    
        static {
    
            try{
                // 核心配置文件名称
                String config = "mybatis-config.xml";
    
                // 读取核心配置 加载进内存为读取流对象
                java.io.InputStream inputStream = org.apache.ibatis.io.Resources.getResourceAsStream(config);
    
                // 通过工场建造者获取了配置流对象,读取配置信息后,生成会话工厂实例
                org.apache.ibatis.session.SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new org.apache.ibatis.session.SqlSessionFactoryBuilder();
                sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    
                // 销毁,让引用失去指向,引导GC回收
                sqlSessionFactoryBuilder = null;
            } catch (Exception exception){
                exception.printStackTrace();
            }
        }
    
        // 获取会话实例即可
        public static org.apache.ibatis.session.SqlSession getSqlSession(boolean closeTransaction){
            return sqlSessionFactory.openSession(closeTransaction);
        }
    }

    执行SQL时自行选择是否关闭事务

        @Test
        public void quickstartMybatis(){
            SqlSession sqlSession = MybatisUtil.getSqlSession(true);
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List<User> userList = mapper.getUserList();
            for (User user : userList) {
                System.out.println(user);
            }
            sqlSession.close();
        }

    配置 Configure

    我们快速入门使用的是直接写在核心配置里的方式

    官方讲Properties时

    允许我们可以使用properties标签导入外部properties文件

    注入环境的连接参数使用【${key}】读取

    properties标签本身也能支持连接参数的配置

    但是这和环境内配置有什么区别?

    然后在优先级别中的位置是最低的,

    如果外部配置文件读取错误,一样报错

    总而言之:可以写,但是没必要

    官方还推荐了一种默认占位符的方式配置,

    就是说可以写个默认配置

    但是者需要properties标签开启设置

    <properties resource="org/mybatis/example/config.properties">
      <!-- ... -->
      <property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 -->
    </properties>

    在这里我注释了用户密码,然后在配置里使用默认占位符设置

    运行还是一样可行的

    OGNL 表达式的三元运算符

    (如: ${tableName != null ? tableName : 'global_constants'}

    需要设置特定的属性来修改分隔属性名和默认值的字符。例如:

    <properties resource="org/mybatis/example/config.properties">
      <!-- ... -->
      <property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- 修改默认值的分隔符 -->
    </properties>

    类型别名(typeAliases)

    说明一下XML约束

    如果不按照规定的顺序写配置标签,就会有这样的错误提示

    这个提示已经说明了,各种配置标签的先后顺序

    第一种别名:指定完整限定名,然后配置别名

    不推荐使用这种,因为类数量太多,配置麻烦

    第二种,限定所在包

    该包下的类的别名即为小写,例如User -> user

    每一个在包 domain.blog 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。

    比如 domain.blog.Author 的别名为 author

    若有注解,则别名为其注解值。

    映射器注册(mappers)

    第一种,resource属性资源引用

    要注意的是只能使用反斜杠作为分隔符,用点引用的路径会报错

    好处是不用跟接口放在一起,随意使用

    第二种通过接口完整限定名反射Mapper

    必须和接口同一包下,且接口名和Mapper配置同名

    第三种使用包扫描

    这个问题和第二个一样,必须同包同名才有效

    总而言之:

    如果不希望Mapper配置和接口放在一起,

    只能使用第一种资源引用方式,放在resoures的mapper中,或者自定义目录

    第二种&第三种必须要同包同名

  • 相关阅读:
    第一个VS2015 Xaramin Android项目(续)
    第一个VS2015 Xaramin Android项目
    Android SDK Manager 无法打开
    VS 2015 Android 环境设置
    Unity 游戏运行越久加载越慢
    一不注意,在Unity3D中DllImport 引起的Bug.
    Animation显示ListView的每一条记录
    ViewFlipper
    BitmapFactory.Options对图片进行缩放
    显示倒计时的Button按钮
  • 原文地址:https://www.cnblogs.com/mindzone/p/12825249.html
Copyright © 2020-2023  润新知