mybatis书写
数据库内容
/*
Navicat Premium Data Transfer
Source Server : 本地数据库
Source Server Type : MySQL
Source Server Version : 80028
Source Host : localhost:3306
Source Schema : mybatis_demo
Target Server Type : MySQL
Target Server Version : 80028
File Encoding : 65001
Date: 21/08/2022 22:41:13
*/
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,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '用户名称',
`birthday` datetime(0) DEFAULT NULL COMMENT '生日',
`sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '性别',
`address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '老刘', '2022-06-02 17:43:32', '男', '石家庄');
INSERT INTO `user` VALUES (2, '熊大', '2018-03-02 15:09:37', '女', '上海');
INSERT INTO `user` VALUES (3, '熊二', '2018-03-04 11:34:34', '女', '深圳');
INSERT INTO `user` VALUES (11, 'a1', NULL, '男', '北京');
INSERT INTO `user` VALUES (12, 'a2', NULL, '男', '北京');
INSERT INTO `user` VALUES (13, 'a3', NULL, '男', '北京');
INSERT INTO `user` VALUES (14, '小白', '2022-06-04 14:23:50', '男', '北京');
SET FOREIGN_KEY_CHECKS = 1;
一、环境搭建
1.maven项目创建
2.删除src目录,将此工程作为父工程
3.导入maven依赖
在此项目的pom.xml文件下标签内,导入依赖并刷新maven
<!--导入依赖-->
<dependencies>
<!--mysqlq驱动-->
<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.3</version>
</dependency>
<!--junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
4.创建module
直接next创建maven
二、创建一个模块
1.编写mybatis的核心配置文件
在main/resources目录下创建mybatis-conifg配置文件
涉及sql的连接
<?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="mysql">
<environment id="mysql">
<!--配置事务的类型,使用本地事务策略-->
<transactionManager type="JDBC"></transactionManager>
<!--是否使用连接池 POOLED表示使用链接池,UNPOOLED表示不使用连接池-->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- 为sql的数据库名称 -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo"/>
<!-- 为sql的账户和密码 -->
<property name="username" value="root"/>
<property name="password" value="2020"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"></mapper>
</mappers>
</configuration>
2.编写mybatis工具类
package com.user.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 命令所需的所有方法。
// 你可以通过 SqlSession 实例来直接执行已映射的 SQL 语句。
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
3.创建实体类
创建与数据库字段相应的变量名,并生成get和set方法以及toString方法
package com.user.pojo;
import java.time.LocalDateTime;
public class User {
private int id;
private String username;
private LocalDateTime birthday;
private String sex;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public LocalDateTime getBirthday() {
return birthday;
}
public void setBirthday(LocalDateTime birthday) {
this.birthday = birthday;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", birthday=" + birthday +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}
文件结构如下
4.创建Dao接口
是对mapper中sql语句的id声明,当执行此接口时,相当于执行mapper中的sql语句
package com.user.dao;
import com.user.pojo.User;
import java.util.List;
public interface UserDao {
List<User> getUserList();
}
5.编写mapper文件
在resource目录下创建mapper文件夹,在其中创建mapper文件
与dao层接口相映射 namespace=“com.user.dao.UserDao”
并在此编写sql语句
select 里 的id为接口名称, resultType是sql查询的数据的返回类型,这里用的实体类作为返回类型
<?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="com.user.dao.UserDao">
<!-- 编写sql语句 -->
<select id="getUserList" resultType="com.user.pojo.User">
select * from t_user;
</select>
</mapper>
6.注册mapper
在前面的配置文件中注册mapper,在mybatis-config.xml文件中
<mappers>
<mapper resource="com/user/dao/UserMapper.xml"></mapper>
</mappers>
三、测试
1.创建测试类
在test类下创建如下文件,最终在UserDaoTest中执行测试类
package com.user.dao;
import com.user.pojo.User;
import com.user.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();
//userList.for 快捷方式
for (User user : userList) {
System.out.println(user);
}
//关闭sqlSession
sqlSession.close();
}
}
2.执行测试类
生成target文件夹,存放Java文件编译之后的字节码文件。
3.输出
作用
mybatis 是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。
mybatis 通过 xml 或注解的方式将要执行的各种 statement 配置起来,并通过 java 对象和 statement 中sql 的动态参数进行映射生成最终执行的 sql 语句,最后由 mybatis 框架执行 sql 并将结果映射为 java 对象并返回。
采用 ORM 思想解决了实体和数据库映射的问题,对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。