• MyBatis相关配置


     在MyBatis中,不免会有一些配置要设置,我们先来看一下MyBatis配置XML文件的层次结构,这些层次是不能够颠倒顺序的,下面是层次结构;

    <?xml version = "1.0" encoding = "UTF-8"?>
    <configuration><!--配置-->
        <properties/><!--属性-->
        <settings/><!--设置-->
        <typeAliases/><!--类型命名-->
        <typeHandlers/><!--类型处理器-->
        <objectFactory/><!--对象工厂-->
        <plugins/><!--插件-->
        <environments><!--配置环境-->
            <environment><!--环境变量-->
                <transactionManager/><!--事务管理器-->
                <datSource/><!--数据源-->
            </environment>
        </environments>
        <databaseIdProvider/><!--数据库厂商标识-->
        <mappers/><!--映射器-->
    </configuration>
    

    以上就是MyBatis的所有配置属性了,接下来我们来一个个详细分析;

            首先是properties元素;有三种配置方式;property子元素,properties配置文件,以及程序参数传递;
                property子元素
    <properties>
        <property name = "driver" value = "com.mysql.jdbc.Driver"/>
        <property name = "url" value = "jdbc:mysql://localhost:3306/mybatis"/>
        <property name = "username" value = "root"/>
        <property name = "password" value = "learn"/>
    </properties>
    

              接下来是properties配置文件;先做一个.properties的文件,文件中声明了你要配置的属性值,这样沃恩可以在多个配置文件中重复使用他们;

    #数据库配置文件
    driver = com.mysql.jdbc.Driver
    url = jdbc:mysql://localhost:3306/mybatis
    username = root
    password = learn
    

      然后我们在properties元素中导入进来了;

    <properties resource = "jdbc.properties"/>
    

              程序参数传递;通过以方法参数来传递属性,并覆盖已读取的同名属性;

    InputStream cfgStream = null;
    Reader cfgReader = null;
    InputStream proStream = null;
    Reader proReader = null;
    Properties  properties = null;
    try{
        //读入配置文件流
        cfgStream = Resources.getResourceAsStream("mybatis-config.xml");
        cfgReader = new InputStreamReader(cfgStream);
        proStream = Resources.getResourceAsStream("jdbc.properties");
        proReader = new InputStreamReader(proStream);
        properties = new Properties();
        properties.load(proReader);
        //解密为明文;
        properties.setProperty("username",docode(properties.getProperty("username")));
        properties.setProperty("password",docode(properties.getProperty("password")));
    }catch(IOException ex){
        Logger.getLogger(SqlSessionFactoryUtil.class.getName()).log(Level.SEVERE,null,ex);
    }
    synchronized(CLASS_LOCK){
            if(sqlSessionFactory == null){
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(cfgReader,properties);
            }
        }
    <settings>
    <setting name = "cacheEnabled" value = "true"/>
    <setting name = "lazyLoadingEnabled" value = "true"/>
    <setting name = "multipleResultSetsEnabled" value = "true"/>
    <setting name = "useColumnLabel" value = "true"/>
    <setting name = "useGeneraterdKeys" value = "false"/>
    <setting name = "autoMappingBehavior" value = "PARTIAL">
    <setting name = "defaultExecutorType" value = "SIMPLE"/>
    <setting name = "defaultStatementTimeout" value = "25"/>
    <setting name = "safeRowRoundsEnabled" value = "false"/>
    <setting name = "mapUnderscoreToCamelCase" value = "false"/>
    <setting name = "localCacheScope" value = "SESSION"/>
    <setting name = "jdbcTypeForNull" value = "OTHER"/>
    <setting name = "lazyLoadTriggerMethods" value = "equals,clone,hashCode,toString"/>
    </settings>
    

      

    第三个设置是别名;因为当我们的类全限定名过长,所以我们就希望用一个简短的名称去指代他,而这个名称可以在MyBatis上下文中使用,分为系统定义别名和自定义别名。额,系统自定义的别名就自己百度去找,避免我有凑文字的嫌疑。。
    下面是自定义的别名设置;
    <typeAliases>
        <typeAlias alias = "role" type = "com.learn.chapter2.po.Role">
    </typeAliases>
    

      

    这样子,在接下来的上下文中,当你要用到com.learn.chapter2.po.Role的时候,都可以直接用role来替代了
    第四个,typeHandler类型处理器;
            这个处理器的功能在于将你的就javabean的数据类型和你的jdbc数据类型进行转换,相当于是一个转换器,这种也是分为系统自带的和自定义的;但不管是那个,你都要先继承BaseTypeHandler<String>,然后用注解声明你要转化的类型和要转化成的类型,并实现他的四个接口;然后你在配置文件中把这个类型转换器给注册进去就可以了。代码如下:
    @MappedTypes({String.class})
    @MappedJdbcTypes(JdbcType.VARCHAR)
    public class MyStringTypeHandler implements TypeHandler<String>{
        private Logger log = Logger.getLogger(MyStringTypeHandler.class);
        @Override
        public void setParameter(PreparedStatement ps,int index,String value,JdbcType jt) throws SQLException{
            log.info("使用我的TypeHandler");
            ps.setString(index,value);
        }
        @Override
        public String getResult(ResultSet rs,String colName) throws SQLException{
            log.info("使用我的TypeHandler,ResultSet列名获取字符串");
            return rs.getString(colName);
        }
        @Override
        public String getResult(ResultSet rs,int index) throws SQLException{
            log.info("使用我的TypeHandler,ResultSet下标获取字符串");
            return rs.getString(index);
        }
        @Override
        public String getResult(CallableStatement cs,int index) throws SQLException{
            log.info("使用我的TypeHandler,CallableStatement下标获取字符串");
            return cs.getString(index);
        }
    }
    

      

    接下来的是一些比较无关紧要的设置,或者说大多数情况下都不会去设置的,像是ObjectFactory对象工厂,plugins插件,environments配置环境,这里可以说一下environments中的各个子元素;
    environments表明在缺省的情况下,我们将启用哪个数据源配置;
    environment元素是配置一个数据源的开始,属性id是设置这个数据源的标志,以便MyBatis上下文使用它,也就是说会有镀铬environment数据源了,
    transactionManager配置的是数据库事务,一帮都是采用JDBC模式;
    property元素则是可以配置数据源的各类属性,这里我们配置了autoCommit = false,要求数据源不自动提交;
    dataSource标签,是配置数据源连接的信息,type属性是提供我们对数据库连接方式的配置,一般采用POOLED,连接数据库;
    最后是引入映射器;
    映射器作为MyBatis的核心,是我们必须要掌握的,之后会更详细地讲的,现在先说个例子;
    首先,你要先有一个接口类;
    public interface RoleMapper{
        public Role getRole(Long id);
    }
    

      接下来,我们给出xml文件,定义Mapper映射规则和SQL语句;

    <?xml version = "1.0" encoding = "UTF-8"?>
    <!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace = "com.learn.chapter3.mapper.RoleMapper">
        <select id = "getRole" parameterType = "long"
                resultType = "com.learn.chapter3.po.Role">
                    select id, role_name as roleName,note from t_role where id = #{id}
        </select>
    </mapper>
    

      最后,我们在配置中注册一个映射器就可以了;

    <mappers>
        <mapper resource = "com/learn/chapter3/mapper/roleMapper.xml"/>
    </mappers>
    

      以上就是MyBatis的所有相关配置属性了,记住顺序一定不能乱,一定要按照(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)的顺序;

  • 相关阅读:
    个人总结
    第三次个人作业
    第二次结对作业
    第一次结对作业
    第二次个人编程作业
    第一次博客编程作业
    第一次随笔作业
    BUAA_2020_软件工程_提问回顾与总结
    BUAA_2020_软件工程_软件案例分析作业
    BUAA_2020_软件工程_结对项目作业
  • 原文地址:https://www.cnblogs.com/zxx123/p/8556350.html
Copyright © 2020-2023  润新知