MyBatis (又称SQL 映射框架)
是一款优秀的持久性框架,用于简化 JDBC开发
JDBC 缺点
1.硬编码
注册驱动
SQL 语句
2.操作繁琐
手动设置参数
手动封装结果集
MyBatis 快速入门
(以案例 通过查询user 表中的所有数据为例)
1.创建 user,添加数据
(下面 表格通过 DataGrip 创建 具体详细步骤可参考以下博客 )
create database mybatis;
use mybatis;
drop table if exists tb_user;
create table tb_user(
id int primary key auto_increment,
username varchar (20),password varchar (20),
gender char (1),
addr varchar (30)
);
INSERT INTO tb_user
VALUES (1, 'zhangsan', '123', '男', '北京');
INSERT INTO tb_user
VALUES (2, '李四', '234', '女', '天津');
INSERT INTO tb_user
VALUES (3, '王五', '11', '男', '西安');
2. 创建模块,导入坐标
①创建模块
.file----new ----project----Maven----next--(自己起的名字) ----OK 创建成功
②导入坐标
// 因为是使用Maven来构建的项目,需要将 在MyBatis 官网中找到的依赖 放到 pom.xml 中创建的
//<dependcies></dependcies> 标签中
// 在创建的模块中的 pom.xml 中导入坐标
<?xml version="1.0" encoding="UTF-8"?>
<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>org.example</groupId>
<artifactId>MyBatis-two</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- MyBatis 的依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version> 8.0.30</version>
</dependency>
<!--junit单元测试坐标-->
<dependency>
<groupId>junit </groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--添加slf4j日志api-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.20</version>
</dependency>
<!--添加logback-classic依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<!--添加logback-core依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
</project>
下面需要导入一个日志配置文件:
// 将logback.xml 复制到 main 下面的 resources 中
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--
CONSOLE :表示当前的日志信息是可以输出到控制台的。
-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%level] %cyan([%thread]) %boldGreen(%logger{15}) - %msg %n</pattern>
</encoder>
</appender>
<logger name="com.MyBatis" level="DEBUG" additivity="false">
<appender-ref ref="Console"/>
</logger>
<!--
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF
, 默认debug
<root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。
-->
<root level="DEBUG">
<appender-ref ref="Console"/>
</root>
</configuration>
// 这里的代码来源:B站 黑马程序员
3.编写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>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- 数据库 连接信息-->
<!-- <property name="driver" value="com.mysql.jdbc.Driver"/>-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!-- value="jdbc:mysql:///mybatis?useSSL=false" 连接的url 信息 -->
<property name="url" value="jdbc:mysql:///mybatis?useSSL=false"/>
<!-- 用户名 和密码-->
<property name="username" value="root"/>
<property name="password" value="****"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 指定 当前的 SQL 映射文件的路径的 加载 SQL 映射文件-->
<!-- 里面的地址 根据自己文件的路径设置即可->
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
</configuration>
// 这里的代码 参考 https://mybatis.org/mybatis-3/zh/getting-started.html MyBatis 官网
// 上面的代码有一些需要注意的点:
<--数据库连接信息 这里的Value 值需要改变 可以参考我上面的代码-->
<--同时需要注意: <property name="driver" value="com.mysql.jdbc.Driver"/>这里面的value值版本较老需要更改为
<property name="driver" value="com.mysql.cj.jdbc.Driver"/> -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
4.编写SQL映射文件——(统一管理sql语句,解决硬编码的问题)
// ( 参考) https://mybatis.org/mybatis-3/zh/getting-started.html
//探究已映射的 SQL 语句
<!--
namespace: 名称空间
<mapper namespace="org.mybatis.example.BlogMapper">
<mapper namespace="test">
将名称空间的名字改为 test
名称空间 下面的: select 是用来定义查询语句的
resultType :返回结果的类型
id: SQL 语句的唯一标识
-->
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
<select id="selectBlog" resultType="Blog">
select * from Blog where id = #{id}
</select>
</mapper>
// 里面的一些内容是可以进行修改的
5.编码
// 这里用到了 pojo 类: 主要用来指代那些没有遵循特定的java对象模型,约定或者框架的对象
// MyBatis 中pojo “只是为了封装数据”
// 当sql语句查询到数据之后,如果你要封装到对应的POJO中,一定要保证字段和POJO中的变量名一样,如果不一样,无法封装,这个时候只能使用起别名或修改变量名的方式解决问题.
// 1.根据自己之前创建好的表填写对应的属性
package com.MyBatis.pojo;
public class user {
// alt + 鼠标左键 整列编辑
private Integer id;
private String username;
private String password;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "user{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", gender='" + gender + '\'' +
'}';
}
};
上面的快速生成 get, set , toString 方法 用到了
alt+ ins ——————(在Generate中选择对应的方法)
最后写MyBatis 核心测试类
package com.MyBatis;
import com.MyBatis.pojo.user;
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 java.io.IOException;
import java.io.InputStream;
import java.util.List;
//定义 MyBatis 快速入门代码
public class MyBatisDemo {
public static void main(String[] args) throws IOException {
// 1.加载 mybatis 的核心配置文件,获取 sqlSessionFactory 对象
// 第一行 定义 配置文件的路径
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2.获取 sqlSessionFactory 对象,用它来执行SQL
SqlSession sqlSession = sqlSessionFactory.openSession();
// sqlSession sqlSession = sqlSessionFactory.openSession();
// 3.执行SQL语句
List<user> users = sqlSession.selectList("test.selectAll");
System.out.println(users);
//4.释放资源
sqlSession.close();
}
}
//当因为缺少包出现错误的时候 可以按 alt+ enter 导入需要的包即可
(MyBatis 官网地址)