什么是mybatis
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射为java对象并返回.
我们以前没学mybatis的时候用的jdbc,一句一句的写的挺头疼的,用了框架之后我们就开发更快,缩短开发时间,这里所说的持久层是三层架构的一层,三层架构是:表现层,业务层,持久层,三层是一种软件架构,而MVC是一种模式,后面这几句话是我自己的理解
本文摘自源地址
为什么要学习mybatis
因为 框架帮我们做了底层的事情,我们不需要关注底层代码的编写,让我们开发更加方便
mybatis环境搭建
这里采用了maven来搭建,如果还没学maven的话就是下载jar包导入jar包了,可以去mybatis官网去下载他们的jar包
- 开发工具 IDEA2018
- 构建工具maven3.5
- mysql-5.7
- mybatis-3.5.4
我们可以按照 官网所说的一步步来,你百度搜索mybatis官网也可以
mybatis官网官方文档
点击入门
这里首先,打开你的编辑器,我这里用的是IDEA,这个界面怎么打开的我真的不想再说了但是啊,我的同学既然发问过我,我就写下吧
你们以前创建好的项目,都是每次默认,打开的以前写的项目
你只需要呢,点击关闭,这个项目就可以了,close project
这里,就不用采用骨架了,因为,只需要查查,数据库,到控制台看下就可以了
这里因为怕录制的GIF大小超过5M就节约了点等待的时间,因为CSDN上面是不能上传5M以上的GIF
上面有版本信息,用最新的也没事,如果你想用旧版本可以去maven仓库去找,当然你也可以用国内的仓库地址,至于怎么找到这个连接地址,只需要去百度搜索 maven repository,如果需要你安全验证的话,你就输入验证码就可以了,进去自己搜索
maven仓库地址
这里多提一嘴,这里是看以前版本的自己点击第一个就可以找pom依赖了
如果上面有说错的请联系我QQ 1423228256,因为你要查数据库肯定少不了,连接驱动mysql-connect-java,上面那个有一个springboot整合mybatis的启动器,不是springboot的启动器,也懒得改了,当你学到springboot的时候会发现一个新大陆
<!-- 导入依赖 -->
<dependencies>
<!-- mybatis依赖跟版本 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- 因为自己要测试就导入junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!-- 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
这里给大家看一个IDEA连接 连接数据库的方便,这张GIF录好被压缩过,如果你不知道这个东西的话,第一次使用,点击的下面的一个,什么反正差不多意思是下载的意思,我忘记了,点他一下就可以跟我一样了,位置我忘记了,是为了大家方便,就给大家演示了下,怕小白不知道
到这里我们去创建一个数据库,复制粘贴SQL语句就可以了
create database mybatis;
use mybatis;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(32) NOT NULL COMMENT '用户名称',
`birthday` datetime default NULL COMMENT '生日',
`sex` char(1) default NULL COMMENT '性别',
`address` varchar(256) default NULL COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `user`(`username`,`birthday`,`sex`,`address`) values ('adger','2020-04-03 16:47:15','男','长沙');
我下面 使用的 快捷键是 Alt + Insert(笔记本上面可能是Alt + Fn + F12),实体类,已经创建好了,顺便扩展下,实体类 != javaBean,Bean 在计算机中是有可重复使用组件的意思,我决定还是再给大家扩展下,关于这个实体类,我记得还有一个插件,可以加上几个注解,就可以生成一个实体类,那个插件的名字叫,Lombok,关于这个实体类,有很多叫法,有的叫,domain,pojo等等
至于javaBean为什么一定写private,我觉得是一种javaBean的规范,再提供一个公开的set get 方法,然后再写一个dao接口,接口写完,就开始配置mybatis环境了
去官网,看这句话,先不要看上面的
去官网,复制,粘贴,就可以了,现在不要急,这些不用记,但是你必须得看的懂,记得下面的mapper中的resources自己改下,这里mybatis喜欢叫mapper我自己喜欢一致性,就叫这个名字了,如果你的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">
<!-- mybatis的主配置文件 -->
<configuration>
<!-- 配置环境 -->
<environments default="development">
<!-- 配置mysql环境 -->
<environment id="development">
<!-- transactionManager 事务类型 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源,也叫连接池,type="有三个类型"-->
<dataSource type="POOLED">
<!-- 配置连接数据库得基本信息 8.0的版本注意后面加上
?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
mysql jar包也要引入高版本的
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
<mappers>
<mapper resource="club/adger/dao/UserDao.xml"/>
</mappers>
</configuration>
然后再去创建映射配置文件
复制粘贴,过去,自己改改就这么简单,双击类或者方法就可以了,复制全限定类名,对了Ctrl + / 快速生成注释,Ctrl + Shift + / 快速生成文档注释
<?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 namespace="club.adger.dao.UserDao">
<!-- select 中的id 属性 不能随便乱写,必须是你dao接口中的方法名 -->
<!-- resultType 是把结果集封装在你的实体类 -->
<select id="findAll" resultType="club.adger.entity.User">
select * from user
</select>
</mapper>
再写一个测试类
//1.读取配置文件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
//2.创建SqlSessionFactory工厂
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
//3.使用工厂生产SqlSession对象
SqlSession session = factory.openSession();
//4.使用SqlSession创建Dao接口的代理对象
UserDao userDao = session.getMapper(UserDao.class);
//5.使用代理对象执行方法
List<User> users = userDao.findAll();
for(User user : users){
System.out.println(user);
}
//6.释放资源
session.close();
in.close();
注意事项
ORM:
Object Relational Mappging 对象关系映射
简单的说:
就是把数据库表和实体类及实体类的属性对应起来
让我们可以操作实体类就实现操作数据库表。
实体类中的属性和数据库表的字段名称保持一致。
user User
id id
username username
总结
mybatis的环境搭建
第一个:创建UserDao.xml 和 UserDao.java时名称是为了,(个人习惯)保持一致。
在Mybatis中它把持久层的操作接口名称和映射文件也叫做:Mapper
所以:UserDao 和 UserMapper是一样的,叫法
第二个:mybatis的映射配置文件位置必须和dao接口的包结构相同
第三个:映射配置文件的mapper标签namespace属性的取值必须是dao接口的全限定类名
第四个:映射配置文件的操作配置(select),id属性的取值必须是dao接口的方法名
当我们遵从了第2,3,4点之后,我们在开发中就无须再写dao的实现类。
- 创建maven工程并导入座标
- 创建实体类和dao的接口
- 创建Mybatis的主配置文件 mybais.xml
- 创建映射配置文件 UserDao.xml
- 测试
扩展
这是一个模板,怎么搞呢,打开设置
File and Code Templates
/**
* Created with IntelliJ IDEA.
* @Auther: Adger
* @Date: ${YEAR}/${MONTH}/${DAY}/${TIME}
*/
**@Auther 后面改名字,自己的名字,注意类名第一个字母大写,我这里随便写的,加油,奥里给,有兴趣可以加我QQ群一起交流讨论 793858121 **