精华内容
下载资源
问答
  • mybatis配置文件

    千次阅读 2019-04-18 11:42:16
    全局配置文件配置 1.1 properties标签 Properties标签可以用来加载配置文件.例如,我们可以将数据库的连接信息放入到一个配置文件(db.properties中..) 下为db.properties db.driverClass=com.mysql.jdbc.Driver ...

    一.全局配置文件配置

    1.1 properties标签

    Properties标签可以用来加载配置文件.例如,我们可以将数据库的连接信息放入到一个配置文件(db.properties中..)

    下为db.properties

    db.driverClass=com.mysql.jdbc.Driver
    db.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
    db.username=root
    db.password=root

    在全局配置文件mybatis_Config.xml中引入该配置文件.

    <!-- 引入配置文件 -->
    <properties resource="db.properties"/>

    然后就可以在全局配置文件的关于数据库的配置信息里使用配置文件的信息了

    <dataSource type="UNPOOLED">
    	<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>

    也可以在properties标签下配置property的name和value,则可以替换.properties文件中相应属性值。

     <!-- 属性替换 -->  
    <properties resource="mysql.properties">  
        <property name="db.driverClassName" value="com.mysql.jdbc.Driver"/>  
        <property name="db.url" value="jdbc:mysql://localhost:3306/student_manager"/>  
        <property name="db.username" value="root"/>  
        <property name="db.password" value="limingnihao"/>  
    </properties>  

    1.2 settings设置

    这是MyBatis 修改操作运行过程细节的重要的步骤。下方这个表格描述了这些设置项、含义和默认值。

    <settings>
    		<!-- 这个配置使全局的映射器启用或禁用缓存 -->
    		<setting name="cacheEnabled" value="true" />
    		<!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 -->
    		<setting name="lazyLoadingEnabled" value="true" />
    		<!-- 当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,每种属性将会按需要加载 -->
    		<setting name="aggressiveLazyLoading" value="true" />
    		<!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动) -->
    		<setting name="multipleResultSetsEnabled" value="true" />
    		<!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->
    		<setting name="useColumnLabel" value="true" />
    		<!-- 允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如Derby) -->
    		<setting name="useGeneratedKeys" value="true" />
    		<!-- 指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->
    		<setting name="autoMappingBehavior" value="PARTIAL" />
    		<!--当检测出未知列(或未知属性)时,如何处理,默认情况下没有任何提示,这在测试的时候很不方便,不容易找到错误。 NONE : 不做任何处理 
    			(默认值) WARNING : 警告日志形式的详细信息 FAILING : 映射失败,抛出异常和详细信息 -->
    		<setting name="autoMappingUnknownColumnBehavior" value="WARNING" />
    		<!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH执行器重用语句和批量更新 -->
    		<setting name="defaultExecutorType" value="SIMPLE" />
    		<!-- 设置超时时间,它决定驱动等待一个数据库响应的时间 -->
    		<setting name="defaultStatementTimeout" value="25000" />
    		<!--设置查询返回值数量,可以被查询数值覆盖 -->
    		<setting name="defaultFetchSize" value="100" />
    		<!-- 允许在嵌套语句中使用分页 -->
    		<setting name="safeRowBoundsEnabled" value="false" />
    		<!--是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 
    			的类似映射。 -->
    		<setting name="mapUnderscoreToCamelCase" value="false" />
    		<!--MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 
    			默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 
    			的不同调用将不会共享数据。 -->
    		<setting name="localCacheScope" value="SESSION" />
    		<!-- 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 
    			NULL、VARCHAR OTHER。 -->
    		<setting name="jdbcTypeForNull" value="OTHER" />
    		<!-- 指定哪个对象的方法触发一次延迟加载。 -->
    		<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString" />
    	</settings>

    1.3 typeAliases类型别名

           类型别名是Java 类型的简称。它仅仅只是关联到XML 配置,简写冗长的JAVA 类名。例如:

           现在我们就可以使用别名了:

           批量定义别名.(用于定义包)包下面的类的别名默认为类名.首字母大小写即可.

           使用别名: 

    1.4 mapper标签

           这里是告诉MyBatis 去哪寻找映射SQL 的语句。可以使用类路径中的资源引用,或者使用字符,输入确切的URL 引用。

    1.4.1 <mapper resource=’’”/>   使用相对于类路径的资源

    • 如:<mapper resource="sqlmap/User.xml" />

    1.4.2 <mapper url=’’”/>   使用完全限定路径

    • 如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />

    1.4.3<mapper class=’’”/>   使用mapper接口的全限定名

    • 如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
    • 注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

    1.4.4 <package name=’’/>(推荐)  注册指定包下的所有映射文件

    • 如:<package name="cn.itcast.mybatis.mapper"/>
    • 注意:此种方法要求mapper接口和mapper映射文件要名称相同,且放到同一个目录下;

    1.5 typeHandlers类型句柄(一般不会修改)

           无论是MyBatis在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成Java类型。下面这个表格描述了默认的类型处理器。

    1.6 environments环境

           MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中 使用相同的 SQL 映射。有许多类似的使用场景。

    不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

    所以,如果你想连接两个数据库,就需要创建两个 SqlSessionFactory 实例,每个数据库对应一个。而如果是三个数据库,就需要三个实例,依此类推,记起来很简单:每个数据库对应一个 SqlSessionFactory 实例

    <environments default="development">
      <environment id="development">
        <transactionManager type="JDBC">
          <property name="..." value="..."/>
        </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>

    更多配置请参考官网:http://www.mybatis.org/mybatis-3/zh/configuration.html#environments

    XML映射文件(重点)

           MyBatis 的真正强大在于它的映射语句,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 为聚焦于 SQL 而构建,以尽可能地为你减少麻烦。

           POJO接口名必须和映射文件名一致

    SQL 映射文件只有很少的几个顶级元素(按照应被定义的顺序列出):

    • cache – 对给定命名空间的缓存配置。
    • cache-ref – 对其他命名空间缓存配置的引用。
    • resultMap – 是最复杂也是最强大的元素,用来描述如何从数据库结果集中来加载对象。
    • sql – 可被其他语句引用的可重用语句块。
    • insert – 映射插入语句
    • update – 映射更新语句
    • delete – 映射删除语句
    • select – 映射查询语句

    1、select

           查询语句是 MyBatis 中最常用的元素之一,光能把数据存到数据库中价值并不大,只有还能重新取出来才有用,多数应用也都是查询比修改要频繁。对每个插入、更新或删除操作,通常间隔多个查询操作。这是 MyBatis 的基本原则之一,也是将焦点和努力放在查询和结果映射的原因。简单查询的 select 元素是非常简单的。比如:

    <select id="selectPerson" parameterType="int" resultType="hashmap">
      SELECT * FROM PERSON WHERE ID = #{id}
    </select>

           这个语句被称作 selectPerson,接受一个 int(或 Integer)类型的参数,并返回一个 HashMap 类型的对象,其中的键是列名,值便是结果行中的对应值。

    注意参数符号:#{id}

           这就告诉 MyBatis 创建一个预处理语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样:

    // 近似的 JDBC 代码,非 MyBatis 代码...
    String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
    PreparedStatement ps = conn.prepareStatement(selectPerson);
    ps.setInt(1,id);

           当然,使用 JDBC 意味着需要更多的代码来提取结果并将它们映射到对象实例中,而这就是 MyBatis 节省你时间的地方。参数和结果映射还有更深入的细节。这些细节会分别在后面单独的小节中呈现。

           select 元素允许你配置很多属性来配置每条语句的作用细节。

    resultType与resultMap

    resultType(不建议使用,没有实现POJO与表的解耦和):

    • SQL列名和JavaBean的属性是一致的;
    • 自动映射等级autoMappingBehavior设置为PARTIAL,需要谨慎使用FULL;
    • 如果列名和JavaBean不一致,但列名符合单词下划线分割,Java是驼峰命名法, 则mapUnderscoreToCamelCase可设置为true;

    resultMap(推荐使用)

    传入多个参数的问题

    单参:

    public List<XXBean> getXXBeanList(String xxCode);  
    
    <select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">
      select t.* from tableName t where t.id= #{id}  
    </select>  
    
    其中方法名和id一致,#{}中的参数名与方法中的参数名一直,我这里采用的是XXXBean是采用的短名字,
    select后的字段列表要和bean中的属性名一致,如果不一致的可以用as来补充。

    多参情况:

    方法1:顺序传参法

        public User selectUser(String name, int deptId);
    
        <select id="selectUser" resultMap="UserResultMap">
            select * from user
            where user_name = #{0} and dept_id = #{1}
        </select>

      #{}里面的数字代表你传入参数的顺序。这种方法不建议使用,sql层表达不直观,且一旦顺序调整容易出错。

    方法2:Map传参法

        public User selectUser(Map<String, Object> params);
    
        <select id="selectUser" parameterType="java.util.Map" resultMap="UserResultMap">
            select * from user
            where user_name = #{userName} and dept_id = #{deptId}
        </select>

       #{}里面的名称对应的是 Map里面的key名称。这种方法适合传递多个参数,且参数易变能灵活传递的情况。但可读性差,导致可维护性和可扩展性差,不建议使用。

    方法3:@Param注解传参法

        public User selectUser(@Param("userName") String name, int @Param("deptId") deptId);
    
        <select id="selectUser" resultMap="UserResultMap">
            select * from user
            where user_name = #{userName} and dept_id = #{deptId}
        </select>

      #{}里面的名称对应的是注解 @Param括号里面修饰的名称。这种方法在参数不多的情况还是比较直观的,推荐使用。

    方法4:Java Bean传参法

        public User selectUser(Map<String, Object> params);
    
        <select id="selectUser" parameterType="com.test.User" resultMap="UserResultMap">
            select * from user
            where user_name = #{userName} and dept_id = #{deptId}
        </select>

     #{}里面的名称对应的是 User类里面的成员属性。这种方法很直观,但需要建一个实体类,扩展不容易,需要加属性,看情况使用。

    2、resultMap

            resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并在一些情形下允许你进行一些 JDBC 不支持的操作。实际上,在为一些比如连接的复杂语句编写映射代码的时候,一份 resultMap 能够代替实现同等功能的长达数千行的代码。ResultMap 的设计思想是,对于简单的语句根本不需要配置显式的结果映射,而对于复杂一点的语句只需要描述它们的关系就行了。

            ResultMap 最优秀的地方在于,虽然你已经对它相当了解了,但是根本就不需要显式地用到他们。 上面这些简单的示例根本不需要下面这些繁琐的配置。 但出于示范的原因,让我们来看看最后一个示例中,如果使用外部的 resultMap 会怎样,这也是解决列名不匹配的另外一种方式。

    <resultMap id="userResultMap" type="User">
      <id property="id" column="user_id" />
      <result property="username" column="user_name"/>
      <result property="password" column="hashed_password"/>
    </resultMap>

     而在引用它的语句中使用 resultMap 属性就行了(注意我们去掉了 resultType 属性)。比如:

    <select id="selectUsers" resultMap="userResultMap">
      select user_id, user_name, hashed_password
      from some_table
      where id = #{id}
    </select>

    resultMap属性:

    属性 描述
    id 当前命名空间中的一个唯一标识,用于标识一个结果映射。
    type 类的完全限定名, 或者一个类型别名(关于内置的类型别名,可以参考上面的表格)。
    autoMapping 如果设置这个属性,MyBatis将会为本结果映射开启或者关闭自动映射。 这个属性会覆盖全局的属性 autoMappingBehavior。默认值:未设置(unset)。

     resultMap子元素

    constructor:

    当javaBean对象中没有构造方法时(某些情况下禁止含有),可使用该标签。

    <constructor>
        <!-- 这里的int对应实体类构造方法参数的 Integer -->
       <idArg column="id" javaType="int"/>
       <arg column="username" javaType="String"/>
    </constructor>
        //对应的构造方法
        public POJO(Integer id,String username){
        ...
        }

            它将结果集映射到构造方法上,它根据参数的类型和顺序来确定构造方法。构造方法注入允许你在初始化时为类设置属性的值,而不用暴露出公有方法。

    id & result

    <id property="id" column="post_id"/>
    <result property="subject" column="post_subject"/>
    •  id 和 result 都将一个列的值映射到一个简单数据类型(字符串,整型,双精度浮点数,日期等)的属性或字段 ;
    • 两者之间的唯一不同是, id 表示的结果将是对象的标识属性,这会在比较对象实例时用到。 这样可以 提高整体的性能,尤其是缓存和嵌套结果映射(也就是联合映射)的时候。
    • 属性 描述
      property 映射到列结果的字段或属性。如果用来匹配的 JavaBean 存在给定名字的属性,那么它将会被使用。否则 MyBatis 将会寻找给定名称的字段。 无论是哪一种情形,你都可以使用通常的点式分隔形式进行复杂属性导航。 比如,你可以这样映射一些简单的东西:“username”,或者映射到一些复杂的东西上:“address.street.number”。
      column 数据库中的列名,或者是列的别名。一般情况下,这和传递给 resultSet.getString(columnName) 方法的参数一样。
      javaType 一个 Java 类的完全限定名,或一个类型别名(关于内置的类型别名,可以参考上面的表格)。 如果你映射到一个 JavaBean,MyBatis 通常可以推断类型。然而,如果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证行为与期望的相一致。
      jdbcType JDBC 类型,所支持的 JDBC 类型参见这个表格之后的“支持的 JDBC 类型”。 只需要在可能执行插入、更新和删除的且允许空值的列上指定 JDBC 类型。这是 JDBC 的要求而非 MyBatis 的要求。如果你直接面向 JDBC 编程,你需要对可能存在空值的列指定这个类型。
      typeHandler 我们在前面讨论过默认的类型处理器。使用这个属性,你可以覆盖默认的类型处理器。 这个属性值是一个类型处理器实现类的完全限定名,或者是类型别名。

    3、insert, update 和 delete

    id 命名空间中的唯一标识符,可被用来代表这条语句。与POJO接口方法名一致
    parameterType 将要传入语句的参数的完全限定类名或别名。这个属性是可选的,因为 MyBatis 可以通过类型处理器推断出具体传入语句的参数,默认值为未设置(unset)。一般传一个JavaBean
    useGeneratedKeys 取值范围true|false(默认值),设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键
    keyProperty 默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中

     实例:mapper接口代码:

    /**
     * 添加学生信息
     * @param student 学生实例
     * @return 成功操作的记录数目
     */
    int add(EStudent student);

           对应获取主键:至于mapper.xml则分为两种情况了,一种是数据库(如MySQL,SQLServer)支持auto-generated key field,另一种是数据库(如Oracle)不支持auto-generated key field的。

     1. 数据库(如MySQL,SQLServer)支持auto-generated key field的情况

        手段①(推荐做法):

    <insert id="add" parameterType="EStudent" useGeneratedKeys="true" keyProperty="id">
      insert into TStudent(name, age) values(#{name}, #{age})
    </insert>

       手段②:

    <insert id="add" parameterType="EStudent">
      // 下面是SQLServer获取最近一次插入记录的主键值的方式
      <selectKey resultType="_long" keyProperty="id" order="AFTER">
        select @@IDENTITY as id
      </selectKey>
      insert into TStudent(name, age) values(#{name}, #{age})
    </insert>

    由于手段②获取主键的方式依赖数据库本身,因此推荐使用手段①。

    2. 数据库(如Oracle)不支持auto-generated key field的情况

    <insert id="add" parameterType="EStudent">
      <selectKey keyProperty="id" resultType="_long" order="BEFORE">
        select CAST(RANDOM * 100000 as INTEGER) a FROM SYSTEM.SYSDUMMY1
      </selectKey>
      insert into TStudent(id, name, age) values(#{id}, #{name}, #{age})
    </insert

    注意:mapper接口返回值依然是成功插入的记录数,但不同的是主键值已经赋值到领域模型实体的id中了。

    selectKey子元素

    作用:在insert元素和update元素中插入查询语句

      其属性如下:

    • keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中
    • resultType ,keyPropety所指向的属性类全限定类名或类型别名
    • order属性 ,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作
    • statementType ,取值范围STATEMENT,PREPARED(默认值),CALLABLE

    注意:selectKey操作会将操作查询结果赋值到insert元素的parameterType的入参实例下对应的属性中。并提供给insert语句使用。

    下面就是 insert,update 和 delete 语句的示例:

    <insert id="insertAuthor">
      insert into Author (id,username,password,email,bio)
      values (#{id},#{username},#{password},#{email},#{bio})
    </insert>
    
    <update id="updateAuthor">
      update Author set
        username = #{username},
        password = #{password},
        email = #{email},
        bio = #{bio}
      where id = #{id}
    </update>
    
    <delete id="deleteAuthor">
      delete from Author where id = #{id}
    </delete>

    #{}和${}的区别

            动态 sql 是 mybatis 的主要特性之一,在 mapper 中定义的参数传到 xml 中之后,在查询之前 mybatis 会对其进行动态解析。mybatis 为我们提供了两种支持动态 sql 的语法:#{} 以及 ${}。

    在下面的语句中,如果 username 的值为 zhangsan,则两种方式无任何区别:

    select * from user where name = #{name};
    select * from user where name = ${name};

    其解析之后的结果均为

    select * from user where name = 'zhangsan';

    但是 #{} 和 ${} 在预编译中的处理是不一样的。#{} 在预处理时,会把参数部分用一个占位符 ? 代替,变成如下的 sql 语句:

    select * from user where name = ?;

    而 ${} 则只是简单的字符串替换,在动态解析阶段,该 sql 语句会被解析成

    select * from user where name = 'zhangsan';

    以上,#{} 的参数替换是发生在 DBMS 中,而 ${} 则发生在动态解析过程中。

    那么,在使用过程中我们应该使用哪种方式呢?

    答案是,优先使用 #{}。因为 ${} 会导致 sql 注入的问题。看下面的例子:

    select * from ${tableName} where name = #{name}

    在这个例子中,如果表名为

    • user; delete user; --

    则动态解析之后 sql 如下:

    select * from user; delete user; -- where name = ?;

    --之后的语句被注释掉,而原本查询用户的语句变成了查询所有用户信息+删除用户表的语句,会对数据库造成重大损伤,极大可能导致服务器宕机。

    但是表名用参数传递进来的时候,只能使用 ${} ,具体原因可以自己做个猜测,去验证。这也提醒我们在这种用法中要小心sql注入的问题。

    4、sql

           这个元素可以被用来定义可重用的 SQL 代码段,这些 SQL 代码可以被包含在其他语句中。它可以(在加载的时候)被静态地设置参数。 在不同的包含语句中可以设置不同的值到参数占位符上。比如:

    <sql id="Base_Column_List">
    	id, user_name, real_name, sex, mobile, email, note,
    	position_id
    </sql>

    这个 SQL 片段可以被包含在其他语句中,例如:

    <select id="selectUserHealthReport" resultMap="userAndHealthReport">
    	select
    	<include refid="Base_Column_List" />
    	from t_user a
    </select>

     

    展开全文
  • MyBatis配置文件

    千次阅读 2015-12-12 18:26:49
    MyBatis有两种配置文件:全局配置文件和映射文件。 全局配置文件:配置了数据源、事务等运行环境,并在mapper属性中给出了每个映射文件的路径. 名称不固定,由SqlSessionFactoryBuilder从指定文件路径加载构建出...
    MyBatis有两种配置文件:全局配置文件和映射文件。
    全局配置文件:配置了数据源、事务等运行环境,并在mapper属性中给出了每个映射文件的路径.
    名称不固定,由SqlSessionFactoryBuilder从指定文件路径加载构建出SqlSessionFactory的实例。
    一个典型的全局配置文件mybatis-config.xml如下:

    <?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="jdbc.properties" />
    
        <typeAliases>
            <typeAlias alias="Article" type="com.dianping.lx.domain.Article"/>
        </typeAliases>
    
        <environments default="development">
            <environment id="development">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="${database.driver}"/>
                    <property name="url" value="${database.url}"/>
                    <property name="username" value="${database.username}"/>
                    <property name="password" value="${database.password}"/>
                </dataSource>
            </environment>
        </environments>
    
        <mappers>
            <mapper resource="sqlmap/article.xml"/>
        </mappers>
    </configuration>

    jdbc.properties文件内容如下:

    database.driver = com.mysql.jdbc.Driver
    database.url = jdbc:mysql://localhost:3306/test
    database.username = app
    database.password = app

    该配置文件使用了mybatis-3-config.dtd约束
    properties resource="jdbc.properties" 指出了属性资源文件的路径
    typeAliases设置了类型别名,类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
    environments中配置了环境,事务管理器使用JDBC,数据源类型为POOLED。
    数据库的连接属性如driver、username等使用了动态配置的属性值,实际值会从jdbc.properties中取得。
    mappers中设置了映射文件的路径,告诉MyBatis到哪里去找到这些包含SQL映射语句的配置文件

    配置文件包含的属性设置项详见http://mybatis.org/mybatis-3/zh/configuration.html#


    映射文件:配置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.dianping.lx.dao.ArticleDAO">
        <resultMap id="Article_Map" type="Article">
            <id property="id" column="id"/>
            <id property="title" column="title"/>
            <id property="body" column="body"/>
            <id property="pageView" column="page_view"/>
            <id property="isVisible" column="is_visible"/>
            <id property="canComment" column="can_comment"/>
            <id property="updateTime" column="update_time"/>
        </resultMap>
    
        <select id="getArticleById" parameterType="int" resultMap="Article_Map" >
            select * from article where id=#{id}
        </select>
    
        <insert id="addArticle" parameterType="Article" useGeneratedKeys="true" keyProperty="id">
            insert into article(title,body,is_visible) values(#{title},#{body},#{isVisible})
        </insert>
    
        <update id="updateArticle" parameterType="Article">
            update article set title=#{title},body=#{body},is_visible=#{isVisible},can_comment=#{canComment} where id=#{id}
        </update>
    
        <delete id="deleteArticleById" parameterType="int">
            delete from article where id=#{id}
        </delete>
    </mapper>

    风格的参数映射

    sql – 可被其他语句引用的可重用语句块。
    insert – 映射插入语句
    update – 映射更新语句
    delete – 映射删除语句
    select – 映射查询语句

    select中的parameterType是输入参数,表示接收1个int类型的参数,resultMap表示sql执行结果的返回类型,此处是Article_Map,和resultMap属性中id为的Article_Map的相对应,由于其关联的是type是Article这个类,因此sql查询结果会根据resultMap设定的一一对应关系把数据库查询结果对应字段的值设置到Article类的相应成员,完成了ResultSet到POJO类的映射。注意:如果POJO类的成员变量字段名称和数据库中列字段名称完全一致即精确匹配的情况下,也可以直接使用resultType为Article,如果不完全匹配也可以利用sql的别名使其匹配从而免去使用resultMap,如下所示。

    <select id="getArticleById" parameterType="int" resultType="Article" >
            select
               id,
               title,
               body,
               page_view as pageView,
               is_visible as isVisible,
               can_comment as canComment,
               update_time as updateTime
            from article where id=#{id}
        </select>
    sql语句中的#{id}是一个预处理参数,等价于使用JDBC方式用PreparedStatement中的?占位符
    insert中的useGeneratedKeys、keyProperty属性用于获取插入记录的主键值。
    useGeneratedKeys :(仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。
    keyProperty :(仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
    详细参数可参考:http://mybatis.org/mybatis-3/zh/sqlmap-xml.html

    动态SQL

    MyBatis的强大特性之一便是它的动态SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。

    if
    choose (when, otherwise)
    trim (where, set)
    foreach
    动态SQL详见:http://mybatis.org/mybatis-3/zh/dynamic-sql.html

    展开全文
  • MyBatis配置文件mybatis-config详解

    千次阅读 多人点赞 2019-11-07 18:58:27
    MyBatis配置文件mybatis-config.xml内容详解 文章目录MyBatis配置文件mybatis-config.xml内容详解一、略解mybatis-config.xml二、详解mybatis-config.xml1. configuration2. properties3. settings4. typeAliases5. ...

    MyBatis配置文件mybatis-config.xml内容详解


    一、略解mybatis-config.xml

    核心配置文件mybatis-config.xml头部要包含这个约束:

    <?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">
    

    点开上面这个链接可以知道mybatis-config.xml文件的大致框架如下:

    <?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></property>
            ...
        </properties>
    
        <settings>
            <setting></setting>
            ...
        </settings>
    
        <typeAliases>
            <package></package>
            ...
            <typeAlias></typeAlias>
            ...
        </typeAliases>
    
        <typeHandlers>
            <package></package>
            ...
            <typeHandler></typeHandler>
            ...
        </typeHandlers>
    
        <objectFactory>
            <property></property>
            ...
        </objectFactory>
    
        <objectWrapperFactory>
            <property></property>
            ...
        </objectWrapperFactory>
    
        <reflectorFactory></reflectorFactory>
    
        <plugins>
            <plugin>
                <property></property>
                ...
            </plugin>
            ...
        </plugins>
    
        <environments>
            <environment>
                <transactionManager>
                    <property></property>
                    ...
                </transactionManager>
    
                <dataSource>
                    <property></property>
                    ...
                </dataSource>
            </environment>
            ...
        </environments>
    
        <databaseIdProvider>
            <property></property>
            ...
        </databaseIdProvider>
    
        <mappers>
            <package></package>
            ...
            <mapper></mapper>
            ...
        </mappers>
    
    </configuration>
    

    二、详解mybatis-config.xml

    1. configuration

    最外层标签,表示这里面的都是配置内容。

    2. properties

    properties用来定义变量,从而将配置值写死到mybatis-config.xml中,也可以具体到一个属性文件中,并且使用属性文件的key名作为占位符。
    注意这个标签必须是configuration中最前面的子标签。

    1. 将配置值写到property标签中,在之后的内容中可以用${}来获取该值:

    <configuration>
        <properties>
            <property name="jdbc.username" value="test" /> 
            <property name="jdbc.password" value="test" /> 
        </properties>
    
        <environments default="development"> 
            <environment id="development"> 
                <transactionManager type="JDBC" /> 
                <dataSource type="POOLED">
                    <property name="username" value="${jdbc.username}" /> 
                    <property name="password" value="${jdbc.password}" /> 
            </dataSource> 
            </environment> 
        </environments>  
    </configuration>
    

    2. 将配置值写到另外一个属性文件中,在之后的内容中可以用${}来获取该值:

    新建db.properties文件,写入如下内容:

    jdbc.driverClassName=oracle.jdbc.driver.OracleDriver 
    jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:XE
    jdbc.username=test 
    jdbc.password=test
    

    mybatis-config.xml写入如下内容:

    <configuration>
        <properties resource="db.properties"></properties>
    
        <environments default="development"> 
            <environment id="development"> 
                <transactionManager type="JDBC" /> 
                <dataSource type="POOLED">
                    <property name="driver" value="${jdbc.driverClassName}" /> 
                    <property name="url" value="${jdbc.url}" /> 
                    <property name="username" value="${jdbc.username}" /> 
                    <property name="password" value="${jdbc.password}" /> 
            </dataSource> 
            </environment> 
        </environments>  
    </configuration>
    

    3. 注意:如果两种方式都写了,那么文件中的配置优先级更高,也就是文件的配置会覆盖标签中的值。

    3. settings

    settings标签用来设置全局参数,大多数情况下,这些参数使用它们的默认值即可。为满足应用特定的需求,MyBatis默认的全局参数设置可以被覆盖掉,如下所示:

    <settings>
        <!-- 这个配置使全局的映射器启用或禁用 【缓存】 -->
        <setting name="cacheEnabled" value="true" />
    
        <!-- 全局启用或禁用【延迟加载】。当禁用时,所有关联对象都会即时加载 -->
        <setting name="lazyLoadingEnabled" value="true" />
    
        <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动才有效) -->
        <setting name="multipleResultSetsEnabled" value="true" /> 
    
        <!-- 使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动 -->
        <setting name="useColumnLabel" value="true" /> 
    
        <!-- 允许JDBC支持【id自动生成】。需要适合的驱动。 -->
        <setting name="useGeneratedKeys" value="false" /> 
    
        <!-- 指定MyBatis如何【自动映射】列到 列/属性值。PARTIAL只会自动映射简单、没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其他情况) -->
        <setting name="autoMappingBehavior" value="PARTIAL" />
    
        <!-- 配置默认的执行器。SIMPLE执行器没有什么特别之处。REUSE执行器重用预处理语句。BATCH【执行器】重用语句和批量更新 -->
        <setting name="defaultExecutorType" value="SIMPLE" /> 
    
        <!-- 设置【超时时间】,它决定驱动等待一个数据库响应的时间 -->
        <setting name="defaultStatementTimeout" value="25000" /> 
    
        <!-- 在嵌套语句中使用【分页功能】(RowBounds),默认false -->
        <setting name="safeRowBoundsEnabled" value="false" /> 
    
        <!-- 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。默认false -->
        <setting name="mapUnderscoreToCamelCase" value="false" /> 
    
        <!-- MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。 若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。 -->
        <setting name="localCacheScope" value="SESSION" /> 
    
        <!-- 当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。 某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。 -->
        <setting name="jdbcTypeForNull" value="OTHER" />
    
        <!-- 指定对象的哪个方法【触发一次延迟加载】。 -->
        <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode ,toString" /> 
    
        <!-- CGLIB | JAVASSIST 默认JAVASSIST(MyBatis 3.3 or above)  -->
        <!-- 指定 Mybatis 创建具有延迟加载能力的对象所用到的【代理工具】。 -->
        <setting name="proxyFactory" value="JAVASSIST" /> 
        <!-- 当启用时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载;反之,每种属性将会按需加载。 -->
        <setting name="aggressiveLazyLoading" value="true" /> 
    
        <!-- 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 -->
        <setting name="logImpl" value="LOG4J " /> 
    
        <!-- 指定 MyBatis 增加到日志名称的前缀。值可以是任意字符串 -->
        <setting name="logPrefix" value="LOG4J " /> 
    
        <!-- 指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成 null 的。 默认false-->
        <setting name="callSettersOnNulls" value="false " /> 
    </settings> 
    

    4. typeAliases

    这个标签里面的typeAlias标签可以定义别名,会在映射文件中使用。如果没有定义别名,那必须使用全限定名。配置别名有两种方法:

    1. 直接写在typeAlias标签中:

    <typeAliases> 
        <typeAlias alias="Student" type="com.au.bean.Student" />
    </typeAliases> 
    

    2. package标签和@Alias注解配合使用:

    <typeAliases> 
        <package name="com.au.bean" />
    </typeAliases> 
    
    package com.au.bean;
    
    @Alias("Student")   // 配合package标签起别名使用,别名默认为类名
    public class Student {
        private Integer id;
        private String name;
        ...
    }
    

    在没有配别名之前的mapper.xml文件是下面这样写的,即resultType的值要写类的全限定名。

    <select id="findStudentById" parameterType="int" resultType="com.au.bean.Student"> 
        SELECT STUD_ID AS ID, NAME, EMAIL, DOB  
        FROM STUDENTS WHERE STUD_ID=#{Id} 
    </select> 
    

    配置之后就可以写成别名了:

    <select id="findStudentById" parameterType="int" resultType="Student"> 
        SELECT STUD_ID AS ID, NAME, EMAIL, DOB  
        FROM STUDENTS WHERE STUD_ID=#{Id} 
    </select> 
    

    注意:别名【不区分大小写】。

    5. typeHandlers

    typeHandlers标签用来设置类型处理器,在执行sql语句的时候,prepareStatement会设置sql语句中的 ? 值(如select * from student where id = ?),此时类型处理器帮prepareStatement找到对应的set方法,如setInt、setString或setDate等,但是如果是自定义的类型,类型处理器就找不到对应的set方法,所以要自定义类型处理器。

    有关自定义类型处理器不详细介绍,移步我的其它文章:MyBatis自定义类型处理器(typeHandler)

    假如我现在已经写好了一个类型处理器为PhoneTypeHandler,进行如下操作进行关联使用:

    <configuration> 
        <typeHandlers> 
            <typeHandler handler="com.au.typehandlers.PhoneTypeHandler" /> 
        </typeHandlers> 
    </configuration> 
    

    6. objectFactory

    用于指定结果集对象的实例是如何创建的。MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。默认情况下,我们不需要配置,mybatis会调用默认实现的objectFactory。 除非我们要自定义ObjectFactory的实现, 那么我们才需要去手动配置。自定义ObjectFactory只需要去继承DefaultObjectFactory(是ObjectFactory接口的实现类),并重写其方法即可。

    7. objectWrapperFactory

    8. reflectorFactory

    9. plugins

    MyBatis的插件,插件可以修改MyBatis内部的运行规则,如分页插件等。

    10. environments

    environments是配置mybatis当前工作的数据库环境的地方。整体结构为:

    <environments default="db1">
        <environment id="db1">
            数据库连接四要素
            事务管理方式
        </environment>
        
        <environment id="db2">
            数据库连接四要素
            事务管理方式
        </environment>
        
        ...
    </environments>
    

    a. dataSource

    dataSource表示的是【数据源】:至少会包括该连接数据库的各种信息【注意: 在Java里面,数据源是一个对象】

    <dataSource type="POOLED"> 
        <property name="driver" value="${jdbc.driverClassName}" /> 
        <property name="url" value="${jdbc.url}" /> 
        <property name="username" value="${jdbc.username}" /> 
        <property name="password" value="${jdbc.password}" /> 
    </dataSource> 
    

    dataSource的类型type属性可以配置成其内置类型之一,如UNPOOLED,POOLED,JNDI(web使用)。如果将类型设置成UNPOOLED,MyBatis会为每一个数据库操作创建一个新的连接,使用完了并关闭它,该方式适用于只有小规模数量并发用户的简单应用程序上。

    如果将属性设置成POOLED,MyBatis会【创建】一个【数据库连接池】,连接池中的一个连接将会被用作数据库操作。一旦数据库操作完成,MyBatis会将此连接返回给连接池。在开发或测试环境中,经常使用此种方式。

    如果将类型设置成JNDI(Java Naming and Directory Interface , 【Java命名和目录接口】, 是SUN公司提供的一种标准的Java命名系统接口),MyBatis从在应用服务器向配置好的JNDI数据源dataSource获取数据库连接。在生产环境中,优先考虑这种方式。

    b. transcationManager

    transcationManager是事务管理器,取值JDBC或MANAGED,JDBC表示手动控制,MANAGED被服务器管理。

    JDBC事务管理器的使用,是在【jdbc程序】负责管理数据库连接的生命周期(提交、回退等等)的时候。如果将TransactionManager 属性设置成JDBC,MyBatis内部将使用JdbcTransactionFactory类创建TransactionManager。例如,部署到ApacheTomcat的应用程序,需要应用程序自己管理事务。MANAGED 事务管理器的使用,是在【应用服务器】负责管理数据库连接生命周期的时候。如果将TransactionManager属性设置成MANAGED时,MyBatis内部使用ManagedTransactionFactory 类创建事务管理器TransactionManager。例如,当一个Java EE的【应用程序部署】在类似JBoss,WebLogic,GlassFish应用【服务器】上时,它们会使用EJB进行应用服务器的事务管理能力。在这些管理环境中,你可以使用MANAGED事务管理器。注:【Managed 是托管】的意思,即我们编写的应用程序本身不去管理事务,而是把事务管理交给应用所在的服务器进行管理。

    c. 其它

    MyBatis支持配置多个environment环境,可以将应用部署到不同的环境上,如DEV【开发环境】,TEST【测试环境】,QA【质量评估环境】,UAT【用户验收环境】,PRODUCTION【生产环境】,可以通过将默认environments的【default属性】设置成想要的environment的id值。有时候,我们可能需要在相同的应用下使用多个数据库,比如我们可能有【shoppingcart】数据库来存储所有的【订单明细】;使用【reports】数据库存储【订单明细】的合计,用作报告。(也就是如果系统在运行期间如果有切换数据库环境的需求,mybatis中也可以很轻松的实现)。如果你的【应用】需要连接【多个数据库】,你需要将每个数据库配置成独立的环境,并且为每一个数据库创建一个SqlSessionFactory。例如:

    <environments default="shoppingcart"> 
        <!-- 第一个数据库 用来存放明细 -->
        <environment id="shoppingcart"> 
        <transactionManager type="MANAGED" /> 
        <dataSource type="JNDI"> 
            <property name="data_source" value="java:comp/jdbc/ShoppingcartDS" /> 
        </dataSource> 
        </environment> 
    
        <!-- 第二个数据库 用来查询报表 -->
        <environment id="reports"> 
        <transaction Managertype="MANAGED" /> 
        <dataSource type="JNDI"> 
            <property name="data_source" value="java:comp/jdbc/ReportsDS" /> 
        </dataSource> 
        </environment> 
    </environments> 
    

    我们可以为以上每个环境创建一个SqlSessionFactory,java代码:

        inputStream = Resources.getResourceAsStream("mybatis-config.xml"); 
        //默认的环境
        defaultSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
        //统计明细的环境 代码内部【通过参数】可以【切换数据库】
        cartSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "shoppingcart"); 
    
        //统计报表的环境
        reportSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, "reports");
    

    注意:对于environments,我们可以在其中配置多个environment子元素,同时还需要在environment中配置dataSource和transactionManager元素。

    11. databaseIdProvider

    12. mappers

    mappers标签用来配置SQLMapper文件路径。mappers里面每一个mapper子标签都可以从不同类型的资源中加载映射mapper:

    • resource属性:用来指定在classpath中的mapper文件。
    • url属性:用来通过完全文件系统路径或者weburl地址来指向mapper文件。
    • class属性:用来指向一个mapper接口。
    • package属性:用来指向可以找到Mapper接口的包名。`

    假如我在项目的src/com/au/mappers目录下有StudentMapper.xml文件,那么应该这样配置:

    <configuration> 
        <mappers> 
            <mapper resource="com/au/mappers/StudentMapper.xml" /> 
        </mappers> 
    </configuration>
    

    假如我在电脑C盘有StudentMapper.xml文件,那么应该这样配置:

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

    假如我没有写StudentMapper.xml文件,而是直接写sql注解(如@insert)在StudentMapper.java接口上,那么应该这样配置:

    <configuration> 
        <mappers> 
            <mapper class="com.au.mappers.StudentMapper" /> 
        </mappers> 
    </configuration>
    

    还可以这样配置,前提是接口和xml文件的名字要一样:

    <configuration> 
        <mappers> 
            <package name="com.au.mappers" /> 
        </mappers> 
    </configuration>
    
    展开全文
  • mybatis配置文件报错的几种情况

    万次阅读 2020-05-11 15:38:59
    mybatis配置文件报错的几种情况 1、mybatis配置文件的标签顺序不对。提示以下错误信息(鼠标放置在标签上): The content of element type “configuration” must match “(properties?,settings?,typeAliases?,...

    mybatis配置文件报错的几种情况

    1、mybatis配置文件的标签顺序不对。提示以下错误信息(鼠标放置在标签上):
    The content of element type “configuration” must match “(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)”.
    解决办法:根据提示的信息,进行规范的配置即可。
    2、直接复制别人的mybatis配置文件代码。可能报错。错误信息可能为以下内容:
    Caused by: org.xml.sax.SAXParseException; lineNumber: 13; columnNumber: 19; 元素类型为 “typeAliases” 的内容必须匹配 “(typeAlias*,package*)”。
    解决办法:根据复制的内容,自己手写一遍即可。

    展开全文
  • MyBatis之优化MyBatis配置文件中的配置 2017/9/30 MyBatis配置文件很重要,首先我们来看看MyBatis配置文件中的内容和顺序: 文件目录结构如下: 1.属性定义 可以把一些通用的属性值配置在...
  • MyBatis配置文件开启驼峰命名映射

    千次阅读 2019-03-08 22:37:15
    MyBatis配置文件开启驼峰命名映射 今天看SpringBoot整合Mybatis时看到了,遇到了一个遗忘的点,mybatis属性使用驼峰命名,我居然给忘了怎么配置来着。修改mybatis配置文件,配置驼峰命名。 所以整理一下这些遗忘的点...
  • 转载自:MyBatis之优化MyBatis配置文件中的配置MyBatis配置文件很重要,首先我们来看看MyBatis配置文件中的内容和顺序:(属性)(全局配置参数)(类型别名)(类型处理器)(对象工厂)(插件)(环境集合属性对象)
  • Mybatis配置文件的主要元素

    千次阅读 2018-10-23 16:50:36
    Mybatis配置文件中的主要元素如下:  注意:这些子元素必须按照由上到下的顺序进行配置,否则MyBatis在解析XML配置文件的时候会报错。
  • Mybatis配置文件属性讲解

    千次阅读 2017-06-03 14:24:48
    Mybatis配置文件属性讲解MyBatis 的 XML 配置文件包含了影响 MyBatis 行为甚深的设置和属性信息。 XML 文档 的高层级结构如下: configuration 配置 properties 属性 settings 设置 typeAliases 类型命名 ...
  • Mybatis 配置文件 useGeneratedKeys 参数

    万次阅读 2017-07-01 13:38:15
    Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回
  • mybatis配置文件详解,mybatis映射 文件详解,mapper,configuration,environment
  • MyBatis配置文件标签

    千次阅读 2016-08-26 00:04:46
    MyBatis配置文件标签: 1)configuration:根元素 2)properties:定义配置外在化 3)settings:一些全局性的配置 4)typeAliases:为一些类定义别名 5)typeHandlers:定义类型处理,也就是定义java类型与...
  • MyBatis 配置文件 用户密码加密存储

    千次阅读 2019-04-13 02:14:27
    一般是使用properties保存配置文件内容,然后在mybatis配置文件中进行读取 在resource文件下新建db.properties文件 内容如下 # 数据库配置文件 driver = com.mysql.cj.jdbc.Driver url = jdbc:mysql:// /mybatis ...
  • maven中mybatis配置文件的路径见①读取mybatis配置文件的方式见②,读取方式见③。按照②中的路径去读取配置文件会出现不能找到配置文件的错误。 错误的原因:按照String resource = "/config/mybatis/mybatis-...
  • mybatis配置文件中为根节点,其有一系列的子节点,主要使用的有:properties、typeAliases、typeHandlers、environments、databaseIdProvider、mappers。
  • MyBatis配置文件中数据源的几种配置方式 第一种方式 第一种方式就是直接写mybatis-config配置文件中的dataSource标签下的property标签中,如: <dataSource type="POOLED"> <property name="driver" ...
  • MyBatis配置文件和简单使用

    千次阅读 2018-03-09 10:09:59
    MyBatis-01-mybatis配置文件和简单使用一. MyBatis简介MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。...
  • ============================mybatis配置文件 "http://mybatis.org/dtd/mybatis-3-config.dtd">       ============================mybatis映射文件 ...
  • MyBatis学习 之 四、MyBatis配置文件

    千次阅读 2012-08-05 13:15:56
    四、MyBatis主配置文件 MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql MyBatis学习 之 二、SQL语句映射文件(1)resultMap MyBatis学习 之 二、SQL语句映射...MyBatis学习 之 四、MyBatis配置文件
  • Mybatis配置文件之配置元素解析

    千次阅读 2018-05-07 11:31:48
    Mybatis配置文件之配置元素解析 mappers是mybatis的映射器,是mybatis中最复杂、最核心的功能组件,本文我们只是简单的介绍下映射器的引入,即在配置文件中的配置方式。 在mybatis中我们是通过映射器接口来调度...
  • Mybatis配置文件之属性配置元素解析

    千次阅读 2018-05-03 14:43:37
    Mybatis配置文件之属性配置元素解析 1. 概述 设置元素在mybatis中最为复杂,同时也是最为重要的配置之一。它会改变mybatis运行时的行为,即使不配置settings元素,mybatis也可以正常运行,不过了解settings的配置...
  • 代理开发方式(重点掌握)Spring整合Mybatis(注解方式完整过程,摒弃MyBatis配置文件)1.创建Java项目2.MyEclipse使用Spring Facets导入依赖3.添加其它依赖4.创建三层结构5.实体类6.Mapper接口(Dao)7.Servic...
  • MyBatis配置文件的详解和LOG4J实现

    千次阅读 2019-07-25 21:28:47
    MyBatis配置文件的详解 mybatis-config文件解析 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" ...
  • MyBatis配置文件之— Mapper映射配置文件中的各标签以及作用 Mapper映射配置文件:主要是配置sql语句 需要在核心配置文件中 通过Mapper标签引入 <?xml version="1.0" encoding="UTF-8" ?> xml文件的固定写法 ...
  • Mybatis 配置文件 useGeneratedKeys 参数只针对 insert 语句生效,默认为 false。当设置为 true 时,表示如果插入的表以自增列为主键,则允许 JDBC 支持自动生成主键,并可将自动生成的主键返回。/* * 配置 ...
  • Mybatis配置文件中 settings>  setting name="mapUnderscoreToCamelCase" value="true"/> settings> 若不配置默认为false在**Mapper.xm文件的select语句中若不是返回ResultMap而是ResultType则返回字段不会...
  • MyBatis 配置文件 与 约束

    万次阅读 多人点赞 2018-01-12 22:22:00
    1、MyBatis配置文件 mybatis.xml <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 2、MyBatis 映射文件 mapper.xml ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,225
精华内容 18,090
关键字:

mybatis配置文件