string(21) "{"docs":[],"count":0}" Spring整合mybatis - 爱码网

1.集合的注入:

 

1.1如果有一个类,需要注入集合(测试是注入三种集合)

 Spring整合mybatis

提供set,get方法;

Properties集合就相当于是一个Map集合
1.2集合注入

 Spring整合mybatisSpring整合mybatis

 Spring整合mybatis

每种集合的注入方式在细节上不一样...

3. 测试

 Spring整合mybatis

打印结果:

 Spring整合mybatis

 

 

 

改进的集合注入方式:

 Spring整合mybatis

 

 

 

 

 

 

 

 

 

 

 

2.自动装配的使用(配置文件方式开发是只做了解)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.spring进一步整合mybatis实现数据查询

 

1. spring-configs.xml文件:

 Spring整合mybatis

2. 对应的mapper:

 Spring整合mybatis

3. 测试类:

 Spring整合mybatis

 

 

 

 

 

 

 

 

 

 

 

 

4.SqlSessionTemplate(模板类)的使用  -----   线程安全

 

SqlSessionTemplate的使用:

1,配置文件:

 Spring整合mybatis

SqlSessionTemplate需要依赖SqlSessionFactory;

它是一个线程安全的类,

 Spring整合mybatis

实现了SqlSession,其实本事就是用来获得跟数据库的连接,只是它是可以支持多个Dao接口的操作,线程安全,并且封装了数据库的操作,用起来更简便

 

SqlSessionTemplate没有无参的构造方法,而且没有ste方法,不能通过,但是它的创建需要SqlSessionFactory,所以只能是使用构造方法的方式来注入SqlSessionFactory.

 

 

 

2,SqlSessionTemplate类的简单使用:

 

注意之前,就要创建BlogMapper.xml文件.

这里面的namespace可以随便写,因为没有用到接口,而是直接通过SqlSessionTemplate这个类提供的一些方法,找到对应的xxxMapper的对应的id,去查询数据,没有用到接口.

 Spring整合mybatis

 

 Spring整合mybatis

 

 

通过SqlSessionTemplateselectList()方法,里面的参数可以直接找到对应的mapper,前提是你把对应的mapper文件加入到spring容器中,因为spring整合mybatis,也需要对这个mapper文件操作,没加入spring的核心配置文件中,就相当于之前没有把对应的mapper文件加入mybatis的核心配置文件中,这样是不起作用的.

SqlSessionTemplate可以帮你关闭session.

 

看打印的结果:

 Spring整合mybatis

ctx.getBean(“”),里面的参数可以是SqlSessionTemplate,也可以是SqlSession,得到的bean对象都是SqlSessionTemplate,因为SqlSessionTemplate是实现了SqlSession这个接口的,所以这样写也不会错,(多态).

返回的类型都是SqlSessionTemplate,因为对应的id,springbean容器里创建的就是SqlSessionTemplate.

 

 

 

 

 

 

 

 

 

 

 

 

 

5.业务层与数据层实现分离,利用SqlSessionTemplate写自己的实现类

 

1,BlogDao接口,以及实现了这个接口的实现类BlogDaoImpl;

 Spring整合mybatis

 Spring整合mybatis

BlogDaoImpl类里面需要提供SqlSessiontTemplate用来操作数据库,

sqlTemplate.selectList(“mapper.blog.findBlogs”),里面只要能找到这个mapper对应的idsql语句就行,

没有一定要求,这个mappernamespace必须是BlogDao的全路径名,

而如果使用哪种接口的方式来操作,session.getMapper(“BlogDao”),这种情况,就必须让mappernamespceBlogDao的全路径名,因为,这样无法指定mapper的路径.

 

2. spring容器中注册BlogDaoImpl,并且注入SqlSessionTemplate.

 Spring整合mybatis

此时BlogDaoImpl里面就有了可以操作数据库的SqlSessionTemplate,并且有具体的实现方法,用来查询所有的Blog表中的数据.

这样在外面就只需要调用这个BlogDaoImpl的方法就可以了,这样就进一步封装了查询的方法,在最外层,只需要调用就可以.

3.测试:

 Spring整合mybatis

 

 

 

像这种情况,mappernamespace就必须跟BlogDao(对应接口)的全路径名一致

 Spring整合mybatis

否则报这样的错:

 Spring整合mybatis

 

所以namespace得与接口的全路径名一致

 Spring整合mybatis

 

 

 

 

 

 

 

 

 

 

6.如何使用包扫描(不需要自己写Dao)mybatis.org/spring

1,添加依赖:注意mybatis是要添加3.4.0以上的版本

 Spring整合mybatis

 

原因是:配置用来包扫描的类:MapperScannerConfigurer这个类是需要用到:SqlSessionTemplate;而只有mybatis3.4.0及以上版本是支持SqlSessionTemplate.

2. 添加Spring的核心配置文件(spring-configs.xml)

>>2.1配置数据源:

 Spring整合mybatis

2.1.1先写数据库连接的配置文件:

 Spring整合mybatis

2.1.2spring-configs.xml 核心配置文件

引入configs.properties文件

然后在配置数据库连接池:

可能出现的错误,在配置的时候,需要引入configs.properties文件,写数据库连接池的属性注入的时候,要小心点,否则可能会出错.

 

2.1.3 测试数据库连接池是否配置正确

 Spring整合mybatis

 

可能会出的错:

 Spring整合mybatis

这种情况出现,那么就去检查一下数据库连接池属性注入的时候,有没有出错

 

 

3. 配置SqlSessionFactory:

 Spring整合mybatis

检测SqlSessionFactory有没有配置好:

 

 Spring整合mybatis

 

 

 

4. Dao接口,

 Spring整合mybatis

