版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 https://blog.csdn.net/weixin_43863007/article/details/88723011
在开发中持久层框架MyBatis是支持定制化sql,存储过程以及高级映射的,在使用时候能够动态的执行sql也是MyBatis的核心竞争力之一
1.Mybatis配置详解:
- 创建数据源,先读取properties文件中的数据,连接数据库url,driver,name,pwd等信息
- 创建sqlsession工厂函数对象用来调用mapper映射操作
- 创建dao层的实现类
- 配置事务管理类
这里也可以用这一段替代读取peoperties文件,因为多个文件使用的是一个IOC容器,所以只要在一个文件中读取就可以
<context:property-placeholder location="classpath:properties/*.properties"/>
<!-- 创建数据库连接池,也就是创建数据源,jdbc连接 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties"></property>
</bean>
<bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="${url}"></property>
<property name="driverClass" value="${driver}"></property>
<property name="user" value="${name}"></property>
<property name="password" value="${pwd}"></property>
<!-- 初始化的连接数量 -->
<property name="initialPoolSize" value="10"></property>
<!-- 最大连接数 -->
<property name="maxPoolSize" value="50"></property>
</bean>
<!-- 使用spring来管理mybatis -->
<!-- myBatista需要创建sessionFactory对象来调用mapper -->
<!--创建SqlSessionFactory,mybatis中的工厂函数对象 -->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 首先是连接数据库,上面数据源创建好后,这里注入,使用dataSource属性,引用用ref -->
<property name="dataSource" ref="datasource"></property>
<!-- 读取mapper映射文件 使用mapperLocations属性,可以使用目录文件通配符,可以同时读取多个mapper文件-->
<property name="mapperLocations" value="classpath:com/mapper/*.xml"></property>
<!-- 加载MyBatis配置文件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageInterceptor">
<property name="properties">
<!--使用下面的方式配置参数,一行配置一个 -->
<value>
helperDialect=mysql
</value>
</property>
</bean>
</array>
</property>
</bean>
<!-- 创建dao的impl实现类 ,进入MapperScannerConfigurer的class来创建-->
<!-- 如果使用了通用mapper,需要在该配置里把引用的第一个文件名org改成tk就可以了 -->
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- basePackage该标签就是自动去value值里面对应的包下面找接口文件,然后再自动关联mapper映射文件,自动生成接口的实现类-->
<!-- 可以在service中使用@AutoWired注解来引用dao层对象的实现类注入 -->
<property name="basePackage" value="com.dao"></property>
</bean>
<!-- 配置事务管理 ,创建事务管理类-->
<!-- 先导入DataSourceTransactionManager类 -->
<bean id="txmanager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!-- 如果要管理事务的提交,回滚等操作,需要数据库连接,那么就需要注入数据源对象 -->
<property name="dataSource" ref="datasource" ></property>
</bean>
<!-- 利用注解来实现事务管理类 ,先添加激活事务注解标签,注入对应的事务管理类-->
<tx:annotation-driven transaction-manager="txmanager"/>
<!-- 然后再java中需要进行事务管理的service类中的方法或类名上方添加注解@Transactional 来实现事务控制-->
- properties文件中的数据库连接信息
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/zhizhe?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.username=root
jdbc.password=admin
- 这里还有两个配置是spring中的配置信息就是扫描Ioc容器和激活注解的配置,因为是spring整合mybatis,这两段是放在spring配置文件当中的
<!-- 如果程序中使用了注解,注解本身并没有特别的功能 我们需要让IOC容器知道类中哪里使用了注解,
那么就去创建对应的bean context:component-scan作用用于扫描注解类 base-package代表注解类所在的包,
可以设置多个值,用逗号分隔,也可以使用通配符,也可以是使用父级包名 -->
<context:component-scan base-package="com.service"></context:component-scan>
<!-- 激活aop注解 -->
<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
2.Mybatis执行过程:
- SqlSession:作为MyBatis工作的主要顶层API,表示和数据库交互的会话,完成必要数据库增删改查功能
- Executor: MyBatis执行器,是MyBatis 调度的核心,负责SQL语句的生成和查询缓存的维护
- StatementHandler:封装了JDBC Statement操作,负责对JDBC statement 的操作,如设置参数、将Statement结果集转换成List集合。
- ParameterHandler:负责对用户传递的参数转换成JDBC Statement 所需要的参数,
- ResultSetHandler:负责将JDBC返回的ResultSet结果集对象转换成List类型的集合;
- TypeHandler:负责java数据类型和jdbc数据类型之间的映射和转换
- MappedStatement:MappedStatement维护了一条<select|update|delete|insert>节点的封装,
- SqlSource:负责根据用户传递的parameterObject,动态地生成SQL语句,将信息封装到BoundSql对象中,并返回
- BoundSql :表示动态生成的SQL语句以及相应的参数信息
- Configuration:MyBatis所有的配置信息都维持在Configuration对象之中。