Spring和Mybatis整合的过程(详细的很)

一、准备工作
1. IDEA 2019.3,创建一个maven项目,目录结构如下:

在这里插入图片描述
在这里插入图片描述

2.pom文件依赖
<dependencies>
            <!-- Spring依赖1:spring-core -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.2.1.RELEASE</version>
            </dependency>

            <!-- Spring依赖2:spring-beans -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>5.2.1.RELEASE</version>
            </dependency>

            <!-- Spring依赖3:spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.2.1.RELEASE</version>
            </dependency>

            <!--mybatis整合spring-->
            <!--mybatis依赖-->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.1</version>
            </dependency>

            <!--mysql依赖,不加的话会报错驱动异常-->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.15</version>
            </dependency>

            <!--事务的依赖,如果是更新数据库表操作是涉及到它的-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>4.3.2.RELEASE</version>
            </dependency>
            <!--mybatis与spring整合的依赖依赖  -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>2.0.1</version>
            </dependency>

            <!-- Spring依赖4:spring-jdbc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>5.2.1.RELEASE</version>
            </dependency>
    </dependencies>
3.其它一些配置文件信息db.properties、mybatis-config.xml、springAndMybatis.xml
//db.properties这是数据库连接的一些信息
#配置连接数据的参数信息,注意这是版本高的mysql有的驱动的写法,加上cj
driver_class=com.mysql.cj.jdbc.Driver
jdbc_url=jdbc:mysql://localhost/spring_task_test?useSSL=false&serverTimezone=GMT%2B8
db_username=自己的数据库用户名
db_password=自己数据库的登录密码
//mybatis-config.xml这是mybatis的配置文件
<?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>
	<!-- 加载外部的properties文件 -->
	<properties resource="db.properties" />

	<!-- MyBatis框架运行规则配置     -->
	<settings>
		<!-- 开启日志
		<setting name="logImpl" value="STDOUT_LOGGING" />
		-->
		<!-- 整体开启mybatis的二级缓存-->
		<setting name="cacheEnabled" value="true" />

	</settings>


	<!-- 设置别名(为实体类设置别名) Aliases单词是别名的意思-->
	<typeAliases>
		<!-- 为每一个实体设置别名 -->
		<!-- 设置实体类包,为该package中的每个实体类自动设置别名,别名就是实体类名字 -->
		<package name="com.my.entity" />
	</typeAliases>

	<!-- 环境列表 -->
	<!-- default:设置当前使用的环境environment id -->
	<environments default="development">
		<!-- 环境1(开发) -->
		<environment id="development">
			<!-- 事务管理器:采用JDBC事务 -->
			<transactionManager type="JDBC" />

			<!-- 数据源(数据库连接池) -->
			<!-- type设置为pooled,启动数据库连接池 -->
			<dataSource type="POOLED">
				<!-- 数据库连接参数 -->
				<property name="driver" value="${driver_class}" />
				<property name="url" value="${jdbc_url}" />
				<property name="username" value="${db_username}" />
				<property name="password" value="${db_password}" />
			</dataSource>
		</environment>
	</environments>

	<!-- 映射器列表 ,也就是将Mapper接口文件与Mapper.xml文件对应起来的-->
	<mappers>
		<!-- 自动访问此包下面的所有映射文件.xml文件 -->
		<package name="com.my.dao.mapper" />
	</mappers>
