MyBatis配置文件

一、MyBatis主配置文件

image.png

1.1 属性(properties)

MyBatis主配置文件中的properties元素的propertie子元素的value属性的值,便可以直接定义,也能够在主配置文件中定义而后引用,也能够引用外部的properties文件。举例子来讲就是,以下的两个xml的配置效果是同样的。java

1.1.1 直接配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
        
<configuration>

    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
    
</configuration>

1.1.2 引用配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    
    <properties>
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </properties>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
    
</configuration>

以上两种形式,在开发过程当中通常不会这么用。通常是直接类路径下(在maven工程下就是resources目录下)定义一个properties文件,而后在MyBatis的主配置文件中引用该文件,而后就能够在主配置文件中直接引用。以下所示:mysql

1.1.3 引用properties配置文件

1.1.3.1 properties配置文件
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mybatis
jdbc.username = root
jdbc.password = root
1.1.3.2 MyBatis主配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

    <properties resource="datasource.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>

</configuration>

1.1.3.3 目录结构

image.png

1.1.3.4 注意事项

  1. properties标签的resource属性指向的类路径下的文件(在maven工程下为resources目录下)。
  2. 在${jdbc.driver}中,大括号里面的值要对应properties文件中定义的变量名,要个要求一一对应。
  3. 若是属性在不仅一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:sql

    1. 在 properties 元素体内指定的属性首先被读取。
    2. 而后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
    3. 最后读取做为方法参数传递的属性,并覆盖已读取的同名属性。
    4. 总结:经过方法参数传递的属性具备最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。

1.2 设置(settings)

1.3 别名(typeAliases)

在MyBatis的映射配置文件中(也就是接口对应的XxxMapper.xml文件),每当指定一个java类的所属类型时,都须要拼写出该类的全限定类名。例以下面的xml配置所示。数据库

<?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.mybatis.dao.UserDao">
    <!-- 查询全部 -->
    <select id="findAll" resultType="com.mybatis.domain.User">
        SELECT * FROM user
    </select>

    <!-- 保存用户 -->
    <insert id="saveUser" parameterType="com.mybatis.domain.User">
        INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>

如上这样配置存在一个问题,当配置文件少的时候还好,若是配置文件的数量一旦增多,就会致使工做量激增。因此就有了给java类的全限定类名取一个简短的别名,用别名代替全限定类名,减小没必要要的工做量。具体操做以下。mybatis

主配置文件中使用typeAliases标签为pojo的全限定类名去一个别名,而后把映射配置文件中pojo的全限定类名替换成别名便可。别名能够任意,且当使用了别名后,别名将不区分大小写。具体配置以下。app

主配置文件dom

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 注意configuration下的子标签严格区分定义顺序(使用顺序) -->
    <properties resource="datasource.properties"></properties>

    <typeAliases>
        <!--
            type:用于指定pojo的全限定类名;
            alias:用于指定别名
        -->
        <typeAlias type="com.mybatis.domain.User" alias="user"></typeAlias>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

映射文件maven

<?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.mybatis.dao.UserDao">
    <!-- 查询全部 -->
    <!-- 使用了别名后pojo的别名不区分大小写 -->
    <select id="findAll" resultType="user">
        SELECT * FROM user
    </select>

    <!-- 保存用户 -->
    <insert id="saveUser" parameterType="User">
        INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
    </insert>
</mapper>

以上操做虽然已经能极大的简化咱们的开发,可是,一个项目中不可能只有一两个pojo。因此若是咱们要使用上述的方式指定定义一个项目中全部pojo的话也不现实。typeAliases下除了typeAlias子标签外,还有一个package子标签,该标签的做用是为某个指定的包下全部的pojo一块儿取别名,默认类名即为别名。具体以下所示。url

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 注意configuration下的子标签严格区分定义顺序(使用顺序) -->
    <properties resource="datasource.properties"></properties>

    <typeAliases>
        <!--
            type:用于指定pojo的全限定类名;
            alias:用于指定别名
        -->
        <typeAlias type="com.mybatis.domain.User" alias="user"></typeAlias>
        <!-- 为com.mybatis.domain子包下的pojo一块儿取别名,别名即为类名 -->
        <package name="com.mybatis.domain"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="jdbc"></transactionManager>
            <dataSource type="pooled">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="com/mybatis/dao/UserDao.xml"></mapper>
    </mappers>
</configuration>

二、MyBatis映射配置文件

2.1 select标签

<select id="findById" parameterType="java.lang.Integer" resultType="com.mybatis.domain.User">
  SELECT * FROM user WHERE id = #{id}
</select>

属性说明spa

  • id:当前select标签在当前映射配置文件中的惟一标识符;
  • parameterType:参数类型,若是为非基本类型的pojo,则须要写出pojo的全限定类名(若是取了别名,可使用别名),若是为基本类型,能够直接写全限定类名,也能够直接写类名,若是没有则省略;
  • resultType:返回值类型,若是为非基本类型的pojo,则须要写出pojo的全限定类名(若是取了别名,可使用别名),若是为基本类型,能够直接写全限定类名,也能够直接写类名,若是没有则省略;

2.2 insert标签

<insert id="saveUser" useGeneratedKeys="true" keyColumn="id" keyProperty="id"  parameterType="com.mybatis.domain.User">
    INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address})
</insert>

属性说明

  • id:当前select标签在当前映射配置文件中的惟一标识符;
  • parameterType:参数类型,若是为非基本类型的pojo,则须要写出pojo的全限定类名(若是取了别名,可使用别名),若是为基本类型,能够直接写全限定类名,也能够直接写类名,若是没有则省略;
  • useGeneratedKeys:开启主键回写(当咱们向数据库插入数据时,主键是设置的自增的,可是咱们插入好数据库后,咱们但愿获得刚刚插入的数据的主键,mybatis经过useGeneratedKeys、keyColumn、keyProperty能够实现该需求);
  • keyColumn:keyColumn:主键列名(既数据库表中的列名);
  • keyProperty:主键对应的属性名(实体中的属性名);

2.3 updata标签

<update id="updateUser" parameterType="com.mybatis.domain.User">
    UPDATE user
    SET username = #{username},
        birthday = #{birthday},
        sex = #{sex},
        address = #{address}
    WHERE id = #{id}
</update>

属性说明

  • id:当前select标签在当前映射配置文件中的惟一标识符;
  • parameterType:参数类型,若是为非基本类型的pojo,则须要写出pojo的全限定类名(若是取了别名,可使用别名),若是为基本类型,能够直接写全限定类名,也能够直接写类名,若是没有则省略;

2.4 delete标签

<delete id="deleteUser" parameterType="java.lang.Integer">
    <!-- 当只有一个参数时,参数名称能够任意 -->
    DELETE FROM user WHERE id = #{id}   
</delete>

2.5 #{}和${}的区别

2.5 resultMap标签

相关文章
相关标签/搜索