Mybatis的SqlMapConfig文件

Mybatis的配置文件的结构

properties

可以将一些配置文件单独的写在属性properties文件中,例如数据库连接的一些信息

第一种引用外部的属性文件

#db.properties
jdbc.username=root
jdbc.password=yzgylq
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.driver=com.mysql.jdbc.Driver
<!--SqlMapConfig的配置-->
<properties resource="db.properties"></properties>
    <environments default="default">
        <environment id="default">
            <transactionManager type="JDBC"></transactionManager>
            <!--mybatis的数据库连接池默认是什么-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
                <property name="url" value="${jdbc.url}"/>
            </dataSource>
        </environment>
    </environments>

第二种在properties标签里面进行配置

    <properties>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="yzgylq"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
    </properties>

    <environments default="default">
        <environment id="default">
            <transactionManager type="JDBC"></transactionManager>
            <!--mybatis的数据库连接池默认是什么-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
                <property name="url" value="${jdbc.url}"/>
            </dataSource>
        </environment>
    </environments>

注意加载属性的顺序

  1. 在 properties 元素体内定义的属性首先被读取。
  2. 然后会读取properties 元素中resource或 url 加载的属性,它会覆盖已读取的同名属性。
  3. 最后读取parameterType传递的属性,它会覆盖已读取的同名属性(不过此时使用的应该是${}而不是#{})。

针对第三点的一个例子

在SqlMapConfig中定义了如下的properties属性

    <properties>
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="yzgylq"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
        <property name="id" value="40"/>
    </properties>

在userMapper中就可以这样获取id的值,用于根据id查询

<mapper namespace="test" >
    <select id="findUserById" parameterType="int" resultType="com.njust.ml.po.User">
        select * from user where id = ${id}
    </select>
</mapper>

在java程序中,就可以不传递给finduserById第二个参数

@Override
    public User findUserById() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User user = sqlSession.selectOne("test.findUserById");
        sqlSession.close();
        return user;
    }

settings设置

这个里面的配置,可以改变Mybatis的运行时行为,一般不需要改动

typeAliases

类型别名,会简化java的完全限定名

第一种,逐个手动添加

    <typeAliases>
        <typeAlias type="com.njust.ml.po.User" alias="user"/>
    </typeAliases>

缺点:如果有很多的类需要有别名,那么配置起来就是一大串,显得很不方便

第二种,包扫描添加

    <typeAliases>
        <package name="com.njust.ml.po"/>
    </typeAliases>

使用包扫描的时候,指定包名即可,别名为类名(首字母大写或小写均可)

typeHandlers

无论是Mybatis在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会使用类型处理器将获取的值以合适的方式转换为java类型
mybatis已经提供了一些转换器,例如:

java类型              JDBC类型
int(Integer)        Numeric或者Integer
Long                Numeric或者Long Integer
BigDecimal          Numeric或者decimal

mappers

加载mapper映射器

第一种使用类路径查找资源文件

    <mappers>
        <mapper resource="mapper/UserMapper.xml"></mapper>
        <mapper resource="mapper/usermapper_proxy.xml"></mapper>
    </mappers>

第二种使用本地文件

    <mappers>
        <mapper url="file:///C:/mapper/UserMapper.xml"></mapper>
    </mappers>

第三种使用接口类

    <!--要求userdao这个接口必须与userdao.xml同名并且在一个包路径下-->
    <mappers>
        <mapper class="com.njust.ml.dao.UserDao"></mapper>
    </mappers>

第四种方法

针对第三种方法的改进,类似于typeAliases中的问题,如果mapper接口过多,那么会显得异常繁琐,所以可以采用扫描的方式

    <mappers>
        <package name="com.njust.ml.dao"/>
    </mappers>

与上面的要求是一样的,也要求mapper接口与mapper.xml同名并且在同一个包下

你可能感兴趣的:(数据库,mysql,mybatis)