半个自学笔记,结合代码理解。
一. 环境搭建以及工具介绍
idea:2023.2.3
jar包:展示如下。
<groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.9</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.29</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.29</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.15</version> </dependency>
二. 开始集成
步骤如下:
1) jar包导入:
MyBatis相关jar
jdk.jar-------JDBC相关接口
mysql-conector-java.jar-----JDBC相关接口实现类
mybatis.jar
mybatis-spring.jar
Spring相关jar
spring-context.jar
spring-jdbc.jar(DaoSupport接口)
辅助jar:
来自于阿里巴巴公司公司Durid.jar
2) 配置文件:
Spring核心配置文件
MyBatis核心配置文件
Sql映射文件
3)相关java类与接口
描述Dept表特征实体类
DeptDao接口
首先,maven工程创建完成。quickstart模板
在pom文件中导入相关jar包。
然后书写两个核心配置文件:mybatis核心配置文件和spring核心配置文件。
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> <!--变化: (1)小服务:实体类别名映射服务没有啦,在spring核心配置文件中索要 (2)设置SqlSession的四要素没有啦。我们要使用Druid数据库连接池代替 (3)原有的SQL语句映射文件交由spring核心映射文件索要 --> <settings> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> </configuration>
Spring核心配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" 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"> <!-- 第一步:要求Spring容器对象创建Druid dataSources对象 由它来负责connection对象创建以及管理 (tip:原来这一步是写在mybatis核心配置文件中,现在写在spring配置文件中) --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/myTest"/> <property name="username" value="root"/> <property name="password" value="0323"/> </bean> <!-- 第二步:要求spring容器对象创建SqlSessionFactoryBean这个对象,用于完成创建 初始化SqlSessionFactory对象并将其存放其中 --> <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <!--提供当前工程中mybatis配置文件在工程编译路径下的位置--> <!-- InputStream in = Resources.getStreamAsValue("mybatis.xml");按理说要用到ref,但 实际上使用这个方法来获取mybatis核心配置文件,所以value --> <property name="configLocation" value="classpath:mybatis.xml"/> <!--使用上方创建的DruidDataSources替换掉SqlSessionFactory内置的数据库连接池。 tip:原数据库连接池的属性名就i是dataSources,用ref实现--> <property name="dataSource" ref="dataSource"/> <!--申请实体类别名映射服务,自动为生成后的entity实体类赋一个名称,一般是首字母小写的形式--> <property name="typeAliasesPackage" value="org.example.entity"/> </bean> <!-- 第三步:要求Spring容器对象创建MapperScannerConfigure对象 这个对象最终完成Dao代理对象创建并将Dao代理对象存储在Spring容器对象中 --> <bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!--SqlSessionFactoryBean factoryBean = spring.getBean("sqlSessionFactoryBean")--> <!--sqlSessionFactory factory = factoryBean.getSqlSessionFactory()--> <!--SqlSession sc = factory.openSession()--> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"/> <!--要求SqlSession对象为指定包下的所有Dao接口申请Dao代理对象--> <property name="basePackage" value="org.example.dao"/> </bean> </beans>
由于使用的是dao代理设计服务,因此此时的sql映射文件要与dao接口置于同一个包下
dao接口与mapper映射文件的配置规则:
1.dao接口与映射文件应该置于同一包下
2.dao接口与映射文件必须同名
3.dao接口中的方法名称必须与映射文件中dml语句的id一致
4.映射文件中的namespace必须为dao接口的全限定名称:
<mapper namespace="org.example.dao.DeptDao">
最后。修改pom文件的相关resources标签以实现映射文件的正确配置
<resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> </resource>
三. 解释
1.mybatis和spring核心配置文件的解释。
(1)首先了解SqlSessionFactoryBean这个(类):
Spring创建了SqlSessionFactoryBean这个对象,通过SqlSessionFactoryBean完成
SqlSessionFactoryBuilder的创建并实现配置文件的读取,最终创建并初始化SqlSessionFactory对象并存放在Spring中。
(2)MapperScannerConfigurer类:
spring容器对象会通过MapperScannerConfigurer对象完成dao代理对象的创建。
(3)原有的mybatis对象的功能被分割到spring中,在mybatis中只有额外服务,比如日志输出服务等
(4)数据库连接池
2.书写。(在spring配置文件中书写)
(1)配置数据库连接池:
使用阿里云的druid数据库连接池,并实现数据库连接三要素的书写
<bean id="dataSources" class="ocm.alibaba.druid.pool.DruidDataSources">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="就是地址"/>
<property name="username" value=""/>
<property name="password" value""/>
</bean>
(2)配置SqlSessionFactoryBean:
<bean id="起名" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis.xml"/> //就是这一步: InputStream in = Resources.getResourcesAsStream("mybatis位置");
sqlSessionFactoryBuilder.build(in);
<property name="dataSoueces" ref="dataSources"/>
<property name="typeAliasesPackage" value="实体类的位置"/> //就是原先的实体类别名映射服务,如果不额外加名就默认返回首字母小写的实体类名称
</bean>
(3)配置MapperScannerConfigurer
<bean id="mapperScannerConfigurer" class = "org.mybatis.spring.mapper .MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="就是你的Factorybean名字"/>
<property name="basePackage" value="要申请dao代理的包的位置"/>
</bean>
四. 测试一下
自己测哈。
我这里测试成功,数据成功删除。
结束