mybatis和spring第一个整合程序

知识点:

一、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

已解决

遗留问题:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值