Spring3---spring 整合 mybatis 步骤

目录

1、导入 所需要的依赖

    1.1、spring的maven依赖

1.2、mybatis的maven依赖

 1.3、log4j和junit

2.配置mybatis文件 mybatis-config mapper.xml

3.建立 domain mapper service 写一个查询所有的接口

3.1、建立文件夹

3.2、建实体类、类、接口 

 3.3、示例:查询方法

 4.建立spring配置文件

 5、测试类

6、SqlSessionFactoryBean源码解析

7、MapperScannerConfigure源码解析

8、BasicDataSource源码解析


1、导入 所需要的依赖

    1.1、spring的maven依赖

<!-- Spring Core -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>5.3.9</version>
</dependency>

<!-- Spring Context -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.3.9</version>
</dependency>

<!-- Spring MVC -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.3.9</version>
</dependency>

<!-- Spring JDBC -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.3.9</version>
</dependency>

<!-- Spring ORM -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-orm</artifactId>
  <version>5.3.9</version>
</dependency>

<!-- Spring Test -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>5.3.9</version>
  <scope>test</scope>
</dependency>

1.2、mybatis的maven依赖

<!-- MyBatis Core -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.8</version>
</dependency>

<!-- MyBatis Spring Integration -->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>2.0.6</version>
</dependency>

<!-- 数据库驱动,根据实际使用的数据库选择对应的依赖 -->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>8.0.26</version>
</dependency>

 1.3、log4j和junit

<!-- log4j jar 包 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
<!-- 单元测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

2.配置mybatis文件 mybatis-config mapper.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>
        <setting name="logImpl" value="LOG4J"/>
        <setting name="cacheEnabled" value="true" />
    </settings>
    <!-- 类型别名 -->
    <typeAliases>
        <!-- name属性需要更改路径 -->
        <package name="com.cskt.domain"/>
    </typeAliases>
    <!-- 引入mapper文件 -->
    <mappers>
        <!-- resource属性需要更改路径 -->
        <mapper resource="mapper/SupplierMapper.xml"/>
    </mappers>
</configuration>

3.建立 domain mapper service 写一个查询所有的接口

3.1、建立文件夹

3.2、建实体类、类、接口 

 3.3、示例:查询方法

实体类

@Data
//供货商表
public class Supplier {
    private Integer id;             //供货商ID
    private String supCode;         //供货商编码
    private String supName;         //供货商名称
    private String supDesc;         //供货商描述
    private String supContact;      //联系人
    private String supPhone;        //联系电话
    private String Address;         //地址
    private String supFax;          //传真
    private Integer createdUserId; 	//创建者ID
    private Date createdTime; 		//创建时间
    private Integer updatedUserId; 	//更新者ID
    private Date updatedTime;   	//更新时间
}
SupplierMapper接口
@Repository("supplierMapper")
public interface SupplierMapper {
    /**
     * 查询方法
     * @return
     */
    List<Supplier> getSelectList();
}
SupplierMapper.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.cskt.mapper.SupplierMapper">

    <select id="getSelectList" resultType="Supplier">
        select * from t_supplier
    </select>

</mapper>
SupplierService接口
public interface SupplierService {
    /**
     * 查询方法
     * @return
     */
    List<Supplier> getSelectList();
}

 SupplierServiceImpl类

@Service("supplierService")
public class SupplierServiceImpl implements SupplierService{
    @Autowired
    @Qualifier("supplierMapper")
    private SupplierMapper supplierMapper;

    @Override
    public List<Supplier> getSelectList() {
        return supplierMapper.getSelectList();
    }
}

 4.建立spring配置文件

 database.properties

#驱动全限定类名
driver=com.mysql.cj.jdbc.Driver
#数据库连接地址
url=jdbc:mysql://127.0.0.1:3306/cvs_db?serverTimezone=GMT-8&useUnicode=true&character=utf-8
#数据库用户名
jdbc.username=root
#数据库密码
jdbc.password=root

log4j.properties 

# Set root category priority to INFO and its only appender to CONSOLE.
log4j.rootLogger=debug, CONSOLE, LOGFILE
# ??????logger?????Logger?appender??????true???
lo4j.log4j.additivity.org.apache=false  

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss,SSS]} [%t] [%c:%L] [%p] - %m%n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=log/logs.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{[yyyy-MM-dd HH:mm:ss,SSS]} [%t] [%c:%L] [%p] - %m%n

#   ???logger???????????????????????appender?
log4j.logger.com.qf.dao=debug,CONSOLE

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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:p="http://www.springframework.org/schema/p"
       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
                            http://www.springframework.org/schema/aop
                            http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 引入properties文件 -->
    <context:property-placeholder location="database.properties"/>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!-- 创建sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="mybatis-config.xml"/>
    </bean>

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.cskt.mapper"/>
    </bean>

    <!-- 需要更改自己的包名 -->
    <context:component-scan base-package="com.cskt.mapper,com.cskt.service"/>

</beans>

 5、测试类

public class SupplierMapperTest {

    @Test
    public void getSelectList() {
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        SupplierService supplierService=(SupplierService) context.getBean("supplierService");
        List<Supplier> suppliers=supplierService.getSelectList();
        for (Supplier s:suppliers) {
            System.out.println(s.toString());
        }
    }
}

测试结果:

6、SqlSessionFactoryBean源码解析

SqlSessionFactoryBean是MyBatis-Spring库中的一个FactoryBean,用于创建和配置SqlSessionFactory

继承关系:SqlSessionFactoryBean继承自org.springframework.beans.factory.config.AbstractFactoryBean类

创建SqlSessionFactory:在SqlSessionFactoryBean的createInstance方法中,会根据配置的dataSource、configLocation等属性,创建一个SqlSessionFactory实例。它会加载MyBatis的配置文件,并配置数据源、事务管理器等

