最通俗易懂的ssm框架整合讲解
环境
- MySQL 8.0.16
1 Mybatis
1.1 数据库配置文件
jdbc.driver = com.mysql.cj.jdbc.Driver # 如果使用mysql 6+,增加一个时区的配置 jdbc.url = jdbc:mysql://localhost:3306/ssmbuild?useUnicode = true & characterEncoding = utf8 & serverTimezone = UTC & useSSL = false
jdbc.username = root
jdbc.password = 123456
com.mysql.jdbc.Driver 与 com.mysql.cj.jdbc.Driver ?
- com.mysql.jdbc.Driver 是 mysql-connector-java 5 中的
- com.mysql.cj.jdbc.Driver 是 mysql-connector-java 6 中的
JDBC 连接 mysql 5:
url = jdbc:mysql://localhost:3306/test?useUnicode = true & characterEncoding = utf8 & useSSL = false
JDBC 连接 mysql 6:
url = jdbc:mysql://localhost:3306/test?serverTimezone = UTC & ?useUnicode = true & characterEncoding = utf8 & useSSL = false
1.2 配置 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 > < ! --配置数据源,交给 spring 去做-- > < typeAliases > < package name = "com.fyy.pojo" / > < /typeAliases > < mappers > < mapper class = "com.fyy.dao.BookMapper" / > < /mappers > < /configuration >
typeAiases 标签作用?
其中,<typeAiases>标签的作用只是为 Java 类型指定一个短的名字,它只和xml 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。
指定一个包名,Mybatis 会在此包名下搜索需要的 Java Bean,每一个在此包下的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名作为它的别名,比如:com.fyy.pojo.User 的别名为:user ,若有注解,则别名为其注解值。如下例子:
@Alias ( "hello" ) public class Hello ( ) { }
mappers标签作用?
Mybatis 是基于 Sql 映射配置的框架,Sql 语句在Mapper 配置文件中,当构建 SqlSession 类之后,就需要去读取 Mapper 配置文件中的 sql 配置。
mappers : 映射器,以最佳的方式告诉 Mybatis 去哪里找映射文件,就是用来配置需要加载的 sql 映射配置文件路径的。
mappers 下的每一个 mapper 都是一个mapper,配置的都是一个独立的映射配置文件的路径,配置方式有以下几种。
1、接口所在包
< mappers > <!-- mapper接口所在的包名 --> < package name = " com.fyy.mapper " /> </ mappers > # package标签,通过 name 属性指定 mapper 接口所在的包名,此时对应的映射文件必须
与接口位于同一路径下,并且名称相同。
2、相对路径配置
< mappers > < mapper resource = " com/fyy/mapper/FlowerMapper.xml " /> </ mappers > # mapper标签,通过 resource 属性引入 classpath 路径的相对资源
3、类注册引入
< mappers > < mapper class = " com.fyy.mapper.FlowerMapper " /> </ mappers > # mapper 标签,通过 class 属性指定 mapper 接口名称,此时对应的映射文件必须与接口位于同一路径
下,并且名称相同
4、使用 url 绝对路径方式引入(不推荐)
< mappers > < mapper url = " file:///var/mappers/UserMapper.xml " /> </ mappers > # mapper 标签,通过 url 引入网络资源或者本地磁盘资源
总结
只有配置了 mappers 信息,Mybatis 才知道去哪里加载 Mapper 配置文件,开发中,根据项目中 Mapper 的配置偏好,选择整合配置文件的配置方式。
2 Spring 整合 Mybatis
2.1 Spring 整合 dao 层
<?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 " xsi: schemaLocation = " http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd " > <!-- 配置整合Mybatis--> <!--1、关联数据库配置文件--> < context: property-placeholder location = " classpath:database.properties " /> <!--2、连接池--> <!--数据库连接池
dbcp 半自动化操作 不能自动连接
c3p0 自动化操作(自动的加载配置文件 并且设置到对象里面)--> < bean id = " dataSource " class = " com.mchange.v2.c3p0.ComboPooledDataSource " > <!-- 配置连接池属性 --> < property name = " driverClass " value = " ${jdbc.driver} " /> < property name = " jdbcUrl " value = " ${jdbc.url} " /> < property name = " user " value = " ${jdbc.username} " /> < property name = " password " value = " ${jdbc.password} " /> <!-- c3p0连接池的私有属性 --> < property name = " maxPoolSize " value = " 30 " /> < property name = " minPoolSize " value = " 10 " /> <!-- 关闭连接后不自动commit --> < property name = " autoCommitOnClose " value = " false " /> <!-- 获取连接超时时间 --> < property name = " checkoutTimeout " value = " 10000 " /> <!-- 当获取连接失败重试次数 --> < property name = " acquireRetryAttempts " value = " 2 " /> </ bean > <!-- 3.配置SqlSessionFactory对象 --> < bean id = " sqlSessionFactory " class = " org.mybatis.spring.SqlSessionFactoryBean " > <!-- 注入数据库连接池 --> < property name = " dataSource " ref = " dataSource " /> <!-- 配置MyBaties全局配置文件:mybatis-config.xml --> < property name = " configLocation " value = " classpath:mybatis-config.xml " /> </ bean > <!-- 4.配置扫描Dao接口包,动态实现Dao接口注入到spring容器中 --> < bean