欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-18 17:35:09
一、准备工作IDEA 2019.3,创建一个maven项目,目录结构如下:...

一、准备工作

1. IDEA 2019.3,创建一个maven项目,目录结构如下:

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

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());
        }
    }
}

运行结果:
Spring和Mybatis整合的过程(详细的很)
数据库信息:
Spring和Mybatis整合的过程(详细的很)

本文地址:https://blog.csdn.net/qq_41713361/article/details/109604706