</configuration>
//springAndMybatis.xml关于一些spring和Mybatis的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--指的是扫描com.my这个包下面的所有注解,我们这里的话是使用一个配置类完成注解的扫描
    <context:component-scan base-package="com.my"/>
    -->
    <!--1.准备数据源,因为SQLSessionFactory在被创建时是SQLsessionfactoryBuilder创建的,
    而它需要读取配置文件(包含数据库的连接信息),和读取xxxmapper.xml文件
    -->
    <!--读取外部的db.properties文件
    location表示的是数据库连接信息的properties文件的位置
    -->
    <context:property-placeholder location="db.properties" />
    <bean id="dataSourceBean" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <!--方式一
         <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
         <property name="url" value="jdbc:mysql://localhost/web_epidemic_prevention_materials_record_system?useSSL=false&amp;serverTimezone=GMT%2B8"/>
         <prope类rty name="username" value="root"/>
         <property name="password" value="xxxxx"/>
         -->
        <!--方式二,使用${里面是properties文件里面的键的名字}-->
        <property name="driverClassName" value="${driver_class}"/>
        <property name="url" value="${jdbc_url}"/>
        <property name="username" value="${db_username}"/>
        <property name="password" value="${db_password}"/>
    </bean>
    <!--2.准备SQLSessionFactory
    因为要用SQLSessionFactory创建SqlSession对象,用SqlSession对象调用方法UserMapper mapper=SqlSession.getMapper("UserMapper.class");
    它实际上是一个接口的代理对象,(充当接口的实现类),所以我们要让spring容器来管理这个bean
    -->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--数据源,这个是必须的,通过数据源相当于获取数据库配置信息和Mapper信息-->
        <property name="dataSource" ref="dataSourceBean"/>
        <!--
        方式一:
        数据源
       <property name="dataSource" ref="dataSourceBean"/>
       注入实体类所在包的别名
       <property name="typeAliasesPackage" value="com.my.entity"/>
       注入mapper映射文件所在的路径,类路径下的所有mapper文件,匹配XXXMapper.xml文件
       <property name="mapperLocations" value="classpath*:com/my/dao/mapper/*Mapper.xml"/>
       -->
        <!--方式二-->
        <!--1.读取mybatis.xml配置文件-->
        <property name="configLocation" value="mybatis-config.xml"/>
    </bean>
    <!--Mapper扫描器-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入当前名称的SQLSessionFactory的bean名称-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/>
        <property name="basePackage" value="com.my.dao.mapper"/>
    </bean>
</beans>
4.SystemConfig类、StudentMapperImpl类、IStudentMapper接口、
IStudentMapper.xml文件、Student实体类、Test1类的代码如下:

SystemConfig类

package com.my.config;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;
//这是一个配置类,用来为我们系统提供一些配置信息,可以不写任何的逻辑;当我们在main中加载Spring的容器时,参数传入此配置类信息,
//容器就会执行这些注解,来做对应的功能
@Configuration//表明这是一个配置类
@ImportResource("springAndMybatis.xml")//导入Spring的配置文件
@ComponentScan(basePackages = "com.my")//注解扫描器,当我们在扫描此包下的所有类时,会自动的扫描所有加注解的类
public class SystemConfig {
}

StudentMapperImpl类

package com.my.dao.impl;
import com.my.dao.mapper.IStudentMapper;
import com.my.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class StudentMapperImpl implements IStudentMapper {

    @Autowired
    //注入接口属性
    private IStudentMapper mapper;
    @Override
    public List<Student> listStudent() {
        return mapper.listStudent();
    }
}

IStudentMapper接口

package com.my.dao.mapper;

import com.my.entity.Student;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;

@Mapper
@Repository
//学生信息的接口
public interface IStudentMapper {
    //查询所有学生的信息的方法
    List<Student> listStudent();
}

IStudentMapper.xml文件


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.my.dao.mapper.IStudentMapper">
    <!-- 在这个映射文件中局部开启 ,第二个参数表示的是隔100秒进数据库中进行新数据的刷新 ,开其缓存后访问更快了-->
    <cache eviction="LRU" flushInterval="100000" readOnly="true"
           size="1024">
    </cache>

    <!--查询所有的学生的信息
    这个id是Mapper接口中的查询所有学生信息的方法的名字,返回类型是每一个Student类型
    -->
    <select id="listStudent" resultType="Student">
        SELECT
             id,
             name,
             sex
        FROM student
    </select>

</mapper>

Student实体类

package com.my.entity;
//学生的实体类
public class Student {

    //学生的学号id
    private String id;
    //学生的姓名
    private String name;
    //学生的性别
    private String sex;

    //生成对应的set和get方法

    public void setId(String id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public String getSex() {
        return sex;
    }
    //重写toString方法
    @Override
    public String toString() {
        return "Student{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

Test1类


package com.my.test;

import com.my.config.SystemConfig;
import com.my.dao.impl.StudentMapperImpl;
import com.my.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.util.List;

//测试Spring与Mybatis的整合
public class Test1 {
    public static void main(String[] args) {
        //加载Spring容器,采此构造的参数是配置类SystemConfig的字节码对象,当我们在启动main线程时会加载配置类的信息
        ApplicationContext applicationContext=new AnnotationConfigApplicationContext(SystemConfig.class);
        StudentMapperImpl studentInfo=applicationContext.getBean(StudentMapperImpl.class);//参数是对应实现类
        //的字节码
        List<Student> studentList= studentInfo.listStudent();
        //输出学生信息
        for(Student student:studentList){
            System.out.println("学号:"+student.getId()+"--"+"姓名:"+student.getName()+"--"+"性别:"+student.getSex());
        }
    }
}

运行结果:
在这里插入图片描述
数据库信息:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值