(一)Mybatis的入门 - Titan的Mybatis系列学习笔记
时间:2022-07-22
本文章向大家介绍(一)Mybatis的入门 - Titan的Mybatis系列学习笔记,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
Mybatis 学习笔记
Author: Titan
Start Date: 2020-05-04
Mybatis系列的学习笔记是为本人原创系列文章。
遵循 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
转载需注明来源 Titan笔记 https://www.titan6.cn/
Mybatis的入门
介绍
摘取一段来自于百度百科的介绍:
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。
我认为,简单的来说,在进行持久层操作的过程中,原始的JDBC操作将会有繁琐的处理过程,而Mybatis正是解决了这个问题,使得程序员能够专注于查询本身,而不是一系列的重复配置代码。Mybatis能够将数据库查询集直接的映射为Java的对象集(一般来说是JavaBean对象)
Mybatis的环境搭建
Mybatis的环境搭建主要有以下几个步骤:
- 创建一个Maven项目
- 导入相关的Dependencies, 主要为 JDBC-Connector,Mybatis,可以根据需要加入日志记录的 Log4j 和单元测试的 junit 等。
- 创建映射数据库实体的实体类Bean和是实现DAO的接口
- 创建Mybatis的主配置文件 SqlMapConfig.xml
- 创建映射配置文件 Mappers.xml
一个入门案例
1. 设计数据表结构与数据如下
id |
username |
birthday |
sex |
address |
---|---|---|---|---|
41 |
老王 |
2018/2/27 17:47:08 |
男 |
北京 |
42 |
小二王 |
2018/3/2 15:09:37 |
女 |
北京东城 |
43 |
小二王 |
2018/3/4 11:34:34 |
女 |
河南郑州 |
45 |
Titan |
2018/3/4 12:04:06 |
男 |
河南信阳 |
46 |
老王 |
2018/3/7 17:37:26 |
男 |
河南郑州 |
48 |
小马宝莉 |
2018/3/8 11:44:00 |
女 |
美国加利福尼亚 |
2. 首先新建User的实体类,是一个JavaBean。
package cn.titan6.beans;
import java.io.Serializable;
import java.util.Date;
public class User implements Serializable {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
// Getter 和 Setter省略
}
3. 创建实现DAO操作的接口
package cn.titan6.dao;
import cn.titan6.beans.User;
import java.util.List;
public interface UserDao {
List<User> findAll();
}
4. Mybatis的主配置文件 SqlMapConfig.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="mysql">
<!--配置MySQL的环境-->
<environment id="mysql">
<transactionManager type="JDBC"/>
<!-- 配置数据源-->
<dataSource type="POOLED">
<!-- 配置数据库连接信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url"
value="jdbc:mysql://localhost:13306/mybatis_dayOne?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true"/>
<property name="username" value="root"/>
<property name="password" value="titan123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserDao.xml"/>
</mappers>
</configuration>
5. 映射配置文件如下
<?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="cn.titan6.impls.UserDao">
<!-- 配置查询所有 -->
<select id="findAll" resultType="cn.titan6.beans.User">
SELECT * FROM user
</select>
</mapper>
6. 进行Mybatis DAO操作的测试类
public class mybatis_test {
public static void main(String[] args) throws Exception {
// 1.读取配置文件
// 2.创建SqlSessionFactory工厂对象
// 3.使用工厂产生一个SqlSession对象
// 4.使用SqlSession创建DAO接口的代理对象
// 5.使用代理对象执行方法
// 6.释放资源
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(inputStream);
SqlSession session = factory.openSession();
UserDaoImpl userDao = session.getMapper(UserDao.class);
List<User> users = userDao.findAll();
for (User user : users) {
System.out.println(user.getUsername() + "-----" + user.getAddress());
}
session.close();
}
}
7. 最终运行结果如下
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 看到一个不错的前端面试题开源项目
- PWN:UnsortedBin Attack
- React、TypeScript、NodeJS 和 MongoDB 搭建 Todo App
- 我想new个对象过七夕,她却抛了异常···
- 在开启了CloudFlare的页面中显示当前节点信息
- MySQL 案例:无主键表引发的同步延迟
- 进入编译器后,一个函数经历了什么?
- Cloudflare中firewall的编写方法
- LeetCode 11盛水最多的容器&12整数转罗马数字
- 刷题一个4ms的程序,代码如何优化到3ms再到2ms?
- 【LeetCode】1. 盛最多水的容器:C#三种解法
- .NET core3.1使用cookie进行身份认证
- User-Agent那些事
- 三分钟Docker-推送本地镜像到仓库
- 初识ABP vNext(6):vue+ABP实现国际化