一、Mybatis入门介绍及案例
1、Mybaits简介
1.1、什么是Mybatis
-
MyBatis 是一款优秀的持久层框架。
-
它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
-
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
-
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。
1.2、什么是持久化?
字面理解就是将非持久化的数据也就是短暂的数据变为固定的数据,该数据不会因断电等物理状态而缺失。主要就是将内存中的对象保存到存储设备(硬盘)之中。
1.3、什么是持久层?
为持久化服务,即为完成持久化而存在的“层”。—即 Data Access Object DAO 数据访问对象。
一般存在于企业应用中,将一些企业数据持久化至数据库中。
1.4、什么是ORM?
Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念对应起来。举例来说就是,我定义一个对象,那就对应着一张表,这个对象的实例,就对应着表中的一条记录。
1.5、Mybatis的优点
- 是一个半自动的ORM框架,不会对应用程序或者数据库现有设计强加影响,且sql写在xml中,更加便于管理
- 将sql语句与程序解耦,通过DAO层,将业务逻辑与数据访问分离。让系统更清晰,便于维护。
2、mybaits的入门案例
学习Mybatis入门代码之前,我建议大家先去看一下官网的中文文档,有着非常详细的入门介绍。网址如下:https://mybatis.org/mybatis-3/zh/getting-started.html。
当然在此之前,你要配置好java、maven的环境
此外,我也写了详细的注释和代码,如下
-
写好测试sql表
SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `user_name` varchar(40) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `password` varchar(40) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL, `id` int(10) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES ('admin', 'admin123', 1); INSERT INTO `user` VALUES ('admin2', 'admin1234', 2); INSERT INTO `user` VALUES ('admin3', 'admin12345', 3); SET FOREIGN_KEY_CHECKS = 1;
-
创建maven项目,在 pom.xml 文件中添加 Mybatis、mysql、junit,如下:
<dependencies> <!--mybatis依赖--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.2</version> </dependency> <!--mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <!--测试依赖--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> </dependency> </dependencies>
-
编写Mybatis核心配置文件 mybatis-config
直接将官网的复制下来即可配置文件复制下来
<?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> <!--此处为配置环境部分,你可以在下方配置多个环境,然后default选择你需要的环境--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <!--此处需要输入你的数据库信息,后期一般用配置文件加载--> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <!--mappers映射,该处指定mapper文件位置,不写将会报错--> <mapper resource="org/mybatis/example/BlogMapper.xml"/> </mappers> </configuration>
-
编写mybatis工具类 MybatisUtils
package com.chen.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; public class MybatisUtils { private static SqlSessionFactory sqlSessionFactory; static { try {String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); /*创建sql工厂*/ sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } catch (IOException e) { e.printStackTrace(); } } //获取SqlSession连接 public static SqlSession getSession(){ return sqlSessionFactory.openSession(); } }
-
创建实体类 User
package com.chen.domain; public class User { private int id; private String name; private String password; public User(int id, String name, String password) { this.id = id; this.name = name; this.password = password; } public User(){}; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", 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; } }
-
编写Mapper接口 UserMapper
import java.util.List; public interface UserMapper { /*此处的方法名要与UserMapper中的id对应*/ public List<User> findAll(); }
-
编写Mapper配置文件 Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!--此处的命名空间为接口UserMapper.java文件--> <mapper namespace="com.chen.mapper.UserMapper"> <select id="findAll" resultType="com.chen.domain.User"> select * from user </select> </mapper>
-
编写测试类
public class UserTest {
@Test
public void Test(){
SqlSession session = MybatisUtils.getSession();
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.findAll();
for (User user: users){
System.out.println(user);
}
session.close();
}
}