Mybatis的SqlMapConfig文件

来源:互联网 发布:sarah lynn 知乎 编辑:程序博客网 时间:2024/06/05 14:07

Mybatis的配置文件的结构

properties

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

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

#db.propertiesjdbc.username=rootjdbc.password=yzgylqjdbc.url=jdbc:mysql://localhost:3306/mybatisjdbc.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或者IntegerLong                Numeric或者Long IntegerBigDecimal          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同名并且在同一个包下

原创粉丝点击