Mybatis需要配置的文件
1 pom.xml中需要进行如下配置
<!-- mybatis begin -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- mybatis end -->
<!-- mysql begin -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
<!-- mysql end -->
<!-- log4j begin -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- log4j end -->
2 构建 mybatis-config.xml 文件,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>
<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.xml,是3中需要增加的文件-->
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
基础的mybatis-config.xml 文件构建。
3 构建 EdocEntryMapper.xml 文件(此文件和mybatis-config.xml中配置的要一致),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">
<!--
SQL映射文件:
namespace:名称空间(简单的理解为前缀)
1,不面向接口开发,可以随便定义
2,面试接口开发,不可以随便定义,必须是某个接口的全类名
-->
<!--<mapper namespace="wusuowei">-->
<mapper namespace="com.kgc.mybatis.mapper.EdocEntryMapper">
<!--
select标签:定义要执行的查询语句-查询语句只能写在该标签内
id:当前SQL语句的唯一标识,要跟接口中的某个方法对象,同一个SQL映射文件中,不可以出现重复的id值
resultType:查询结果需要映射的目标实体类
#{}:根据参数名获取参数,如果只有一个参数,参数名可以随便定义
-->
<select id="selectEdocEntryById" resultType="com.kgc.mybatis.beans.EdocEntry">
select * from edoc_entry where id = #{abc}
</select>
</mapper>
4 构建与 EdocEntryMapper.xml 对应的接口 EdocEntryMapper
package com.kgc.mybatis.mapper;
import com.kgc.mybatis.beans.EdocEntry;
public interface EdocEntryMapper {
// 此方法名要与Mapper.xml中的id映射一致
EdocEntry selectEdocEntryById(Integer id);
}
5 构建 jdbc.propweties 文件,jdbc配置属性文件(mysql-connector-java 6 以后的特性,多了一个时区serverTimezone)
driverClass=com.mysql.cj.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/edocdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8
user=root
password=root
6 不使用spring构建mybatis时,加载mybatis
package com.kgc.mybatis;
import com.kgc.mybatis.beans.EdocEntry;
import com.kgc.mybatis.mapper.EdocEntryMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
public class TestMybatis {
@Test
public void testSqlSessionFactory() throws IOException {
// 构建 SqlSessionFactory 对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
System.out.println(sqlSessionFactory);
// 创建SqlSession对象-提供了在数据库执行 SQL 命令所需的所有方法
SqlSession session = sqlSessionFactory.openSession();
System.out.println(session);
// 执行sql语句,查询结果
// statement Unique identifier matching the statement to use. 要执行的SQL语句的唯一标识
// parameter A parameter object to pass to the statement. 执行当前SQL需要传递的参数
// EdocEntry edocEntry = session.selectOne("wusuowei.selectEdocEntry", 2);
// System.out.println(edocEntry);
// 面向接口开发 - getMapper方法:返回的就是当前接口的一个代理实现类(自动根据接口的方法找到对应的sql语句执行)
EdocEntryMapper edocEntryMapper1 = session.getMapper(EdocEntryMapper.class);
EdocEntry edocEntry = edocEntryMapper1.selectEdocEntryById(3);
System.out.println(edocEntry);
}
}
小结:
两个重要的配置文件:
1)mybatis-config.xml: Mybatis全局核心配置文件,数据库连接信息,SQL映射文件的加载等操作
2)EdocEntryMapper.xml: SQL语句的映射文件,包括了数据库增删改查等业务操作语句
两个重要的对象:
1)SqlSessionFactory:SqlSession对象的工厂类,用于获取SqlSession对象
2)SqlSession:Java程序和数据库连接会话对象,包含执行SQL命令的所有方法
两个重要的绑定-面向接口开发:
1)mapper接口与SQL映射文件绑定
mapper接口与mapper.xml中mapper标签中的spacename属性值一致,是mapper接口的全类名
2)mapper接口中方法与SQL映射文件中的语句绑定
mapper接口中的方法名与mapper.xml中的mapper标签字标签中id属性值一致,都是方法名
补充:
如果需要显示查询的SQL语句,需要加入log4j.xml。(强有力的日志增强包)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>
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>
<!-- 1 配置properties标签中的resources属性,配置完成后将高于内部的属性配置 -->
<!--<properties resource="jdbc.properties">
下面是properties
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/edocdb?useUnicode=true&characterEncoding=utf-8&useSSL=false"/>
<property name="user" value="root"/>
<property name="password" value="123"/>
</properties>-->
<properties resource="jdbc.properties"/>
<!-- 2 核心配置settings,mybatis官网中有详细说明-->
<!-- https://mybatis.org/mybatis-3/zh/getting-started.html -->
<settings>
<!-- 是否开启下划线到驼峰命名法的自动映射,默认是关闭的,值为false -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!-- 3 别名处理typeAliases -->
<typeAliases>
<!-- 单个别名处理,设置配对好后,在映射xml中不需要在写全类名 -->
<!-- <typeAlias type="com.kgc.mybatis.beans.EdocEntry" alias="edocEntry"/>-->
<!-- 批量取别名:使用package属性直接指定实体的包名,会将该包下及其子包中所有的类名自动取别名,默认值是类名,不区分大小写;
建议:为了xml文件方便阅读,不要使用批量取别名,尽量使用全类名,因为通过SQL映射之后,无法得知别名类的目标类型-->
<package name="com.kgc.mybatis.beans"/>
</typeAliases>
<!-- 4 环境配置 environments
可以配置多个环境,但是SqlSessionFactory只能指定一种环境类型
通过emviroments的default属性来指定选择哪一种环境
-->
<environments default="development_dev">
<environment id="development_dev">
<!-- 事务管理,默认用的jdbc的事务管理,后续事务管理可以交给spring处理 -->
<transactionManager type="JDBC"/>
<!-- 数据源配置,默认使用的是mybatis自带的数据源,后续数据源管理可以交给spring处理,比如专业:druid,c3p0,dbcp... -->
<dataSource type="POOLED">
<property name="driver" value="${driverClass}"/>
<property name="url" value="${jdbcUrl}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="development_test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driverClass}"/>
<property name="url" value="${jdbcUrl}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
<environment id="development_prod">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driverClass}"/>
<property name="url" value="${jdbcUrl}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 5 SQL映射文件配置 mappers -->
<mappers>
<!-- 单个SQL映射文件配置,注意多级目录用 / 不是 . -->
<!-- <mapper resource="EdocEntryMapper.xml"/> -->
<!-- 批量加载SQL映射文件 ,指定的是mapper接口所在的父包全路径
注意:此种方式必须保证接口和SQL映射文件同路径,且必须同名,后续可以交个spring,进行自定义映射路径
-->
<package name="com.kgc.mybatis.mapper"/>
</mappers>
</configuration>
Q.E.D.