1. 项目中引用mybatis
<!--mybatis 依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
<!-- mysql的jdbc 依赖 https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.25</version>
</dependency>
mybatis 日志相关依赖
<!--日志框架
-->
<!--slf4j 为抽象的日志框架 主要提供日志接口 其具体的日志实现 可以交给 logging,log4j,logback-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!--logback 是 log4j的后续版本,核心重写,性能提升将近10倍,作为slf4j 的具体实现的日志框架 -->
<!--核心-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.7</version>
</dependency>
<!--logback-classic 实现了SLF4J API ,可以在 logback 和 其他日志记录系统之间切换-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.7</version>
</dependency>
<!--logback-access 集成了Servlet 容器,可以提供 HTTP访问日志功能。
https://logback.qos.ch/access.html
-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>1.1.7</version>
</dependency>
2 mybatis 原理
String myBatisConfigResourceConfig="mybatis-config.xml";
String jdbcConfigResourceConfig="jdbc_config.properties";
SqlSession sqlSession=null;
try {
InputStream myBatisInputStream = Resources.getResourceAsStream(myBatisConfigResourceConfig);
InputStream jdbcInputStream = Resources.getResourceAsStream(jdbcConfigResourceConfig);
Properties properties=new Properties();
properties.load(jdbcInputStream);
//建造 sql会话工厂
//注意构建者 方式
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(myBatisInputStream, properties);
//build(InputStream inputStream, String environment, Properties properties) 添加 environment 参数可以指定数据源
//通过SqlSessionFactory 映射 SqlSession
//sqlSessionFactory.getConfiguration();//取得 sqlSessionFactory 中的配置
sqlSession=sqlSessionFactory.openSession();//打开一个会话 一个SqlSession 可以执行 一组的 sql
Assert.assertNotNull(sqlSession);
List<RoleDto> roleList= sqlSession.selectList("com.ceba.mybatis.demo.dao.RoleDao.selectRole");
//映射Mapper
Assert.assertNotNull(roleList);
} catch (IOException e) {
log(e.getMessage());
}finally {
if(sqlSession != null){
sqlSession.close();
}
}
mybatis 主要是通过 sql 映射 来执行 sql
SqlSessionFactory 就相当于 数据库连接池
SqlSession 代表 要操作一次数据库
sqlSession.selectList 代表 执行那一条SQL的映射语句
SqlSessionFactoryBuider 用来 建造数据库 连接池
连接池的名称,就是数据源的名称,一个配置文件可以配置多个 数据源,同一时间只能使用一个数据源。
3.配置文件讲解
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>
<!--设置 mybatis 的参数设置 解释请浏览 http://www.mybatis.org/mybatis-3/zh/configuration.html#properties -->
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
<!--mybatis 日志
可选的日志类型
SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING
-->
<setting name="logImpl" value="SLF4J"/>
</settings>
<!-- java 类型别名
RoleDto com.ceba.mybatis.demo.dto.RoleDto
那么 RoleDto 就代表 com.ceba.mybatis.demo.dto.RoleDto 类的别名
映射文件 里 resultType parameterType 就可以简写为 RoleDto
别名的三种表现方式 -->
<typeAliases>
<!-- 1.特指 具体到包.类名-->
<!--<typeAlias alias="RoleDto" type="com.ceba.mybatis.demo.dto.RoleDto"></typeAlias>-->
<!-- 2.泛指 别名等于类名相同 -->
<package name="com.ceba.mybatis.demo.dto"></package>
<!-- 3.枚举标识 @Alias("RoleDto") com.ceba.mybatis.demo.dto.RoleDto 类上加枚举-->
</typeAliases>
<!-- 自定义类型转换
数据库类型 与 java类型 的转换关系 接口 org.apache.ibatis.type.BaseTypeHandler
解释请浏览 http://www.mybatis.org/mybatis-3/zh/configuration.html#properties
三种表现方式
-->
<!--<typeHandlers>
1.特指 具体到包.类名
<typeHandler handler=""></typeHandler>
2.泛指 别名等于类名相同
<package name=""></package>
3.枚举标识 @MappedJdbcTypes(JdbcType.VARCHAR) 并继承 BaseTypeHandler
</typeHandlers>-->
<!-- 对象工厂
<objectFactory type=""></objectFactory>
-->
<!--插件
拦截处理,有点像 过滤器
<plugins>
<plugin interceptor=""></plugin>
</plugins>
-->
<!--mybatis 数据源 配置
default 属性标识 默认的数据源
-->
<environments default="development">
<environment id="development">
<!-- 事务管理配置 -->
<transactionManager type="JDBC"/>
<!-- 数据源 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.demo.driver}"/>
<property name="url" value="${jdbc.demo.url}"/>
<property name="username" value="${jdbc.demo.username}"/>
<property name="password" value="${jdbc.demo.password}"/>
</dataSource>
</environment>
<environment id="dzyzpt">
<!-- 事务管理配置 -->
<transactionManager type="JDBC"/>
<!-- 数据源
type 数据源类型
UNPOOLED 没有连接池,每次请求都会 打开连接,关闭连接,速度慢,适用于 简单的应用
POOLED 含有连接池,每次请求都会在池中找连接
JNDI 使用在DJB 或 应用服务器中,容器可以集中 或在外部配置数据源
通过实现接口 的类型
-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.dzyzpt.driver}"/>
<property name="url" value="${jdbc.dzyzpt.url}"/>
<property name="username" value="${jdbc.dzyzpt.username}"/>
<property name="password" value="${jdbc.dzyzpt.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 使用相对于类路径的资源引用 -->
<mapper resource="roleMapper.xml"/>
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<!--<package name="org.mybatis.builder"/>-->
<!-- 使用完全限定资源定位符(URL) -->
<!--<mapper url="file:///var/mappers/AuthorMapper.xml"/>-->
<!-- 使用映射器接口实现类的完全限定类名 -->
<!--<mapper class="org.mybatis.builder.AuthorMapper"/>-->
</mappers>
</configuration>
jdbc_config.properties
jdbc.demo.driver=com.mysql.jdbc.Driver
jdbc.demo.url=jdbc:mysql://127.0.0.1:3306/shiro_demo?useUnicode=true&characterEncoding=utf8
jdbc.demo.username=root
jdbc.demo.password=ceba
jdbc.dzyzpt.driver=com.mysql.jdbc.Driver
jdbc.dzyzpt.url=jdbc:mysql://127.0.0.1:3306/dzyzpt?useUnicode=true&characterEncoding=utf8
jdbc.dzyzpt.username=root
jdbc.dzyzpt.password=ceba
roleMapper.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.ceba.mybatis.demo.dao.RoleDao">
<select id="selectRole" resultType="RoleDto">
select * from u_role
</select>
<!--
<cache />
myBatis 缓存的使用
select 语句 会查询缓存
insert,delete,update 操作过后 会更新缓存
具体参考 http://www.mybatis.org/mybatis-3/zh/sqlmap-xml.html
-->
<!--myBatis 自定义缓存
1.自定义的缓存必须实现 Cache 接口
2.编写缓存类
<cache type="com.domain.something.MyCustomCache">
<property name="cacheFile" value="/tmp/my-custom-cache.tmp"/>
</cache>
-->
</mapper>
logback.xml
<configuration debug="false" xmlns="http://ch.qos.logback/xml/ns/logback"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://ch.qos.logback/xml/ns/logback
https://raw.githubusercontent.com/enricopulatzo/logback-XSD/master/src/main/xsd/logback.xsd">
<!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>[%-5level] %d{HH:mm:ss.SSS} [%thread] %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!--mybatis 日志-->
<logger name="com.ceba.mybatis.demo.dao" level="TRACE"></logger>
<!-- 日志级别 -->
<root level="INFO">
<appender-ref ref="console"></appender-ref>
</root>
</configuration>
项目结构
logback.xsd 是 logback xml 的语法约束文档,书写时 有提示作用 下载
mybatis 的语法 官方文档
4 mybatis 的日志
mybatis 内置了日志工厂,可以使用不同的 日志框架 SLF4J,LOG4J,LOGGIN
-
在配置中选择一种 日志 框架
<setting name="logImpl" value="SLF4J"/>
-
为 sql映射接口 加上 日志记录器
<logger name="com.ceba.mybatis.demo.dao" level="TRACE"></logger>
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190215171707122.?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI4NDAwMjU3,size_16,color_FFFFFF,t_70)