文章目录
Mybatis入门
1. Mybatis简介
1.1 什么是Mybatis
MyBatis 是一款优秀的持久层框架
它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
1.2 持久化
持久化是将程序数据在持久状态和瞬时状态间转化的机制
将数据保存到可永久保存的存储设备中(如磁盘)
主要为将内存中的对象存储到数据库中,或则在磁盘文件中,xml数据文件中
持久化的必要性:内存断电即失
1.3 持久层
完成持久化工作的代码块
dao层
DAO(Data Access Object) 数据访问对象
1.4 为什么需要Mybatis
- Mybatis用于将数据存入数据库以及从数据库中取出数据
- 传统的jdbc操作有很多重复的代码块,例如数据取出后的封装,数据库连接点的建立,这些都可以通过Mybatis简化,减少重复代码,提升开发效率
- Mybatis是一个半自动化的ORM框架
- ORM(Object Relationship Mapping) 对象映射关系
- Mybatis的优点:
- 简单易学:本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件就可以了,易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。
- 灵活:mybatis不会对应用程序或者数据库的现有设计强加任何影响。sql写在xml里,便于统一管理和优化。通过sql语句可以满足操作数据库的所有需求。
- 解除sql与程序代码的耦合:通过提供DAO层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
- 提供xml标签,支持编写动态sql。
2. 第一个Mybatis程序
2.1 搭建实验数据库
CREATE DATABASE mybatis;
USE mybatis;
DROP TABLE IF EXISTS user;
CREATE TABLE user(
id int(20) NOT NULL PRIMARY KEY ,
name varchar(30) DEFAULT NULL,
password varchar(30) DEFAULT NULL
)ENGINE=innoDB DEFAULT CHARSET =UTF8;
INSERT INTO user VALUES (1,'刘淳','lc20000925'),(2,'陈亚金','bbmmlcwanm1');
2.2 导入Mybatis相关jar包
< dependencies>
< !--mysql驱动-->
< dependency>
< groupId>mysql< /groupId>
< artifactId>mysql-connector-java< /artifactId>
< version>8.0.26< /version>
< /dependency>
< !--mybatis-->
< dependency>
< groupId>org.mybatis< /groupId>
< artifactId>mybatis< /artifactId>
< version>3.5.7< /version>
< /dependency>
< !--junit-->
< dependency>
< groupId>junit< /groupId>
< artifactId>junit< /artifactId>
< version>4.13.2< /version>
< scope>test< /scope>
< /dependency>
< /dependencies>
2.3 编写Mybatis核心配置文件
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">
< configuration>
< environments default="development">
< environment id="development">
< transactionManager type="JDBC"/>
< dataSource type="POOLED">
< property name="driver" value="com.mysql.cj.jdbc.Driver"/>
< property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
< property name="username" value="root"/>
< property name="password" value="root"/>
< /dataSource>
< /environment>
< /environments>
< /configuration>
2.4 编写Mybatis工具类
/**
* Mybatis工具类
* @author 刘淳
*/
public class MybatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用Mybatis第一步: 获取SqlSessionFactory对象
String resource="mybatis-config.xml"; //配置文件路径
InputStream inputStream= Resources.getResourceAsStream(resource); //读取配置文件到输入流
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //使用配置文件创建工厂对象
} catch (IOException e) {
e.printStackTrace();
}
}
//使用Mybatis第二部: 获取SqlSession对象
//SqlSession:完全包含面向数据库执行sql命令的所有方法
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
2.5 编写实体类
User.java
/**
* user表实体类
* @author 刘淳
*/
public class User {
private int id;
private String name;
private String password;
public User() {
}
public User(int id, String name, String password) {
this.id = id;
this.name = name;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", password='" + password + '\'' +
'}';
}
}
2.6 编写Mapper接口
/**
* User实体类Mapper接口
* @author 刘淳
*/
public interface UserMapper {
List< User> selectUser();
}
2.7 编写Mapper.xml配置文件
< ?xml version="1.0" encoding="UTF-8" ?>
< !DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
< !--namespace=Mapper接口类全限定名-->
< mapper namespace="ltd.lccyj.mapper.UserMapper">
< !--id=Mapper接口中对应的方法名-->
< select id="selectUser" resultType="ltd.lccyj.domain.User">
select * from user
< /select>
< /mapper>
2.8 在mybatis-config.xml中注册mapper
< mappers>
< mapper resource="mapper/UserMapper.xml"/>
< /mappers>
2.9 编写测试类
/**
* @author 刘淳
*/
public class UserMapperTest {
@Test
public void selectUser(){
//获取SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//获取mapper对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//执行方法
List< User> users = mapper.selectUser();
System.out.println(users);
}
}