mybatis通过会话工厂获取数据库连接

环境:
mysql 8.xx, maven, eclipse

案例打包地址(直接下载就行):
https://download.csdn.net/download/weixin_42490383/12538509

  1. 创建maven项目
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    创建 src/main/resources 目录
    在这里插入图片描述
    在这里插入图片描述
  2. 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>

  1. 创建 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&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;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&amp;characterEncoding=utf8&amp;serverTimezone=GMT%2B8&amp;useSSL=false"/>
		        <property name="username" value="root"/>
		        <property name="password" value="root"/>		
			</dataSource>
		</environment>
	
	</environments>

</configuration>
  1. 在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" 的引用必须以 ';' 分隔符结尾
	//解决: 使用&amp;(XML中表示";")替换
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值