spring框架结合mybatis(三)【SSM框架】

spring思维导图
spring介绍和ioc控制反转(一)
spring框架aop详细(二)
spring框架结合mybatis(三)
spring框架事务处理(四)

四.mybatis框架和spring集成在一起

1.mybatis使用

用的技术是:ioc 。
为什么ioc能把mybatis和spring集成在一起,像一个框架, 是因为ioc能创建对象。
可以把mybatis框架中的对象交给spring统一创建, 开发人员从spring中获取对象。
开发人员就不用同时面对两个或多个框架了, 就面对一个spring

1.1 mybatis使用步骤,对象

  1. 定义dao接口 ,StudentDao
  2. 定义mapper文件 StudentDao.xml
  3. 定义mybatis的主配置文件 mybatis.xml
  4. 创建dao的代理对象, StudentDao dao = SqlSession.getMapper(StudentDao.class);

List students = dao.selectStudents();

1.2 要使用dao对象,需要使用getMapper()方法,

怎么能使用getMapper()方法,需要哪些条件

  1. 获取SqlSession对象, 需要使用SqlSessionFactory的openSession()方法。
  2. 创建SqlSessionFactory对象。 通过读取mybatis的主配置文件,能创建SqlSessionFactory对象

需要SqlSessionFactory对象, 使用Factory能获取SqlSession ,有了SqlSession就能有dao , 目的就是获取dao对象
Factory创建需要读取主配置文件

我们会使用独立的连接池类替换mybatis默认自己带的, 把连接池类也交给spring创建。

主配置文件

  1. 数据库信息
 <environment id="mydev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库的驱动类名-->
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <!--连接数据库的url字符串-->
                <property name="url" value="jdbc:mysql://localhost:3306/springdb"/>
                <!--访问数据库的用户名-->
                <property name="username" value="root"/>
                <!--密码-->
                <property name="password" value="123456"/>
            </dataSource>
  1. mapper文件的位置
 <mappers>
        <mapper resource="com/tx/dao/StudentDao.xml"/>
 </mappers>

通过以上的说明,我们需要让spring创建以下对象

  1. 独立的连接池类的对象, 使用阿里的druid连接池
  2. SqlSessionFactory对象
  3. 创建出dao对象

2.spring和mybatis的集成

