目录
2.配置mybatis文件 mybatis-config mapper.xml
3.建立 domain mapper service 写一个查询所有的接口
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文件的位置等
属性:
-
dataSource:数据源,用于指定连接数据库的数据源
-
configLocation:MyBatis的配置文件位置,指定MyBatis的配置信息
-
mapperLocations:Mapper接口和XML文件的位置,用于指定Mapper接口和对应的Mapper XML文件的位置
-
typeAliasesPackage:实体类别名的扫描路径,用于指定实体类的包路径
-
typeHandlersPackage:类型处理器的扫描路径,用于指定类型处理器接口的包路径
-
plugins:插件列表,用于指定需要使用的MyBatis插件
-
objectMapper:ObjectMapper对象,用于自定义MyBatis的ObjectFactory
-
configuration:MyBatis的Configuration对象,用于自定义MyBatis的配置
-
environment:MyBatis的环境配置,用于指定MyBatis的运行环境
-
databaseIdProvider:数据库厂商标识提供者,用于根据数据库类型选择对应的SQL语句
-
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名称生成器等
属性:
-
basePackage:要扫描的Mapper接口所在的包路径
-
addToConfig:是否将扫描到的Mapper接口添加到MyBatis的配置中,默认为true
-
lazyInitialization:是否启用延迟初始化,默认为null,表示使用全局配置
-
sqlSessionFactory:要使用的SqlSessionFactory实例
-
sqlSessionTemplate:要使用的SqlSessionTemplate实例
-
sqlSessionFactoryBeanName:要使用的SqlSessionFactory的Bean名称
-
sqlSessionTemplateBeanName:要使用的SqlSessionTemplate的Bean名称
-
annotationClass:要扫描的Mapper接口上的注解类型
-
markerInterface:要扫描的Mapper接口所实现的标记接口
-
mapperFactoryBeanClass:自定义MapperFactoryBean的实现类
-
applicationContext:Spring应用上下文
-
beanName:MapperScannerConfigurer的Bean名称
-
processPropertyPlaceHolders:是否处理属性占位符,默认为false
-
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等,用于动态配置和设置连接池的属性
属性:
-
driverClassName:要使用的JDBC驱动类的完整类名。
-
url:数据库的连接URL
-
username:连接数据库所需的用户名
-
password:连接数据库所需的密码
-
initialSize:池中初始化的连接数
-
maxTotal:池中允许的最大活动连接数
-
maxIdle:池中允许的最大空闲连接数
-
minIdle:池中保持的最小空闲连接数
-
maxWaitMillis:请求连接时最大等待时间(毫秒)
-
validationQuery:用于验证连接的SQL查询语句
-
testOnBorrow:从池中借用连接时是否进行连接有效性验证
-
testWhileIdle:连接空闲时是否进行连接有效性验证
-
timeBetweenEvictionRunsMillis:空闲连接的检测周期(毫秒)
-
minEvictableIdleTimeMillis:连接空闲的最小时间(毫秒),超过该时间将被驱逐
-
removeAbandonedOnMaintenance:是否在维护时清理被遗弃的连接
-
removeAbandonedTimeout:被遗弃的连接的超时时间(秒)