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"/>