1、Mybatis简介
1.1 什么是Mybatis
MyBatis 的前身是 Apache 的开源项目 iBatis。MyBatis 几乎可以代替 JDBC,是一个支持普通 SQL 查询,存储过程和高级映射的基于 Java 的优秀持久层框架。
MyBatis 与 JDBC 相比,减少了 50% 以上的代码量。并且满足高并发和高响应的要求,所以它成为最流行的 Java 互联网持久框架。
1.2 持久化的概念
数据持久化
- 持久化就是将程序的数据在持久状态和瞬时状态转化的过程。
- 内存: 断电即失
- 数据库(JDBC):io文件持久化。
为什么需要持久化操作: 1. 有一些对象,不能将他丢掉; 2. 内存太贵了
1.3 持久层的概念
完成持久化工作的代码块
层界限是十分明显的
1.4 为什么需要Mybatis?
- 传统的JDBC代码过于复杂,为了简化、自动化编程,使用Mybatis。
- 优点:
- 简单易学、灵活。
- sql和代码的分离,提高了可维护性。
- 提供映射标签,支持对象与数据库的orm字段关系映射。
- 提供对象关系映射标签,支持对象关系组件维护。
- 提供xml标签,支持编写动态sql。
2、第一个Mybatis程序
思路:搭建环境 --> 导入Mybatis --> 编写代码 --> 测试!
2.1 搭建环境
搭建数据库
CREATE DATABASE `mybatis`;
USE `mybatis`;
CREATE TABLE `user`(
`id` INT(20) NOT NULL,
`name` VARCHAR(30) DEFAULT NULL,
`pwd` VARCHAR(30) DEFAULT NULL,
PRIMARY KEY (`id`)
)ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO `user`(`id`,`name`,`pwd`) VALUES
(1,'Demut','123456'),
(2,'Jever','123456'),
(3,'JDWit','123456');
新建项目:
-
新建一个普通的maven项目
-
删除src目录
-
导入maven依赖
<!--导入依赖--> <dependencies> <!--mysql驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> </dependencies>
2.2 创建一个模块
-
编写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核心配置文件--> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=CST"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> </configuration>
-
编写Mybatis的工具类
package com.demut.utils; 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; //sqlSessionFactory --> sqlSession 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(); } } // 既然有了SQLSessionFactory,顾名思义,我们可以从中获得SqlSession的实例 // SqlSession完全包含了面向数据库执行SQL命令的所有方法。 public static SqlSession getSqlSession() { return sqlSessionFactory.openSession(); } }
2.3 编写代码
-
实体类
package com.demut.pojo; //实体类 public class User { private int id; private String name; private String pwd; public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public int getId() { return id; } public String getName() { return name; } public String getPwd() { return pwd; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } public void setPwd(String pwd) { this.pwd = pwd; } }
-
Dao接口
public interface UserDao { List<User> getUserList(); }
-
接口实现类(由原来的Impl转换为一个Mapper配置文件)
<?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 = 绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.demut.dao.UserDao"> <!--select查询语句--> <select id="getUserList" resultType="com.demut.pojo.User"> select * from mybatis.user </select> </mapper>
同时我们需要解决资源无法导出问题,在pom文件中配置以下语句:
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>**/*.properties</exclude>
<exclude>**/*.xml</exclude>
</excludes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
2.4 测试
在test中创建com.demut.dao路径,并创建实体类:UserDaoTest
package com.demut.dao;
import com.demut.pojo.User;
import com.demut.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserDaoTest {
@Test
public void test() {
//第一步,获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
//方式一: getMapper
// UserDao userDao = sqlSession.getMapper(UserDao.class);
// List<User> userList = userDao.getUserList();
//方式二:
List<User> userList = sqlSession.selectList("com.demut.dao.UserDao.getUserList");
for (User user : userList) {
System.out.println(user.getId()+", "+user.getName()+", "+user.getPwd());
}
//关闭SqlSession
sqlSession.close();
}
}
测试结果:
写在最后
喜欢就该珍惜,珍惜就别放弃!