mybatis原理分析学习记录

MyBatis 是支持定制化 SQL、存储过程以及高级映射的持久层框架,其主要就完成2件事情:

  • 封装JDBC操作

  • 利用反射打通Java类与SQL语句之间的相互转换

MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便,所以方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。

MyBatis的配置

  1 (1)整合思路:把MyBatis框架中使用所涉及的核心组件配置到Spring容器中
  2 (2)步骤:
  3 -->1.添加pom依赖,mybatis-spring,spring-tx,spring-jdbc
  4 -->2.创建实体类(entity)
  5 -->3.创建数据访问接口(dao层的接口)
  6 -->4.配置SQL映射文件(resource下的mapper.xml文件)
  7 -->5.配置mybatis的配置文件(resource下的spring下的mybatis-config.xml)
  8 -->6.凡是使用了注解,都需要配置扫描注解定义的业务Bean: <context:component-scan base-package="com.one.ssm.dao"/>
  9 和<context:annotation-config/>(用于激活那些已经在spring容器里注册过的bean)
 10 
 11 :<?xml version="1.0" encoding="UTF-8" ?>
 12 <!DOCTYPE configuration
 13         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 14         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 15 <configuration>
 16 <!--配置全局属性-->
 17 <settings>
 18     <!--使用jdbc的getGeneratedKeys获取数据库自增主键值-->
 19     <setting name="useGeneratedKeys" value="true"/>
 20     <!--使用列别名替换列名,默认true, eg:select name as title from table-->
 21     <setting name="useColumnLabel" value="true"/>
 22     <!--开启驼峰命名转换 table(create_time)-->entity(createTime)
 23     <setting name="mapUnderscoreToCamelCase" value="true"/>
 24 </settings>
 25 </configuration>
 26 (3)实现整合(spring-dao.xml操作)
 27 
 28 -->1.配置dataSource数据源
 29 jdbc.properties内容:
 30     jdbc.driver=com.mysql.jdbc.Driver
 31     jdbc.url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=UTF-8
 32     jdbc.username=root
 33     jdbc.password=123456
 34 
 35 <!--properties文件配置数据源-->
 36 <context:property-placeholder location="classpath:spring/jdbc.properties"/>
 37     <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
 38         <!--配置连接池属性-->
 39         <property name="driverClassName" value="${jdbc.driver}"/>
 40         <property name="url" value="${jdbc.url}"/>
 41         <property name="username" value="${jdbc.username}"/>
 42         <property name="password" value="${jdbc.password}"/>
 43     </bean>
 44 
 45 -->2.配置SqlSessionFactoryBean
 46    <!--SqlSession 包含了所有执行数据库SQL语句的方法。能够直接地通过SqlSession实例执行映射SQL-->
 47     <!--缺少sqlSessionFactory:No bean named 'sqlSessionFactory' available    完成对配置文件的读取-->
 48     <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 49         <!--注入数据库连接池--><!--否则会出现java.lang.IllegalArgumentException: Property 'dataSource' is required-->
 50         <property name="dataSource" ref="dataSource"/>
 51 
 52         <!--扫描entity包,使用别名,设置这个以后再Mapper配置文件中在parameterType
 53         的值就不用写成全路径名了-->
 54         <property name="typeAliasesPackage" value="com.one.ssm.entity"/>
 55 
 56         <!--扫描mapper需要的xml文件-->
 57         <property name="mapperLocations" value="classpath:mapper/*.xml"/>
 58     </bean>
 59 
 60     <!-- 配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 -->
 61     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 62         <!-- 注入sqlSessionFactory -->
 63         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
 64         <!-- 给出需要扫描Dao接口包 -->
 65         <property name="basePackage" value="com.one.ssm.dao"/>
 66     </bean>
 67 
 68 (4)注入映射器的两种方式:使用了映射器注入就可以不用写dao层的接口的实现方法
 69 
 70 -->1.配置MapperFactoryBean生成映射器并注入到业务组件
 71  <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
 72         <!--mapperInterface属性指定映射器,只能是某一个接口类型-->
 73         <property name="mapperInterface" value="com.one.ssm.dao.UserDao"/>
 74         <!-- 注入sqlSessionFactory -->
 75         <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
 76     </bean>
 77 
 78 -->2.配置MapperScannerConfiger生成映射器并注入到业务组件:优先使用MapperScannerConfiger,可以批量生成映射器的实现
 79 
 80 <!--mybatis-spring提供了MapperScannerConfigurer,
 81     可以扫描指定包中的接口并将它们直接注册为MapperFactoryBean,为了简化MapperFactoryBean映射器太多而导致多出的配置项-->
 82  <!--mybatis-spring提供了MapperScannerConfigurer,可以扫描指定包中的接口并将它们直接注册为MapperFactoryBean-->
 83     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 84         <!-- 注入sqlSessionFactory -->
 85         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
 86         <!-- 给出需要扫描Dao接口包 -->
 87         <property name="basePackage" value="com.one.ssm.dao"/>
 88     </bean>
 89 
 90 (5)添加声明式事务(spring-service.xml操作)
 91 -->使用xml配置方法配置声明式事务
 92  <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
 93     <property name="url" value="${jdbc.url}" />
 94     <property name="username" value="${jdbc.username}" />
 95     <property name="password" value="${jdbc.password}" />
 96     <property name="driverClassName" value="${jdbc.driver}" />
 97     </bean>
 98     <!--配置事务(事务就是对一系列的数据库操作进行统一的提交或回滚操作)管理器-->
 99 <bean id="transactionManager"
100           class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
101         <property name="dataSource" ref="dataSource"/>
102     </bean>
103 -->使用注解添加声明式事务
104  <!--声明式事务注解的添加方式-->
105     <tx:annotation-driven transaction-manager="transactionManager"/>
spring 整合mybatis配置文件

猜你喜欢

转载自www.cnblogs.com/zxh-xy/p/10630175.html