🌲什么是MyBatis?
MyBatis是⼀款优秀的持久层框架,⽤于简化JDBC的开发。
- MyBatis本是Apache的⼀个开源项⽬iBatis,2010年这个项⽬由apache迁移到了google code,并且改名为MyBatis。2013年11⽉迁移到Github。
- 详细信息点我了解
在上⾯我提到⼀个词:持久层
- 持久层:指的就是持久化操作的层,通常指数据访问层(dao),是⽤来操作数据库的.
简单来说MyBatis是更简单完成程序和数据库交互的框架,也就是更简单的操作和读取数据库⼯具
接下来,博主将通过⼀个⼊⻔程序,让⼤家感受⼀下通过Mybatis如何来操作数据库
🌳准备⼯作
🚩创建⼯程
创建springboot⼯程,并导⼊mybatis的起步依赖、mysql的驱动包
这里只演示导入mybatis的起步依赖、mysql的驱动包。不会创建springboot的小伙伴参考博主写的 【JavaEE进阶】SpringBoot的创建与简单使用
项⽬⼯程创建完成后,⾃动在pom.xml⽂件中,导⼊Mybatis依赖和MySQL驱动依赖
🚩数据准备
创建⽤⼾表,并创建对应的实体类User
DROP DATABASE IF EXISTS mybatis_test; CREATE DATABASE mybatis_test DEFAULT CHARACTER SET utf8mb4; -- 使⽤数据数据 USE mybatis_test; -- 创建表[⽤⼾表] DROP TABLE IF EXISTS userinfo; CREATE TABLE `userinfo` ( `id` INT ( 11 ) NOT NULL AUTO_INCREMENT, `username` VARCHAR ( 127 ) NOT NULL, `password` VARCHAR ( 127 ) NOT NULL, `age` TINYINT ( 4 ) NOT NULL, `gender` TINYINT ( 4 ) DEFAULT '0' COMMENT '1-男 2-⼥ 0-默认', `phone` VARCHAR ( 15 ) DEFAULT NULL, `delete_flag` TINYINT ( 4 ) DEFAULT 0 COMMENT '0-正常, 1-删除', `create_time` DATETIME DEFAULT now(), `update_time` DATETIME DEFAULT now(), PRIMARY KEY ( `id` ) ) ENGINE = INNODB DEFAULT CHARSET = utf8mb4; -- 添加⽤⼾信息 INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone ) VALUES ( 'admin', 'admin', 18, 1, '18612340001' ); INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone ) VALUES ( 'zhangsan', 'zhangsan', 18, 1, '18612340002' ); INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone ) VALUES ( 'lisi', 'lisi', 18, 1, '18612340003' ); INSERT INTO mybatis_test.userinfo ( username, `password`, age, gender, phone ) VALUES ( 'wangwu', 'wangwu', 18, 1, '18612340004' );
创建userinof表如下
创建对应的实体类UserInfo
由于数据库单词之间采用蛇形,而java单词之间喜欢采用驼峰,所以这里我们进行一个简单的转换。其他实体类的属性名与表中的字段名⼀⼀对应
🚩配置数据库连接字符串
Mybatis中要连接数据库,需要数据库相关参数配置
- MySQL驱动类
- 登录名
- 密码
- 数据库连接字符串
application.yml配置文件如下:
spring: datasource: url: jdbc:mysql://127.0.0.1:3306/mybatis_test? characterEncoding=utf8&useSSL=false username: root password: 666666 driver-class-name: com.mysql.cj.jdbc.Driver
注意事项:
- 如果使⽤MySQL是5.x之前的使⽤的是"com.mysql.jdbc.Driver",如果是⼤于5.x使⽤的是“com.mysql.cj.jdbc.Driver”.
🚩 在项⽬中,创建持久层接⼝UserInfoMapper
查询所有用户代码如下:
@Mapper public interface UserInfoMapper { @Select("select * from userinfo") public List<UserInfo> selectAll(); }
Mybatis的持久层接⼝规范⼀般都叫XxxMapper
@Mapper注解:表⽰是MyBatis中的Mapper接⼝
- 程序运⾏时,框架会⾃动⽣成接⼝的实现类对象(代理对象),并给交Spring的IOC容器管理
- @Select注解:代表的就是select查询,也就是注解对应⽅法的具体实现内容
🍃单元测试
在创建出来的SpringBoot⼯程中,在src下的test⽬录下,已经⾃动帮我们创建好了测试类,我们可以直接使⽤这个测试类来进⾏测试.
实现代码如下:
@SpringBootTest class MybatisApplicationTests { @Autowired private UserInfoMapper userInfoMapper; @Test void contextLoads() { List<UserInfo> list = userInfoMapper.selectAll(); System.out.println(list); } }
测试类上添加了注解@SpringBootTest,该测试类在运⾏时,就会⾃动加载Spring的运⾏环境.我们通过@Autowired这个注解,注⼊我们要测试的类,就可以开始进⾏测试了
直接点该测试方法测试就好
我们运行看一下结果如下:
但是我们发现返回结果中,可以看到,只有SQL语句中查询的列对应的属性才有赋值。
这是当前代码正常得情况,具体解决方法关注博主后续博文得发布
🚩使⽤Idea⾃动⽣成测试类
我们也可以使⽤Idea⾃动⽣成测试类
- 在需要测试的Mapper接⼝中,右键->Generate->Test
- 选择要测试的⽅法,点击OK
我们就可以在目录下找到我们创建得测试类了
- 书写测试代码
@SpringBootTest class UserInfoMapperTest { @Autowired private UserInfoMapper userInfoMapper; @Test void selectAll(){ List<UserInfo> list = userInfoMapper.selectAll(); System.out.println(list); } }
🍀打印⽇志
在Mybatis当中我们可以借助⽇志,查看到sql语句的执⾏、执⾏传递的参数以及执⾏结果在配置⽂件中进⾏配置即可
application.yml配置文件如下:
mybatis: configuration: # 配置打印 MyBatis⽇志 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
我们再重新运行程序就可以看到SQL执⾏内容,以及传递参数和执⾏结果
①:查询语句
②:传递参数及类型
③:SQL执⾏结果
⭕总结
关于《【JavaEE进阶】MyBatis⼊⻔》就讲解到这儿,感谢大家的支持,欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下!