Mybatis简化jdbc操作
框架就是一个软件的半成品,许多实现的细节都已经实现。主要的功能就是可以帮助我们减少繁琐重复的操作。
Mybatis就是用来简化JDBC的开发,简化一些繁琐的操作。
之前我们在写jdbc的代码的时候就会需要进行获取连接对象,以及操作代码,自己封装结果集。如果我们的表的结构发生变化,基本很多很多的内容都需要我们去改,这是十分繁琐的事情,特别是当表比较多或者改的东西比较多的时候就显得很头疼。

存在的问题就是硬编码和操作繁琐
注册驱动、获取连接 上图标1的代码有很多字符串,而这些是连接数据库的四个基本信息,以后如果要将Mysql数据库换成其他的关系型 数据库的话,这四个地方都需要修改,如果放在此处就意味着要修改我们的源代码。 SQL语句 上图标2的代码。如果表结构发生变化,SQL语句就要进行更改。这也不方便后期的维护。
操作繁琐 手动设置参数 手动封装结果集 上图标4的代码是对查询到的数据进行封装,而这部分代码是没有什么技术含量,而且特别耗费时间的。
Mybatis就是用来简化一些繁琐的操作的。

说明:图片来自黑马ppt,和上诉部分说明来自黑马(真的很细致)。
可能刚开始还没有深刻认识,因为使用的不是很频繁,也没有做过太大的项目。后面多用用就可以了。还有就是框架的配置可能看起来比较麻烦,但是这样的框架对于后续的维护是非常方便的。
使用Mybatis框架
首先我们创建一个表
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', '男', '西安');
然后我们要使用Mybatis框架,我们就在Maven核心配置文件里面进行导入。因为我们我们需要用到数据库,肯定需要导入驱动。如果需要单元测试那么需要junit,如果需要日志的话,就需要logback。
这些可以详细了解,然后之后用到的时候就去用好了,比较简单。
在pom.xml文件里面需要包含以下。其他的默认。
<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.6</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><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>
然后注意logback也需要在resource下面进行一下配置。
一定要注意结构层次。
内容
<?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="jgdabc" 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>
关于logback以及junit我们后面说明。
然后我们需要一个Mybatis的核心配置文件
关键信息
<!--environments:配置数据库连接环境信息。可以配置多个environment,通过default属性切换不同的environment--><environments default="development"><environment id="development"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--注意数据库驱动格式,并不是统一的,还有就是数据库url规范,系统的时区和数据库的时区不一样也会报错,这些这里可以处理一下--><!--数据库连接信息--><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis?serverTimezone=GMT"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment><environment id="test"><transactionManager type="JDBC"/><dataSource type="POOLED"><!--数据库连接信息--><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis?serverTimezone=GMT"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><mapper resource="UserMapper.xml"/><!-- 这个是映射--></mappers>
关于映射文件,需要我们创建一个,然后在和Mybatis文件中指定路径。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace:名称空间--><!----><mapper namespace="test"><!--resultType作为返回的类型,返回一个User类--><select id="selectAll" resultType="jgdabc.User">select *from tb_user;</select><select id="selectById" resultType="jgdabc.User">-- select *-- from tb_user where id = #{id};</select></mapper>
可以看到映射文件主要是封装了相关的sql操作语句。返回一个类型。返回的类型我们可以去创建相应的类型类。
package jgdabc;public class User {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;}@Overridepublic String toString() {return "User{" +"id=" + id +", username='" + username + '\'' +", password='" + password + '\'' +", gender='" + gender + '\'' +", addr='" + addr + '\'' +'}';}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;}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}private String addr;}
这个User在测试类可以作为泛型
现在我们来看测试类
package jgdabc_;import jgdabc.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;public class MybatisDemo {public static void main(String[] args) throws IOException {// 加载mybatis的核心配置文件//1. 加载mybatis的核心配置文件,获取 SqlSessionFactoryString resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);//2. 获取SqlSession对象,用它来执行sqlSqlSession sqlSession = sqlSessionFactory.openSession();//3. 执行sqlList<User> users = sqlSession.selectList("test.selectAll");System.out.println(users);//4. 释放资源sqlSession.close();}}
这些框架性的东西并不需要死记硬背,多用用就记住了。
我们运行一下。

自此,我们对这个Mybatis框架的第一遍尝试操作就到此。
