一、概述
1、起源
MyBatis本是Apache下的开源项目,名为iBatis,2010年转投谷歌,从iBatis3.x开始更名为MyBatis
2、优点
(1)优秀的数据持久层框架(对jdbc做了轻量级封装)
3、特点
(1)对jdbc中接口进行封装的同时还提供了一些自己的类实现
(2)将数据库连接配置提取到了xml文件
(3)将sql语句提取到了xml文件
(4)可使用注解方式执行sql
(5)可实现对象关系映射orm(将数据库中的记录映射到java对象pojo)
(6)支持动态sql(可在sql中进行逻辑处理)以及数据缓存
二、前期准备
1、创建数据库并创建一个表
2、创建maven项目
3、添加依赖
<!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.2</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.16</version></dependency>
4、创建mybatis配置文件(核心配置文件)
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4"><component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8"><output url="file://$MODULE_DIR$/target/classes" /><output-test url="file://$MODULE_DIR$/target/test-classes" /><content url="file://$MODULE_DIR$"><sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" /><sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" /><sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" /><sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" /><excludeFolder url="file://$MODULE_DIR$/target" /></content><orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" /><orderEntry type="sourceFolder" forTests="false" /><orderEntry type="library" name="Maven: org.mybatis:mybatis:3.4.2" level="project" /><orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.16" level="project" /><orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.6.1" level="project" /></component>
</module>
5、创建一个访问接口和一个类
public interface AdminDao {Admin findAdminById(int id);
}
public class Admin {private int id;private String account;private String password;private String gender;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}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;}@Overridepublic String toString() {return "Admin{" +"id=" + id +", account='" + account + '\'' +", password='" + password + '\'' +", gender='" + gender + '\'' +'}';}
}
6、创建一个映射文件
<?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="com.ffyc.mybatispro.dao.AdminDao"><select id="findAdminById" parameterType="int" resultType="com.ffyc.mybatispro.model.Admin">select * from admin where id = #{id}</select>
</mapper>
三、测试mybatis的功能-从数据库查询中获取一个封装好查询结果的对象
public static void main(String[] args) throws IOException {// 1、读取mybatis核心配置文件InputStream inputStream= Resources.getResourceAsStream("mybatis.xml");// 2、创建SqlSessionFactory,用来创建SqlSessionSqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);// 3、创建SqlSession对象,负责每一次与数据库会话SqlSession sqlSession = sqlSessionFactory.openSession();// 4、创建访问接口的代理对象// 通过命名空间直接调用配置文件中的sql//Admin admin = sqlSession.selectOne("aaa.findAdminById", 1);AdminDao adminDao = sqlSession.getMapper(AdminDao.class);// 5、通过代理对象访问接口中的方法,最终由代理对象去调用sql映射文件中与方法名相同的id对应的sqlAdmin admin = adminDao.findAdminById(1);System.out.println(admin);// 6、关闭本次会话sqlSession.close();}
四、总结
使用mybatis与数据库进行会话核心有4个类加5个步骤
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;InputStream inputStream= Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory =new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
AdminDao adminDao = sqlSession.getMapper(AdminDao.class);
sqlSession.close();