环境:
mysql 8.xx, maven, eclipse
案例打包地址(直接下载就行):
https://download.csdn.net/download/weixin_42490383/12538509
- 创建maven项目
创建 src/main/resources 目录
- pom.xml 中添加依赖
<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>com.bingo</groupId>
<artifactId>mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mybatis</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- mybatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<!-- mysql连接驱动 -->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
- 创建 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">
<!-- mybatis核心配置 -->
<configuration>
<!-- 配置默认连接数据库, 用于数据库切换 -->
<environments default="test">
<environment id="dev">
<!--
Mybatis事务管理有两种方式
1. 使用JDBC事务管理机制,利用java.sql.Connection对象完成事务的提交
2. 使用MANAGED事务管理机制,mybatis不会实现事务管理,交给程序的容器来管理(WebLogic,Tomcat)
-->
<transactionManager type="JDBC"></transactionManager>
<!-- 使用mysql自带连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mysql?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"/>
<property name="username" value="root1"/>
<property name="password" value="root"/>
</dataSource>
</environment>
<environment id="test">
<transactionManager type="MANAGED"></transactionManager>
<dataSource type="POOLED">
<!-- localhost:3306可以省略配置 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mysql?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
- 在src/main/test 包中新建测试类
package com.bingo.mybatis;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
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.Before;
import org.junit.Test;
public class TestBatis {
//通过会话工厂对象(SqlSessionFactory), 打开一个会话,实现与数据库交互
private SqlSessionFactory factory;
//此注解修饰的方法会在 @Test 修饰方法之前执行: 这里是 testBatis()
@Before
public void init() throws IOException {
//java/main/resources是默认资源目录,打包后会放到根目录下: Tomcat/webapps/项目/
//读取配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
factory = builder.build(is);
//系统底层建造者模式构建工厂对象(此对象构建过程相对复杂) : 老师说的,我不懂
System.out.println("工厂对象:"+factory);
}
@Test
public void testBatis() {
//利用工厂对象打开一个会话, 与数据库交互
SqlSession sqlSession = factory.openSession(false);
//会话获取一个连接, 用于操作数据库
Connection connection = sqlSession.getConnection();
System.out.println("数据库连接对象:"+connection);
}
//写案例过程中几个小bug记录一下
//1. init()方法中第三行代码我刚开始自动补全左边导致赋值给了局部变量,成员变量factory为bull
//SqlSessionFactory factory = builder.build(is);
//2. 我本地mysql数据库是8.0.19, pom依赖是5.xx,导致testBatis()方法中 sqlSession.getConnection();获取不到连接
//pom依赖换成对应的版本解决, mybatis-config.xml 中数据源 driver和url都是适用8.xx版本的
//3. testBatis()方法中第二行代码: Connection connection = sqlSession.getConnection();
//Establishing SSL connection without server's identity verification is not recommended...
//在这里报了个错,翻译:不建议在没有服务器身份验证的情况下建立SSL连接
//解决: jdbc:mysql:///数据库名称?useSSL=false, 拼接参数useSSL=false
//4. mybatis-config.xml 中 : url=jdbc:mysql://localhost:3306/(需要连接的数据库名称)? useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
//报错: 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾
//解决: 使用&(XML中表示";")替换
}