mybatis-config.xml配置

pom依赖

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.48</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.2</version>
    </dependency>
</dependencies>

mybatis-config.xml各项配置讲究严格的顺序,具体配置项顺序遵循文档的顺序。必须按照从上到下的顺序。

从XML中构建SqlSessionFactory,每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为核心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

XML 配置文件中包含了对 MyBatis 系统的核心设置,包含获取数据库连接实例的数据源(DataSource)和决定事务作用域和控制方式的事务管理器(TransactionManager)。

properties属性读取外部资源

添加jdbc.properties资源文件:

jdbc.properties资源文件内容:

jdbc.driverClass = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username = root
jdbc.password = root

在Mybatis-config.xml中引入jdbc.properties资源文件:

<?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>
    <!-- 引入外部资源文件,resource:相对路径,url:绝对路径 -->
    <properties resource="jdbc.properties" />
    <!-- 环境:说明可以配置多个,default:指定生效的环境 -->
    <environments default="development">
        <!-- id:环境的唯一标识 -->
        <environment id="development">
            <!-- 事务管理器,type:类型 -->
            <transactionManager type="JDBC" />
            <!-- 数据源:type-池类型的数据源 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 映射文件 -->
    <mappers>
        <mapper resource="UserMapper.xml" />
        <mapper resource="UserDaoMapper.xml" />
    </mappers>
</configuration>

通过properties引入外部资源文件之后,就可以通过${xxx}的方式使用资源文件里的参数了。

settings设置

settings参数有很多,主要了解以下3个参数。

设置参数 描述 有效值 默认值
lazyLoadingEnabled 延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。 true | false false
aggressiveLazyLoading 当启用时,带有延迟加载属性的对象的加载与否完全取决于对任意延迟属性的调用;反之,每种属性将会按需加载。 true | false fasle
mapUnderscoreToCamelCase 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 true | false false

驼峰匹配

开启驼峰匹配:完成经典的数据库命名到java属性的映射

  • 经典数据库命名:如果多个单词之间,通常使用下划线进行连接。

  • java中命名:第二个单词首字母大写。

驼峰匹配:相当于去掉数据中的名字的下划线,和java进行匹配

查询数据的时候,查不到userName的信息,原因:数据库的字段名是user_name,POJO中的属性名字是userName,两端不一致,造成mybatis无法填充对应的字段信息。修改方法:在sql语句中使用别名

  • 解决方案1:在sql语句中使用别名

  • 解决方案2: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">
<configuration>
    <properties resource="jdbc.properties"></properties>
    
    <settings>
    <!-- 开启驼峰匹配:经典的数据库列名(多个单词下划线连接)映射到经典的java属性名(多个单词驼峰连接) -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <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="UserMapper.xml" />
        <mapper resource="UserDaoMapper.xml" />
    </mappers>
</configuration>

在UserMapper.xml中修改sql语句删除别名

配置日志log4j

导入log4j依赖

<dependencies>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

log4j.properties

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:\\mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=DEBUG, stdout

配置log4j日志

<?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>
    <!--设置日志log4j-->
    <settings>
        <setting name="logImpl" value="LOG4J"></setting>
    </settings>
<configuration>

日志工厂

Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理:

  • SLF4J
  • LOG4J
  • LOG4J2
  • JDK_LOGGING
  • COMMONS_LOGGING
  • STDOUT_LOGGING
  • NO_LOGGING

在Mybatis中具体使用哪一个日志实现,在设置settings中设定

🌰STDOUT_LOGGING标准日志输出

<configuration>
    <properties resource="jdbc.properties"/>
    <!--设置日志-->
    <settings>
        <!--必须这么写,注意前后空格不要有空格-->
       <setting name="logImpl" value="STDOUT_LOGGING"></setting>
    </settings>

typeAliases类型别名

类型别名是为 Java 类型命名的一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

<typeAliases>
    <typeAlias alias="Author" type="domain.blog.Author"/>
    <typeAlias alias="Blog" type="domain.blog.Blog"/>
</typeAliases>

实体类少的时候使用,若实体类多使用包扫描,MyBatis 会在包名下面搜索需要的 Java Bean,比如:

<typeAliases>
    <package name="com.hguo"/>
</typeAliases>

每一个在包 com.hguo 中的 Java Bean,在没有@Alias注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。若有注解,则别名为其注解值。

@Alias("author")
public class Author {
    ...
}

方式一:typeAlias

<?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"></properties>
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
	</settings>
    
	<typeAliases>
		<!-- 类型别名:type-pojo类的全路径,alias:别名名称(可随便写,推荐和类名一致) -->
		<typeAlias type="com.hguo.mybatis.pojo.User" alias="user" />
	</typeAliases>
    
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<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="UserMapper.xml" />
		<mapper resource="UserDaoMapper.xml" />
	</mappers>
</configuration>

缺点:每个pojo类都要去配置。

方式二:package

扫描指定包下的所有类,扫描之后的别名就是类名,大小写不敏感(不区分大小写),建议使用的时候和类名一致。

<typeAliases>
    <!-- 类型别名:type-pojo类的全路径,alias:别名名称(可随便写,推荐和类名一致) -->
    <!-- <typeAlias type="com.hguo.mybatis.pojo.User" alias="user" /> -->
    
    <!-- 开启别名包扫描,name:包路径,扫描的别名就是类名,并且大小写不敏感 -->
    <package name="com.hguo.mybatis.pojo"/>
</typeAliases>

在映射文件中使用类型别名:

environments环境配置

mybatis可以配置多种环境,测试、开发等<environments default="development">可以设置当前使用的环境

每个sqlSessionFactory实例只能选择一种环境,还可以在创建sqlSessionFactory调用build方法时,指定第二个参数为当前sqlSession运行的环境

														    // 测试环境
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test");

mybatis默认的事务管理器就是JDBC连接池:POOLED

mappers映射器

定义 SQL 映射语句。 但是首先我们需要告诉 MyBatis 到哪里去找到这些语句。 Java 在自动查找这方面没有提供一个很好的方法,所以最佳的方式是告诉 MyBatis 到哪里去找映射文件。 你可以使用相对于类路径的资源引用, 或完全限定资源定位符(包括 file:/// 的 URL),或类名和包名等。

<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
</mappers>

注意:

  • 接口和它的Mapper配置文件必须同名
  • 接口和他的Mapper配置文件必须在同一个包下
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
posted @ 2023-02-26 10:47  Lz_蚂蚱  阅读(319)  评论(0编辑  收藏  举报