pojo类和Java been的区别:pojo类可以不提供全部的getter和setter方法,以及有参无参构造器等,而javaBeen的流程则更为繁琐一些。
⑧创建Mybatis的示例类:MybatisDemo
1. package com.xzl; 2. 3. import com.xzl.pojo.User; 4. import org.apache.ibatis.io.Resources; 5. import org.apache.ibatis.session.SqlSession; 6. import org.apache.ibatis.session.SqlSessionFactory; 7. import org.apache.ibatis.session.SqlSessionFactoryBuilder; 8. 9. import java.io.IOException; 10. import java.io.InputStream; 11. import java.util.List; 12. 13. public class MybatisDemo { 14. public static void main(String[] args) throws IOException{ 15. //1、加载mybatis核心配置文件,获取SqlSessionFactory 16. String resource = "mybatis-config.xml"; 17. InputStream inputStream = Resources.getResourceAsStream(resource); 18. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 19. //2、获取sqlSession对象,用来执行sql 20. SqlSession sqlSession = sqlSessionFactory.openSession(); 21. //3、执行sql 22. List<User> users = sqlSession.selectList("com.xzl.pojo.User.selectAll"); 23. System.out.println(users); 24. sqlSession.close(); 25. } 26. }
3.3、注意事项
3.3.1、⭐MybatisDemo步骤
1.加载Mybatis核心配置文件,获取SqlSessionFactory对象
1.1、先获取字节缓存输入流
InputStream inputStream = Resources.getResourceAsStream(resource);
通过getClass可以看到,最终获取的是一个字节缓冲输入流
1.2、获取SqlSessionFactory->
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
2.获取SqlSession对象,用来执行sql->
SqlSession sqlSession = sqlSessionFactory.openSession();
3.执行sql->List<User> users = sqlSession.selectList("com.xzl.pojo.User.selectAll");
4.释放资源->sqlSession.close();
3.3.2、bug
如果代码检查了并无问题,但是却报错:
可能是SQL映射文件的加载除了问题:需要检查mybatis配置文件中加载SQL映射文件的部分:
可能是resource的资源路径书写有误,可以尝试去直接复制路径看看:
还有一个可能就是,MySQL驱动包的版本较高。MySQL 8+版本的驱动包中,在mybatis核心配置文件配置MySQL连接的url时,参数部分的连接不能用"&"而要使用"&"替代
例如:
3.3.3、映射文件警告信息
在映射配置文件中存在报红的情况。问题如下:
产生的原因:Idea和数据库没有建立连接,不识别表信息。但是它并不影响程序的执行。
解决方式:在Idea中配置MySQL数据库连接。
步骤:
点击IDEA右边框的 Database ,在展开的界面点击 + 选择 Data Source ,再选择 MySQL
在弹出的界面进行基本信息的填写,点击完成后就能看到如下界面
而此界面就和 navicat 工具一样可以进行数据库的操作。也可以编写SQL语句
4、代理开发
4.1、简介
之前的代码是基本使用方式,它也存在硬编码的问题,如下:
这里调用 selectList() 方法传递的参数是映射配置文件中的namespace.id值
这样写也不便于后期的维护。如果使用Mapper 代理方式则不存在硬编码问题:
通过上面的描述可以看出 Mapper 代理方式的目的:
解决原生方式中的硬编码
简化后期执行SQL
Mybatis 官网也是推荐使用 Mapper 代理的方式。下图是截止官网的图片:
4.2、使用要求
使用Mapper代理方式,必须满足以下要求:
①定义 与 SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下。如下:
②设置SQL映射文件的namespace属性为Mapper接口全限定名
③在 Mapper 接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致
4.3、代理代码实现
步骤:
①创建UserMapper接口:
②UserMapper.xml 映射配置文件
③创建MybatisDemo2类:
4.3.1、注意事项
如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载。也就是将mybatis核心配置文件的加载映射配置文件的配置修改为:
4.4、mapper代理的bug
这个部分请查看我的另一篇文章: