一、mybatis框架介绍
一个框架,早期叫做ibatis,代码在github
mybatis是MyBatis SQL Mapper Framework for Java (sql映射框架)
sql mapper:sql映射,可以把数据库中的一行数据,映射成一个java对象,操作这个对象就可以操作数据库中的数据。
mybatis提供了哪些功能:
1.提供创建Connection,Statement,ResultSet的功能。
2.提供执行sql语句的能力。
3.提供循环sql,把sql的结果转为java对象,List集合的能力。
4.提供关闭资源的能力,不用你关闭Connection,Statement,ResultSet。
总结:mybatis是一个sql映射框架,提供数据库的操作能力,增强的jdbc。
二、搭建mybatis
第一步:创建mysql数据库和表,创建student学生表,id,name,email,age。
第二步:在IDEA中创建maven项目
第三步:加入maven的pom.xml文件中加入mybatis坐标,mysql驱动坐标
在<dependencies>标签中加入依赖
<!--mybatis坐标依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!--sql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
在pom.xml文件<build>标签中加入以下代码
作用:mybatis默认只把java文件夹里.java文件拷贝到target里,加上以下代码,可以把其他文件一并考到target里
<resources>
<resource>
<directory>src/main/java</directory><!--所在目录-->
<includes><!--包括目录下的.properties,.xml文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
第四步:创建实体类,Student,保存表中的一行数据
创建Student类,生成set和get方法从写toString方法
第五步:创建持久层的dao接口,定义操作数据库的方法
第六步:创建一个mybatis使用的配置文件,sql映射文件,写sql语句的,一般一个表一个sql映射文件
创建StudentDao.xml数据库映射文件
1.在接口所在的目录中创建
2.文件名称和接口名保持一致
第七步:创建mybatis的主配置文件,一个项目就一个主配置文件,配置文件提供数据库的连接信息,和sql映射文件的位置
1.主配置文件在resources资源文件夹里
2.主配置文件主要定义了数据库的配置信息,sql映射文件的位置
<?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>
<!--settings:控制mybatis全局行为-->
<settings>
<!--设置mybatis输出日志-->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<!--环境配置:数据库的连接信息-->
<!--default:必须和某个environment id值一致
告诉mybatis使用哪个数据库的连接信息,也就是访问哪个数据库
-->
<environments default="mydev">
<!-- environments:一个数据库信息的配置,环境
id:一个唯一值,自定义,表示环境的名称
-->
<environment id="mydev">
<!-- transactionManager :mybatis的事务类型
type:JDBC(表示使用jdbc中的Connection对象的commit,rollback做事务处理)
MANAGED(把mybatis的事务处理委托给其他的容器,如(一个服务器软件,一个框架spring))
-->
<transactionManager type="JDBC"/>
<!--dataSource:表示数据源,连接数据库,java体系中,规定实现了javax.sql.DataSource接口的都是数据源
数据源表示Connection对象。
type:表示数据源的类型,
POOLED:表示使用连接池,mybatis会创建PooledDataSource类
UPOOLED:不适用连接池,每次执行sql语句时,先创建连接,执行sql,在关闭连接,
mybatis会创建一个UnPooledDataSource,管理Connection对象的使用。
JNDI:java命名和目录服务器(windows注册表)
-->
<dataSource type="POOLED">
<!--
driver,url,username,password 是固定的,不能修改
-->
<!--driver数据库的驱动类名-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!--连接数据库的url字符串-->
<property name="url"
value="jdbc:mysql://localhost:3306/bjpowernode?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="333"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--一个mapper标签指定一个文件的位置。
从类路径开始的路径信息。 target/clasess
-->
<mapper resource="com\bjpowrenode\dao\StudentDao.xml"/>
</mappers>
</configuration>
<!--
url里:
1.useSSL=false:
MySQL在高版本需要指明是否进行SSL连接
true 需要连接
false 不需要连接
2.serverTimezone=UTC:
在设定时区的时候,如果设定serverTimezone=UTC,会比中国时间早8个小时,
如果在中国,可以选择Asia/Shanghai或者Asia/Hongkong,例如:
url:jdbc:mysql://localhost:3306/mango?serverTimezone=Asia/Shanghai
3.useUnicode=true&characterEncoding=utf-8:
例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:
存数据时:
数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
取数据时:
在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。
4.?与&是什么意思?
'?'符号是在URL后通过get方法传递参数的起始标志,多个参数之间可用'&'符号连接,因为这些字符对于HTML有特殊意义,
所以在Java中要用到转义字符使用它,而&在HTML中就会被转义为'&'符号,用于参数连接。
-->
第八步:创建一个测试程序,查询表中所有的人员信息
注意,2020版本IDEA兼容Maven3.6.3以下版本