Mapper接口扫描和注册:SqlSessionFactoryBean还会根据mapperLocations属性,自动扫描和注册Mapper接口。它会创建一个MapperScannerConfigurer实例,用于扫描和注册Mapper接口的Bean定义

配置选项:SqlSessionFactoryBean提供了一些配置选项,如dataSource用于指定数据源,configLocation用于指定MyBatis的配置文件位置,mapperLocations用于指定Mapper接口和对应的Mapper XML文件的位置等

属性:

  1. dataSource:数据源,用于指定连接数据库的数据源

  2. configLocation:MyBatis的配置文件位置,指定MyBatis的配置信息

  3. mapperLocations:Mapper接口和XML文件的位置,用于指定Mapper接口和对应的Mapper XML文件的位置

  4. typeAliasesPackage:实体类别名的扫描路径,用于指定实体类的包路径

  5. typeHandlersPackage:类型处理器的扫描路径,用于指定类型处理器接口的包路径

  6. plugins:插件列表,用于指定需要使用的MyBatis插件

  7. objectMapper:ObjectMapper对象,用于自定义MyBatis的ObjectFactory

  8. configuration:MyBatis的Configuration对象,用于自定义MyBatis的配置

  9. environment:MyBatis的环境配置,用于指定MyBatis的运行环境

  10. databaseIdProvider:数据库厂商标识提供者,用于根据数据库类型选择对应的SQL语句

  11. typeAliasesSuperType:实体类别名的父类类型,用于指定需要注册别名的实体类的父类类型

7、MapperScannerConfigure源码解析

MapperScannerConfigurer是MyBatis-Spring库中的一个配置类,用于自动扫描和注册Mapper接口

继承关系:MapperScannerConfigurer继承自org.springframework.beans.factory.config.BeanDefinitionRegistryPostProcessor接口

扫描和注册过程:在MapperScannerConfigurer的postProcessBeanDefinitionRegistry方法中,会进行Mapper接口的扫描和注册。它使用ClassPathMapperScanner进行包扫描,找到标记了指定注解或实现了指定接口的Mapper接口,并将其注册为Spring的Bean

Bean的定义:MapperScannerConfigurer会在BeanDefinitionRegistry中注册Mapper接口的Bean定义,使其可以被Spring容器管理

配置选项:MapperScannerConfigurer提供了一些配置选项,如basePackage用于指定要扫描的包路径,annotationClass用于指定要扫描的注解类型,markerInterface用于指定要扫描的接口类型等

其他功能:MapperScannerConfigurer还提供了一些其他功能,如自定义MapperFactoryBean的实现类、设置是否处理属性占位符、设置Bean名称生成器等

属性:

  1. basePackage:要扫描的Mapper接口所在的包路径

  2. addToConfig:是否将扫描到的Mapper接口添加到MyBatis的配置中,默认为true

  3. lazyInitialization:是否启用延迟初始化,默认为null,表示使用全局配置

  4. sqlSessionFactory:要使用的SqlSessionFactory实例

  5. sqlSessionTemplate:要使用的SqlSessionTemplate实例

  6. sqlSessionFactoryBeanName:要使用的SqlSessionFactory的Bean名称

  7. sqlSessionTemplateBeanName:要使用的SqlSessionTemplate的Bean名称

  8. annotationClass:要扫描的Mapper接口上的注解类型

  9. markerInterface:要扫描的Mapper接口所实现的标记接口

  10. mapperFactoryBeanClass:自定义MapperFactoryBean的实现类

  11. applicationContext:Spring应用上下文

  12. beanName:MapperScannerConfigurer的Bean名称

  13. processPropertyPlaceHolders:是否处理属性占位符,默认为false

  14. nameGenerator:Bean名称生成器

8、BasicDataSource源码解析

BasicDataSource是Apache Commons DBCP库中实现的一个数据库连接池

继承关系:BasicDataSource继承自org.apache.commons.dbcp.BasicDataSource

连接的获取和释放:BasicDataSource提供了getConnection方法用于获取数据库连接,以及close和closeQuietly方法用于释放连接

连接的创建和关闭:BasicDataSource通过内部的createDataSource方法创建数据库连接,通过内部的close方法关闭数据库连接

连接的验证和检测:BasicDataSource提供了validateConnection和testOnBorrow等方法,用于验证连接的有效性和连接的周期性检测

连接池的管理和维护:BasicDataSource通过一些内部的方法和线程池来管理和维护连接池,如创建和销毁连接、回收和清理空闲连接等

连接的配置和属性设置:BasicDataSource提供了一些方法,如setMaxTotal、setMaxIdle、setMinIdle等,用于动态配置和设置连接池的属性

属性:

  1. driverClassName:要使用的JDBC驱动类的完整类名。

  2. url:数据库的连接URL

  3. username:连接数据库所需的用户名

  4. password:连接数据库所需的密码

  5. initialSize:池中初始化的连接数

  6. maxTotal:池中允许的最大活动连接数

  7. maxIdle:池中允许的最大空闲连接数

  8. minIdle:池中保持的最小空闲连接数

  9. maxWaitMillis:请求连接时最大等待时间(毫秒)

  10. validationQuery:用于验证连接的SQL查询语句

  11. testOnBorrow:从池中借用连接时是否进行连接有效性验证

  12. testWhileIdle:连接空闲时是否进行连接有效性验证

  13. timeBetweenEvictionRunsMillis:空闲连接的检测周期(毫秒)

  14. minEvictableIdleTimeMillis:连接空闲的最小时间(毫秒),超过该时间将被驱逐

  15. removeAbandonedOnMaintenance:是否在维护时清理被遗弃的连接

  16. removeAbandonedTimeout:被遗弃的连接的超时时间(秒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值