1、Mybatis介绍
mybatis 是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc 进行了封装,屏蔽了jdbc api 底层访问细节,使我们不用与jdbc api 打交道,就可以完成对数据库的持久化操作。
2、使用Mybatis步骤
(1)、建项目
(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.4.6</version>
</dependency>
</dependencies>
(3)、创建表
/*
Navicat Premium Data Transfer
Source Server : zyd
Source Server Type : MySQL
Source Server Version : 80026
Source Host : 127.0.0.1:3306
Source Schema : b0374
Target Server Type : MySQL
Target Server Version : 80026
File Encoding : 65001
Date: 06/09/2022 10:01:10
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(19) CHARACTER SET utf8 COLLATE utf8_croatian_ci NOT NULL,
`pass` varchar(20) CHARACTER SET utf8 COLLATE utf8_croatian_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_croatian_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '吕布', '123');
INSERT INTO `user` VALUES (2, '貂蝉', '456');
SET FOREIGN_KEY_CHECKS = 1;
(4)、建一个实体类
package com.buka.po;
public class User {
private int id;
private String name;
private String pass;
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 getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pass='" + pass + '\'' +
'}';
}
}
(5)、配置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>
<environments default="dev">
<environment id="dev">
<transactionManager type="JDBC"></transactionManager> <!-- 事务管理器-->
<dataSource type="POOLED"><!-- 连接池技术-->
<property name="url" value="jdbc:mysql://127.0.0.1:3306/b0374"/>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 关联映射文件-->
<mappers>
<mapper resource="mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
(6)、sql语句配置文件(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">
<mapper namespace="userMapper">
<select id="selAll" > -- sql语句的名字
select * from user
</select>
</mapper>
(7)、测试Mybatis是否可用
@Test
public void test1() throws IOException {
//1,读取配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMyBatis.xml");
//2,创建selSession
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
//3,从工厂取一个链接独享
SqlSession sqlSession = build.openSession();
//4,执行sql
List<User> users = sqlSession.selectList("userMapper.selAll");
//5,打印结果
System.out.println(users);
//6,归还链接对象
sqlSession.close();
}
添加语句:
@Test
public void test2() throws IOException {
User users=new User();
users.setId(3);
users.setName("宫本");
users.setPass("789");
//1,读取配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMyBatis.xml");
//2,创建selSession
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
//3,从工厂取一个链接独享
SqlSession sqlSession = build.openSession();
//4,执行sql
sqlSession.insert("userMapper.addUser",users);
//5,提交事务
sqlSession.commit();
//6,归还链接对象
sqlSession.close();
}
xml文件
<!-- 增加-->
<insert id="addUser" parameterType="com.buka.po.User">
insert into user (id,name,pass) values (#{id},#{name},#{pass})
</insert>
3、注意事项
-
插入语句使用insert标签
-
在映射文件中使用parameterType属性指定要插入的数据类型
-
Sql语句中使用#{实体属性名}方式引用实体中的属性值
-
插入操作使用的API是sqlSession.insert(“命名空间.id”,实体对象);
-
插入操作涉及数据库数据变化,所以要使用sqlSession对象显示的提交事务,即sqlSession.commit()
待补充。。。。。。