5. Mapper.xml文件

 Spring整合mybatis

6. mapper文件配置在SqlSessionFactory,

mapperLocations:SqlSessionFactory的属性

 Spring整合mybatis

 

>>6.1可以将Mapper.xml文件统一配置在mybatis-configs.xml配置文件中.

 Spring整合mybatis

这样也体现了一种分离,因为我们之前在单独做mybatis的时候,所有的xxxMapper.xml文件都是引入在mybatis核心配置文件--mybatis-configs.xml

>>6.2mybatis-configs.xml文件中所有的mapper引入到SqlSessionFactoryBean,需要这个对象去连接数据库.

SqlSessionFactoryBean这个类的底层代码:

 Spring整合mybatis

将所有的mapeer注入到SqlSessionFactoryBean

 Spring整合mybatis

 

7.配置DAO接口的包扫描

 Spring整合mybatis

 

 Spring整合mybatis

8.测试看看,使用包扫面,没有自己写实现类的方式能否实现功能

 Spring整合mybatis

 

 

这样实现了没有自己写实现类,使用DAO包扫描的方法,实现了查询功能;

 

 

需要注意的点:

注意点1:

 Spring整合mybatis

xxxMapper.xml文件中配置的mapper namespace必须与对应的接口的全路径名一致,并且id也要与对应接口的抽象方法一致.并且必须要有返回值类型.

否则会报这样的错:

 Spring整合mybatis

 

原因之前自己写实现类

 Spring整合mybatis

 

如果是用SqlSessionTemplate的方法,方法里面的statement直接就去找到mappernaspaceid,那么这样,xxxMapper.xml里面的naspace就无须跟接口的全路径名一致,id也无须跟接口的方法名字一致.因为SqlSessionTemplate可以根据你传递的参数去找.

 

 

 

 

7.如何配置多个数据源

 

 

 

 

 

 

 

 

 

 

 

 

8.个人理解MapperScannerConfigurer这个类:

这个类就是DAO包扫描的类.

 

分析:

之前我们没有用DAO包扫描这个类的话,我们需要自己写接口的实现类.

要在实现类中实现数据库的操作,我们在外界只需要调用这个实现类的方法就可以,(用实现类的接口指向实现类)

 Spring整合mybatis

那么就需要在这个实现类中封装一个SqlSessionTemplate(当然也不一定要这个,SqlSession也可以),SqlSessionTemplate可以更加方便地操作数据库,提供了好多方法.

 Spring整合mybatis

SqlSessionTemplate又需要SqlSessionFactory;

所以配置文件中的依赖关系有点复杂:

 Spring整合mybatis

 

如果使用DAO包扫描的话,就不需要把依赖变得这么复杂.

看看使用了DAO包扫描的spring-configs.xml:

 Spring整合mybatis

这样关系很简单,其实最主要的是DAO包扫描的这个类底层做了一系列操作(动态代理)

 

 

BeanDefinitionRegistryPostProcessor:

Bean对象定义注册邮递加工者

Recursively:递归地

MapperFactoryBean:数据映射器

 Spring整合mybatis

 Spring整合mybatis


Spring整合mybatis 

 

 Spring整合mybatis

 

 

理解:什么是映射器:比如你要去查找Blog,那么你使用spring去整合mybatis的话,你得有一个映射器,去映射从数据库中查询到信息.就是BlogDaoImpl.这个实现类会利用SqlSession去找到对应的xxxMapper.xml文件去数据库中查询数据,并且将数据映射返回,想这个类就可以理解成为一个映射器,用来去映射从Blog表中查询到的数据.

如果你还想去查询Author表的话,你还需要AuthorMpper.xml,和另外一个配哈的映射器AuthorDaoImpl.

那么这个映射器也要在spring-configs.xml中注册,而且也需要将SqlSssionFactoryh或者SqlSessionTemplate注入这个映射器.  SqlSessionTemplate就是一个封装了的SqlSession,它需要注入SqlSessionFactory.

如果每一个映射器都要去spring-configs.xml中注册注入的话,那么会很麻烦.

所以就出现了DAO包扫描.

这个DAO包扫描底层用了动态代理去创建对象,并且可以自动装配SqlSessionFactory或者SqlSessionTemplate.

但是如果使用了多个SqlSessionFactory的话,需要指定,否则会报错.

 

MapperScannerConfigurer是根据类型去注入SqlSessionFactory,而不是根据set方法;

 Spring整合mybatis

这个名字可以随便写,也不会报错,是根据类型自动装配的.

 


如果出现两个或以上的SqlSessionFactory的话:

 Spring整合mybatis

报错:

 Spring整合mybatis

无法自动装配,需要指定.

 

 Spring整合mybatis

 Spring整合mybatis

 

注意里面 不是ref, 而是value,如果是写成ref的话,会报错.

 Spring整合mybatis

 

 

 

细节1:xxxMapper.xml文件引入spring的三种方式

 

方式一:通过SqlSessionFactoryBean提供的mapperLocation可以进行属性注入

Spring整合mybatis

这种通过list集合注入;

 Spring整合mybatis

SqlSessionFactoryBean的注入xxxMapper.xml文件的属性需要是集合.所以可以通过集合的方式来注入给这个类


方式二:

 Spring整合mybatis

写一个和写通配符的方式都可以.

这种方式没有用集合去注入,但是也是可以的.

 

 

方式三:通过原先单独用mybatis的方式引入xxxMapper.xml文件的方式

 Spring整合mybatis

写mybatis-configs.xml;

配置mybatis.configs.xml

 Spring整合mybatis

注入xxxMapper.xml文件

 Spring整合mybatis

利用的是SqlSessionFactoryBeanconfigLocation属性

 Spring整合mybatis

相关文章: