<configuration>
<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="org/mybatis/example/BlogMapper.xml"/>
mappers>
configuration>
注意
:接下来所有的配置,都要按照上图的顺序进行配置,否则会出错
MyBatis 可以配置成适应多种环境,但每个 SqlSessionFactory 实例只能选择一种环境。
environments 元素定义了如何配置环境。
其中可以嵌套多个环境
<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>
<environment>
...
environment>
<environment>
...
environment>
environments>
子元素节点:environment
JDBC
/MANAGED
JDBC
UNPOOLED
/POOLED
/JNDI
dbcp
、c3p0
、druid
等等…我们利用Properties属性来实现应用配置文件
这些属性可以在外部进行配置,并可以进行动态替换。
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSH=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=200024
<configuration>
<properties resource="config.properties"/>
<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>
configuration>
引入外部文件的同时,也可以在其中增加一些属性配置
优先级问题:首先读取在 properties 元素体内指定的属性
<properties resource="config.properties">
<property name="username" value="root"/>
<property name="password" value="200024"/>
properties>
比如config.properties中的数据库连接密码正确,但是properties 元素体内的密码不正确,则会报错,因为优先读取properties 元素体内指定的属性
注意位置顺序
<typeAliases>
<typeAlias type="pojo.User" alias="User"/>
typeAliases>
type
的值为指定Java类名,alias
为新起的别名<typeAliases>
<package name="pojo"/>
typeAliases>
每一个在包 pojo
中的 实体类,在没有注解的情况下,会使用 实体类 的首字母小写的非限定类名来作为它的别名。 比如 pojo.User
的别名为 user
;若有注解,则别名为其注解值。
@Alias("hello")
public class User {
...
}
此时,别名为hello
下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
别名 | 映射的类型 |
---|---|
_byte | byte |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
object | Object |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为
设置(settings)查看帮助文档https://mybatis.org/mybatis-3/zh/index.html
最常用
:日志
如果一个数据库操作出现了异常,我们需要排错,日志是最好的助手!
logImpl
- SLF4J
- LOG4J
- LOG4J2
- JDK_LOGGING
- COMMONS_LOGGING
- STDOUT_LOGGING
- NO_LOGGING
在MyBatis核心配置文件中配置我们的日志
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
settings>
然后运行我们的测试类,发现多了很多内容,这就是我们的日志
什么是LOG4J?
使用步骤:
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file
#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/zsr.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
<settings>
<setting name="logImpl" value="LOG4J"/>
settings>
同时在当前项目目录下生成了zsr.log文件,这里面保存了我们的日志信息
这就是我们在log4j.properties进行的设置,我们同样可以设置其他的内容
IDEA可能出现打不开的情况,我们将其换成.txt格式就可以打开了
简要使用
要在使用LOG4J的类中,导入包 org.apache.log4j.Logger
日志对象,参数为当前类的class
static Logger logger = Logger.getLogger(UserMapperTest.class);
编写测试方法,三种常见日志级别
@Test
public void testLog4j() {
logger.info("info:进入了testLog4j方法");
logger.debug("debug:进入了testLog4j方法");
logger.error("error:进入了testLog4j方法");
}
运行该方法
mappers
file:///
的 URL)<mappers>
<mapper resource="mapper/UserMapping.xml"/>
mappers>
<mappers>
<mapper class="mapper.UserMapper"/>
mappers>
常见问题:
注意点:
我的问题:Mapper接口和Mapper配置文件没有同名!!
修改后:
<mappers>
<package name="mapper"/>
mappers>
注意点同方式二:
了解~