步骤

  1. 新建maven项目
  2. 加入maven的依赖
    (1)spring依赖
    (2)mybatis依赖
    (3)mysql驱动
    (4)spring的事务的依赖
    (5)mybatis和spring集成的依赖: mybatis官方体用的,用来在spring项目中创建mybatis
    的SqlSesissonFactory,dao对象的
	pom.xml
	<?xml version="1.0" encoding="UTF-8"?>
	
	<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	  <modelVersion>4.0.0</modelVersion>
	
	  <groupId>com.tx</groupId>
	  <artifactId>ch07-spring-mybatis</artifactId>
	  <version>1.0-SNAPSHOT</version>
	
	  <properties>
	    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	    <maven.compiler.source>1.8</maven.compiler.source>
	    <maven.compiler.target>1.8</maven.compiler.target>
	  </properties>
	
	  <dependencies>
	    <!--单元测试-->
	    <dependency>
	      <groupId>junit</groupId>
	      <artifactId>junit</artifactId>
	      <version>4.11</version>
	      <scope>test</scope>
	    </dependency>
	    <!--spring核心ioc-->
	    <dependency>
	      <groupId>org.springframework</groupId>
	      <artifactId>spring-context</artifactId>
	      <version>5.2.5.RELEASE</version>
	    </dependency>
	    <!--做spring事务用到的-->
	    <dependency>
	      <groupId>org.springframework</groupId>
	      <artifactId>spring-tx</artifactId>
	      <version>5.2.5.RELEASE</version>
	    </dependency>
	    <dependency>
	      <groupId>org.springframework</groupId>
	      <artifactId>spring-jdbc</artifactId>
	      <version>5.2.5.RELEASE</version>
	    </dependency>
	    <!--mybatis依赖-->
	    <dependency>
	      <groupId>org.mybatis</groupId>
	      <artifactId>mybatis</artifactId>
	      <version>3.5.1</version>
	    </dependency>
	    <!--mybatis和spring集成的依赖-->
	    <dependency>
	      <groupId>org.mybatis</groupId>
	      <artifactId>mybatis-spring</artifactId>
	      <version>1.3.1</version>
	    </dependency>
	    <!--mysql驱动-->
	    <dependency>
	      <groupId>mysql</groupId>
	      <artifactId>mysql-connector-java</artifactId>
	      <version>5.1.9</version>
	    </dependency>
	    <!--阿里公司的数据库连接池-->
	    <dependency>
	      <groupId>com.alibaba</groupId>
	      <artifactId>druid</artifactId>
	      <version>1.1.12</version>
	    </dependency>
	  </dependencies>
	
	  <build>
	    <!--目的是把src/main/java目录中的xml文件包含到输出结果中。输出到classes目录中-->
	    <resources>
	      <resource>
	        <directory>src/main/java</directory><!--所在的目录-->
	        <includes><!--包括目录下的.properties,.xml 文件都会扫描到-->
	          <include>**/*.properties</include>
	          <include>**/*.xml</include>
	        </includes>
	        <filtering>false</filtering>
	      </resource>
	    </resources>
	    <!--指定jdk的版本-->
	    <plugins>
	      <plugin>
	        <artifactId>maven-compiler-plugin</artifactId>
	        <version>3.1</version>
	        <configuration>
	          <source>1.8</source>
	          <target>1.8</target>
	        </configuration>
	      </plugin>
	    </plugins>
	  </build>
	</project>
  1. 创建实体类
  2. 创建dao接口和mapper文件
  3. 创建mybatis主配置文件
    mybatis.xml
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <!--settings:控制mybatis全局行为-->
        <settings>
            <!--设置mybatis输出日志-->
            <setting name="logImpl" value="STDOUT_LOGGING"/>
        </settings>
        <!--设置别名-->
        <typeAliases>
            <!--name:实体类所在的包名
                表示com.bjpowernode.domain包中的列名就是别名
                你可以使用Student表示com.bjpowenrode.domain.Student
            -->
            <package name="com.tx.domain"/>
        </typeAliases>
        <!-- sql mapper(sql映射文件)的位置-->
        <mappers>
            <!--name:是包名, 这个包中的所有mapper.xml一次都能加载-->
            <package name="com.tx.dao"/>
        </mappers>
    </configuration>
    
  4. 创建Service接口和实现类,属性是dao。
  5. 创建spring的配置文件:声明mybatis的对象交给spring创建
    1)数据源DataSource
    2)SqlSessionFactory
    3)Dao对象
    4)声明自定义的service
    applicationContext.xml
    	<?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans.xsd 
           http://www.springframework.org/schema/context 
           https://www.springframework.org/schema/context/spring-context.xsd">
        <!--
           把数据库的配置信息,写在一个独立的文件,编译修改数据库的配置内容
           spring知道jdbc.properties文件的位置
        -->
        <context:property-placeholder location="classpath:jdbc.properties" />
    
       (1)<!--声明数据源DataSource, 作用是连接数据库的-->
        <bean id="myDataSource" class="com.alibaba.druid.pool.DruidDataSource"
              init-method="init" destroy-method="close">
            <!--set注入给DruidDataSource提供连接数据库信息 -->
            <!--    使用属性配置文件中的数据,语法 ${key} -->
            <property name="url" value="${jdbc.url}" /><!--setUrl()-->
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.passwd}" />
            <property name="maxActive" value="${jdbc.max}" />
        </bean>
    
       (2)<!--声明的是mybatis中提供的SqlSessionFactoryBean类,这个类内部创建SqlSessionFactory的
            SqlSessionFactory  sqlSessionFactory = new ..
        -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!--set注入,把数据库连接池付给了dataSource属性-->
            <property name="dataSource" ref="myDataSource" />
            <!--mybatis主配置文件的位置
               configLocation属性是Resource类型,读取配置文件
               它的赋值,使用value,指定文件的路径,使用classpath:表示文件的位置
            -->
            <property name="configLocation" value="classpath:mybatis.xml" />
        </bean>
    
        (3)<!--创建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.tx.dao"/>
        </bean>
    
        (4)<!--声明service,将studentDao代理类,使用set注入-->
        <bean id="studentService" class="com.tx.service.impl.StudentServiceImpl">
            <property name="studentDao" ref="studentDao" />
        </bean>
    </beans>
    
  6. 创建测试类,获取Service对象,通过service调用dao完成数据库的访问
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值