官方文档 http://www.mybatis.org/mybatis-3/zh/index.html
先来熟悉其中的配置
我们先需要 mysql 数据库 Oracle 数据库 navicat 工具
navicat 下载地址 http://www.cncrk.com/downinfo/8714.html
破解地址 https://blog.youkuaiyun.com/qq_21205435/article/details/78902052
Oracle 下载安装地址 http://www.ddooo.com/softdown/60921.htm
数据库 表
CREATE TABLE "TEST"."TBL_EMPLOYEE"
( "ID" NUMBER(*,0),
"LAST_NAME" VARCHAR2(225),
"GENDER" NUMBER(*,0),
"EAMIL" VARCHAR2(225)
)
工程目录
pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>mybatis-0531</groupId>
<artifactId>mybatis-0531</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<spring.version>4.3.3.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.24</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<!--使用范围 -->
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.oracle/ojdbc6 -->
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.3</version>
</dependency>
</dependencies>
</project>
Employee类
package com.prosay.entity;
import org.apache.ibatis.type.Alias;
@Alias("employee")
public class Employee {
private Integer id;
private String lastName; //和数据库的字段不一样 mybatis-config.xml 中的setting属性
private Integer gender;
private String eamil;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getlastName() {
return lastName;
}
public void setlastName(String lastName) {
this.lastName = lastName;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
public String getEamil() {
return eamil;
}
public void setEamil(String eamil) {
this.eamil = eamil;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", gender="
+ gender + ", eamil=" + eamil + "]";
}
}
EmployeeMapper
package com.prosay.mapper;
import java.util.Hashtable;
import com.prosay.entity.Employee;
public interface EmployeeMapper {
public Employee getEmployeeById(Integer id);
}
EmployeeMappeAnnotation
package com.prosay.mapper;
import org.apache.ibatis.annotations.Select;
import com.prosay.entity.Employee;
public interface EmployeeMapperAnnotation {
@Select("select * from tbl_employee where id = #{id}")
public Employee getEmployeeById(Integer id);
}
下面是我们的配置文件 DTD 文件约束
EmployeeMapper.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.prosay.mapper.EmployeeMapper">
<!--
namespace:空间命名
id: 唯一标识
parameterType: 返回值类型
#{id} 从传过来的参数中取出我们的id的值
-->
<!-- 当数据库和名字不一样的时候使用 -->
<!-- public Employee getEmployeeById(Integer id);
id一样绑定方法
-->
<!-- employee 别名 建议使用包名 -->
<select id="getEmployeeById" resultType="employee" databaseId="oracle">
<!-- 指定数据库 databaseId="mysql" -->
select * from tbl_employee where id = #{id}
</select>
</mapper>
log4j配置
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="DEBUG">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
mybaitis-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>
<!--
1.mybatis可以使用propertise来引入外部properties配置文件的内容
2.resource 引入类路劲下的配置文件
3.url 系统路劲下的配置文件
-->
<!-- 磁盘路劲 file:///D:\mybatisConfig.properties -->
<properties resource="mybatisConfig.properties"></properties>
<!-- 配置属性 多了空个不行 -->
<settings>
<!-- 配置骆驼命名法 name = 名字 value = 值 -->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--
别名处理器
-->
<typeAliases>
<!-- 单个别名处理器 type 指定的全类名;
默认别名就是小写 employee
alias 别名
-->
<!-- 麻烦 <typeAlias alias="employee" type="com.prosay.entity.Employee"/> -->
<!-- 批量起别名 制定包 为当前包和以后的所有包起别名 -->
<package name="com.prosay.entity"/>
<!-- 注意当子包也有相同类名的时候会发生错误,是用我们的@Alias("")注解,解决问题,不区分大小写 -->
</typeAliases>
<!--
environments 环境配置 default 来切换环境属性
1.environment:一个具体的环境信息 id == 当前环境的的唯一标识
其中必须有 transactionManager 后面使用我们的spring来控制我们的事务
type:事务管理器的类型;JDBC|MANAGED
dataSource: 数据源
type=”[UNPOOLED| 这个数据源的实现只是每次被请求时打开和关闭连接 不使用连接池
JndiDataSourceFactory
POOLED| 连接池技术
PooledDataSourceFactory
JNDI| EJB 或应用服务器这类容器
UnpooledDataSourceFactory
自定义的数据源:实现我们的dataSourceFactory type 全类名
-->
<environments default="dev_oracle">
<environment id="">
<transactionManager type=""></transactionManager>
<dataSource type=""></dataSource>
</environment>
<environment id="dev_mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/> -->
</dataSource>
</environment>
<environment id="dev_oracle">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${orcl.driver}"/>
<property name="url" value="${orcl.url}"/>
<property name="username" value="${orcl.username}"/>
<property name="password" value="${orcl.password}"/>
</dataSource>
</environment>
</environments>
<!-- 支持多数据库 厂商
type="DB_VENDOR" VendorDatabaseIdProvider
得到数据库厂商标识
-->
<databaseIdProvider type="DB_VENDOR">
<!-- 为不同的数据库厂商起别名 -->
<property name="Mysql" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<!-- 将我们写好的sql映射文件(EmployeeMapper.xml)
注册到全局配置文件(mybatis-config.xml)
-->
<mappers>
<!-- 包名使用 -->
<!-- mapper:注册一个sql映射
resource:类路劲下的资源
EmployeeMapper.xml
url: 网络和磁盘
file:///var/mappers/PostMapper.xml
class:直接使用接口
配置文件名和接口名同名
1.有sql映射文件,映射名必须和接口名同名,并且在同一目录下
<mapper class="com.prosay.mapper.EmployeeMapper"/>
<mapper resource="com/prosay/mapper/EmployeeMapper"/>
2.没有sql映射文件,所有的sql都是利用注解写在接口上
<mapper class="com.prosay.mapper.EmployeeMapperAnnotation"/>
-->
<mapper resource="EmployeeMapper.xml"/>
<mapper class="com.prosay.mapper.EmployeeMapperAnnotation"/>
<!-- 批量注册 xml配置方式 路劲名必须一样 -->
<!-- <package name="com.prosay.mapper"/> -->
</mappers>
</configuration>
mybatisConfig.properties
jdbc.driver = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://localhost:3306/mybatis
jdbc.username = root
jdbc.password = root
orcl.driver = oracle.jdbc.OracleDriver
orcl.url = jdbc:oracle:thin:127.0.0.1:1521:test
orcl.username = test
orcl.password = test
总结:
基本上的标签都是用了一遍,ObjectFanctory对象工厂,和plugins等到以后写,
注意的几点:
1.在我们的mybaitis-config.xml 中的配顺序不能错,
2.使用mapper映射时候的注意事项 包路径
3.Mapper.xml使用的ResultType注意事项 扫描包路径时类名重名