知识点:

一、mybatis创建dao代理对象

StudentDao dao = sqlSession.getMapper(StudentDao.class);
List<Student> student = dao.selectStudents();

要使用dao对象,就要使用getMapper()方法。需要哪些条件:

  1. 获取SqlSession对象,需要使用SqlSessionFactory的openSession()方法。
  2. 而获取SqlSessionFactory对象,需要读取主配置文件。

所以在整合中需要改为由spring创建SqlSessionFactory和dao对象

二、mybatis主配置文件

  1. 数据库信息标签,在整合中,会使用独立的连接池替换mybatis默认自己带的,把连接池类也交给spring创建(如:阿里的druid连接池)
  2. mapper文件的位置信息标签

===========================================================================================

通过以上说明,得知需要让spring创建出以下3个对象:

  1. 独立的连接池类的对象,使用阿里的druid连接池
  2. SqlSessionFactory对象(由源代码可知SqlSession由SqlSessionFactory的openSession()方法获取,不需要创建对象,所以不用bean另外创建对象)
  3. dao对象

程序流程步骤:

  1. 新建maven项目

  2. 加入maven的依赖

    1)spring依赖

    2)mybatis依赖

    3)单元测试依赖(模板自带)

    4)mysql驱动

    5)spring的事务的依赖

    6)mybatis和spring集成的依赖:mybatis官方提供的,用来在spring项目中创建mybatis的SqlSessionFactory,dao对 象的。

  3. 创建实体类

  4. 创建dao类和mapper.xml文件

  5. 创建mybatis主配置文件

  6. 创建Service接口和实现类,属性是dao

  7. 创建spring的配置文件:声明mybatis的对象交给spring创建

    1)数据源(写法固定)

    2)SqlSessionFactory(写法固定,具体解释看个人总结)

    3)Dao对象

    4)声明自定义的service

  8. 创建测试类,获取Service对象,通过service调用dao完成数据库的访问

个人总结知识点:

  1. dao包和service包的功能和关系:

    dao:接口定义增删改查,xml文件实现增删改查等具体功能。

    service:service实现类调用dao类增删改查功能,将实体类对象作为dao接口参数。来说就是service实现类将dao类和实体类综合起来,也可以增加一些判断或多个dao等(此时项目也只有这三个包)

  2. spring创建SqlSesssionFactory对象:

    String resource = "org/mybatis/example/mybatis-config.xml";
    InputStream inputStream = Resources.getResourceAsStream(resource);
    SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    

    在mybatis中,创建SqlSesssionFactory对象需要读取主配置文件,而主配置文件中内容包括两个主要方面的内容(在mybatis中)数据源和其他mapper.xml文件的位置,在这里将数据库连接池赋给dataSource属性,将classpath:文件位置赋给configLocation属性

  3. 创建dao对象

    <!--    创建dao对象,需要使用SqlSession的getMapper(studentDao.class)-->
    <!--    mapperScannerConfigurer:在内部调用了getMapper()生成每个dao的代理对象--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--        指定SqlSessionFactory对象的id--><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    <!--        指定包名,包名是dao接口所在的包名-->
    <!--        mapperScannerConfigurer会扫描这个包中的所有接口,把每个接口都执行一次getMapper()方法,得到每个接口的dao-->
    <!--        对象,创建好的dao对象放入到spring容器中,dao对象名称默认是接口首字母小写--><property name="basePackage" value="com.heyu.dao"/></bean>
    

报错Bug:

一.命名空间

  1. 错误位置:代替原本dao接口的实现类的xml文件中的标签中的namespace属性

  2. 错误原因:用/分隔,应该用 . 分隔。另外bean标签中中若value用到分隔也是 . (点), 而标签用/

  3. **知识点1:**命名空间:
    1)定义mapper接口,面向接口编程。

    2)在大型项目中,可能存在大量的SQL语句,这时候为每个SQL语句起一个唯一的标识(ID)就变得并不容易了。为了解决这个问题,在MyBatis中,可以为每个映射文件起一个唯一的命名空间,这样定义在这个映射文件中的 每个SQL语句就成了定义在这个命名空间中的一个ID。只要我们能够保证每个命名空间中这个ID是唯一的,即使 在不同映射文件中的语句ID相同,也不会再产生冲突了。

    **知识点2:**报错最后一句是最终定位的,所以看包错直接看最后一句。

二.pox.xml中数据库驱动依赖版本不兼容

报错:create connection SQLException, url: jdbc:mysql://localhost:3306/springdb, errorCode 1251, state 08004
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client

三.通配符的匹配很全面, 但无法找到元素 ‘context:property-placeholder’ 的声明

解决反法:

在Spring配置文件中出现通配符的匹配很全面, 但无法找到元素 ‘context:property-placeholder’ 的声明这个错误,其实主要是我们在引入命名空间时没有正确引入它的DTD解析文件,当然你必须在把Spring相应的包导入正确的情况下。
解决方案就是如下:
xmlns:context=“http://www.springframework.org/schema/context”
同时在xsi:schemaLocation这个字符串中添加context相关的解析文件
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd。
其他的如util命名空间导入方式一样,只是把context换成相应util就可以了。
原文链接:https://blog.csdn.net/XinhuaShuDiao/article/details/84762242

四.jdbc配置文件中的username与mysql关键字冲突

