mybatis和spring第一个整合程序
知识点:
一、mybatis创建dao代理对象
StudentDao dao = sqlSession.getMapper(StudentDao.class);
List<Student> student = dao.selectStudents();
要使用dao对象,就要使用getMapper()方法。需要哪些条件:
- 获取SqlSession对象,需要使用SqlSessionFactory的openSession()方法。
- 而获取SqlSessionFactory对象,需要读取主配置文件。
所以在整合中需要改为由spring创建SqlSessionFactory和dao对象
二、mybatis主配置文件
- 数据库信息标签,在整合中,会使用独立的连接池替换mybatis默认自己带的,把连接池类也交给spring创建(如:阿里的druid连接池)
- mapper文件的位置信息标签
===========================================================================================
通过以上说明,得知需要让spring创建出以下3个对象:
- 独立的连接池类的对象,使用阿里的druid连接池
- SqlSessionFactory对象(由源代码可知SqlSession由SqlSessionFactory的openSession()方法获取,不需要创建对象,所以不用bean另外创建对象)
- dao对象
程序流程步骤:
新建maven项目
加入maven的依赖
1)spring依赖
2)mybatis依赖
3)单元测试依赖(模板自带)
4)mysql驱动
5)spring的事务的依赖
6)mybatis和spring集成的依赖:mybatis官方提供的,用来在spring项目中创建mybatis的SqlSessionFactory,dao对 象的。
创建实体类
创建dao类和mapper.xml文件
创建mybatis主配置文件
创建Service接口和实现类,属性是dao
创建spring的配置文件:声明mybatis的对象交给spring创建
1)数据源(写法固定)
2)SqlSessionFactory(写法固定,具体解释看个人总结)
3)Dao对象
4)声明自定义的service
创建测试类,获取Service对象,通过service调用dao完成数据库的访问
个人总结知识点:
dao包和service包的功能和关系:
dao:接口定义增删改查,xml文件实现增删改查等具体功能。
service:service实现类调用dao类增删改查功能,将实体类对象作为dao接口参数。来说就是service实现类将dao类和实体类综合起来,也可以增加一些判断或多个dao等(此时项目也只有这三个包)
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属性
创建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:
一.命名空间
错误位置:代替原本dao接口的实现类的xml文件中的标签中的namespace属性
错误原因:用/分隔,应该用 . 分隔。另外bean标签中中若value用到分隔也是 . (点), 而标签用/
**知识点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第一个整合程序相关推荐
- mybatis和spring框架的整合
Mybatis+Sping整合 mybatis+spring整合 整合思路 思路:将mybatis框架的对象,交给spring管理. 把SqlSessionFactory对象,交给spring管理 把 ...
- OSGI企业应用开发(十五)基于Spring、Mybatis、Spring MVC实现一个登录应用
前面文章中,我们已经完成了OSGI应用中Spring.Mybatis.Spring MVC的整合,本篇文章我们就在这个基础上来完成一个简单的登录应用,其中用户名和密码需要从数据库中查询. 前面文章中, ...
- mybatis+spring+springmvc ssm整合
文章目录 mybatis 开发我的第一个mybatis程序 关于mybatis的核心API:SqlSession对象. mybatis连接数据库操作 log4j jackson parameterTy ...
- SSM Chapter 07 MyBatis与Spring的整合
SSM Chapter 07 MyBatis 与 Spring 的整合 笔记 本章目标: 掌握Spring与MyBatis的集成 掌握使用SqlSessionTemplate实现整合 掌握使用Mapp ...
- 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- ...
- mybatis和spring整合时这个报错,应该这样解决!
01 问题描述 今天在写mybatis和spring整合的时候,出现了个问题,其实也没有多难,就是自己没有仔细看,特此记录一下. 报错问题如下: org.springframework.beans.f ...
- 由“单独搭建Mybatis”到“Mybatis与Spring的整合/集成”
在J2EE领域,Hibernate与Mybatis是大家常用的持久层框架,它们各有特点,在持久层框架中处于领导地位. 本文主要介绍Mybatis(对于较小型的系统,特别是报表较多的系统,个人偏向Myb ...
- mybatis 配置_配置Mybatis在Spring Boot工程中的整合
配置Mybatis在Spring Boot工程中的整合包,设置mybatis的实体类别名,输出执行sql语句配置项. 分析: 添加启动器依赖: 配置Mybatis:实体类别名包,日志,映射文件等: 配 ...
- Mybatis 与Spring整合及原理
Mybatis 与Spring原理分析 http://www.mybatis.org/spring/zh/index.html 这里我们以传统的Spring 为例,因为配置更直观,在Spring 中使 ...
最新文章
- 计算机中职高考,中职计算机高考中的应用
- 《高效程序员的45个习惯》之体会
- html前端获取地理位置_简单阐述什么是前端?后端?
- WinForm中Partial部分类的使用
- MyBatis-07MyBatis注解方式之@Select
- 大话西游之Office应用实例系列! 13
- 关于用Restful API下载网易云笔记时遇到的图片外链不能打开的问题
- 跳表(Skip list)
- 小微金融的常规策略架构与流程是什么?
- html mui按钮居中,《mui学习笔记》:自定义选项卡
- 关于memcpy和 strcpy的区别 以及memset
- php 抽象类 接口 区别,php中接口、抽象类以及接口和抽象类区别详解
- 创建、复制、删除、重命名、获取文件名等常用的批处理bat命令
- Win 7 安装office visio
- HTAP的下一步?SoTP初探(上):从“大”数据到“小”而“宽”数据
- 第一次使用公有云需要注意啥
- 约瑟夫环问题:有n个人围成一圈,顺序编号。从第1个人开始报数(从1-3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?
- INSTALL_PARSE_FAILED_NO_CERTIFICATES 解决办法
- LOL手游登上去服务器维护,lol手游进不去怎么回事?无法登陆解决方法
- Delphi好书推荐
热门文章
- java 双屏_java – 双屏应用程序
- ps抠图、抠头发去背景等
- 蓝宇风:高强度加密狗
- 用ChatGPT讲一个关于猴子的故事
- 0X000000该内存不能为read written的解决思路(艾孜尔江撰稿)
- 计算机存储程序错误检验,内存错误怎么办?内存错误的修复与检测方法介绍
- Apple 公司账号续费流程
- 三角支架的功能是什么?如何选择?
- python开发一个web项目得需要多少行代码_用Python写个迷你出门问问|10几行代码搞定...
- mac键盘符号的使用_在Mac上使用表情符号的终极指南