报错: create connection SQLException, url: jdbc:mysql://localhost:3306/springdb, errorCode 1045, state 28000

java.sql.SQLException: Access denied for user ‘贺昱’@‘localhost’ (using password: YES)

报错位置:主配置文件中的数据源中的配置用户名的属性用通配符表示。

<property name="username" value="${b.username}"

报错描述,当没有b.时就会报上述错误,但是其他的没有问题

???

解决方法:jdbc配置文件中的username与mysql关键字冲突,将配置文件中的信息修改为下图

或者换个其他的名字也可以

来源:https://blog.csdn.net/qq_48785525/article/details/110296142

已解决

遗留问题:

mybatis和spring第一个整合程序相关推荐

  1. mybatis和spring框架的整合

    Mybatis+Sping整合 mybatis+spring整合 整合思路 思路:将mybatis框架的对象,交给spring管理. 把SqlSessionFactory对象,交给spring管理 把 ...

  2. OSGI企业应用开发(十五)基于Spring、Mybatis、Spring MVC实现一个登录应用

    前面文章中,我们已经完成了OSGI应用中Spring.Mybatis.Spring MVC的整合,本篇文章我们就在这个基础上来完成一个简单的登录应用,其中用户名和密码需要从数据库中查询. 前面文章中, ...

  3. mybatis+spring+springmvc ssm整合

    文章目录 mybatis 开发我的第一个mybatis程序 关于mybatis的核心API:SqlSession对象. mybatis连接数据库操作 log4j jackson parameterTy ...

  4. SSM Chapter 07 MyBatis与Spring的整合

    SSM Chapter 07 MyBatis 与 Spring 的整合 笔记 本章目标: 掌握Spring与MyBatis的集成 掌握使用SqlSessionTemplate实现整合 掌握使用Mapp ...

  5. Spring(四)——AOP、Spring实现AOP、Spring整合Mybatis、Spring中的事务管理

    文章目录 1. 什么是AOP 2. 使用Spring实现AOP 2.1 使用Spring的API 接口实现 2.2 自定义实现 2.3 使用注解实现 3. 整合MyBatis 3.1 MyBatis- ...

  6. mybatis和spring整合时这个报错,应该这样解决!

    01 问题描述 今天在写mybatis和spring整合的时候,出现了个问题,其实也没有多难,就是自己没有仔细看,特此记录一下. 报错问题如下: org.springframework.beans.f ...

  7. 由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”

    在J2EE领域,Hibernate与Mybatis是大家常用的持久层框架,它们各有特点,在持久层框架中处于领导地位. 本文主要介绍Mybatis(对于较小型的系统,特别是报表较多的系统,个人偏向Myb ...

  8. mybatis 配置_配置Mybatis在Spring Boot工程中的整合

    配置Mybatis在Spring Boot工程中的整合包,设置mybatis的实体类别名,输出执行sql语句配置项. 分析: 添加启动器依赖: 配置Mybatis:实体类别名包,日志,映射文件等: 配 ...

  9. Mybatis 与Spring整合及原理

    Mybatis 与Spring原理分析 http://www.mybatis.org/spring/zh/index.html 这里我们以传统的Spring 为例,因为配置更直观,在Spring 中使 ...

最新文章

  1. 计算机中职高考,中职计算机高考中的应用
  2. 《高效程序员的45个习惯》之体会
  3. html前端获取地理位置_简单阐述什么是前端?后端?
  4. WinForm中Partial部分类的使用
  5. MyBatis-07MyBatis注解方式之@Select
  6. 大话西游之Office应用实例系列! 13
  7. 关于用Restful API下载网易云笔记时遇到的图片外链不能打开的问题
  8. 跳表(Skip list)
  9. 小微金融的常规策略架构与流程是什么?
  10. html mui按钮居中,《mui学习笔记》:自定义选项卡
  11. 关于memcpy和 strcpy的区别 以及memset
  12. php 抽象类 接口 区别,php中接口、抽象类以及接口和抽象类区别详解
  13. 创建、复制、删除、重命名、获取文件名等常用的批处理bat命令
  14. Win 7 安装office visio
  15. HTAP的下一步?SoTP初探(上):从“大”数据到“小”而“宽”数据
  16. 第一次使用公有云需要注意啥
  17. 约瑟夫环问题:有n个人围成一圈,顺序编号。从第1个人开始报数(从1-3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?
  18. INSTALL_PARSE_FAILED_NO_CERTIFICATES 解决办法
  19. LOL手游登上去服务器维护,lol手游进不去怎么回事?无法登陆解决方法
  20. Delphi好书推荐

热门文章

  1. java 双屏_java – 双屏应用程序
  2. ps抠图、抠头发去背景等
  3. 蓝宇风:高强度加密狗
  4. 用ChatGPT讲一个关于猴子的故事
  5. 0X000000该内存不能为read written的解决思路(艾孜尔江撰稿)
  6. 计算机存储程序错误检验,内存错误怎么办?内存错误的修复与检测方法介绍
  7. Apple 公司账号续费流程
  8. 三角支架的功能是什么?如何选择?
  9. python开发一个web项目得需要多少行代码_用Python写个迷你出门问问|10几行代码搞定...
  10. mac键盘符号的使用_在Mac上使用表情符号的终极指南