【SSM整合】1—Spring和Mybatis整合

⭐⭐⭐⭐⭐⭐
Github主页https://github.com/A-BigTree
笔记链接https://github.com/A-BigTree/Code_Learning
⭐⭐⭐⭐⭐⭐


Spring专栏https://blog.csdn.net/weixin_53580595/category_12279588.html

SpringMVC专栏https://blog.csdn.net/weixin_53580595/category_12281721.html

Mybatis专栏https://blog.csdn.net/weixin_53580595/category_12279566.html

如果可以,麻烦各位看官顺手点个star~

如果文章对你有所帮助,可以点赞收藏⭐支持一下博主~


文章目录

  • 1 Spring和Mybatis整合
    • 1.1 连接数据库
      • 1.1.1 整体所需依赖
      • 1.1.2 配置数据源
        • 创建jdbc.properties
        • 加入日志和Spring配置文件
        • 测试
    • 1.2 整合Mybatis
      • 1.2.1 思路
      • 1.2.2 Mybatis-Spring技术
        • 版本匹配说明
        • 加入依赖
      • 1.2.3 创建Mybatis全局配置文件
      • 1.2.4 创建模型
      • 1.2.5 创建Mapper接口
      • 1.2.6 创建Mapper配置文件
      • 1.2.7 配置`SqlSessionFactoryBean`
        • 保留Mybatis全局配置文件
        • 彻底舍弃Mybatis全局配置文件
      • 1.2.8 配置接口扫描器
        • 使用扫描器
        • 使用`mybatis-spring`命名空间
      • 1.2.9 测试
    • 1.3 加入声明式事务
      • 1.3.1 配置事务管理器
      • 1.3.2 创建Service组件
      • 1.3.3 配置自动扫描的包
      • 1.3.4 测试

1 Spring和Mybatis整合

本质:Spring接管一切,代码更加简洁。

  • Spring管理数据源,连接数据库;
  • Spring管理SqlSessionFactory,开启SqlSession的细节被屏蔽了;
  • Spring的IOC容器负责注入Mapper接口;
  • Spring管理声明式事务;

1.1 连接数据库

1.1.1 整体所需依赖


<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-webmvcartifactId>
    <version>5.3.1version>
dependency>
 

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-ormartifactId>
    <version>5.3.1version>
dependency>
 

<dependency>
    <groupId>ch.qos.logbackgroupId>
    <artifactId>logback-classicartifactId>
    <version>1.2.3version>
dependency>
 

<dependency>
    <groupId>javax.servletgroupId>
    <artifactId>javax.servlet-apiartifactId>
    <version>3.1.0version>
    <scope>providedscope>
dependency>
 

<dependency>
    <groupId>org.thymeleafgroupId>
    <artifactId>thymeleaf-spring5artifactId>
    <version>3.0.12.RELEASEversion>
dependency>
 

<dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatis-springartifactId>
    <version>2.0.6version>
dependency>
 

<dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatisartifactId>
    <version>3.5.7version>
dependency>
 

<dependency>
    <groupId>mysqlgroupId>
    <artifactId>mysql-connector-javaartifactId>
    <version>5.1.3version>
dependency>
 

<dependency>
    <groupId>com.alibabagroupId>
    <artifactId>druidartifactId>
    <version>1.0.31version>
dependency>
 

<dependency>
    <groupId>org.springframeworkgroupId>
    <artifactId>spring-testartifactId>
    <version>5.3.1version>
dependency>
 

<dependency>
    <groupId>junitgroupId>
    <artifactId>junitartifactId>
    <version>4.12version>
    <scope>testscope>
dependency>


<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <version>1.18.12version>
    <scope>providedscope>
dependency>

1.1.2 配置数据源

创建jdbc.properties

jdbc.user=root
jdbc.password=atguigu
jdbc.url=jdbc:mysql://192.168.200.100:3306/mybatis-example
jdbc.driver=com.mysql.jdbc.Driver

加入日志和Spring配置文件


<context:property-placeholder location="classpath:jdbc.properties"/>
 

<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
    <property name="username" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="driverClassName" value="${jdbc.driver}"/>
    <property name="url" value="${jdbc.url}"/>
bean>

测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(value = "classpath:spring-persist.xml")
@Slf4j
public class SSMTest {

    @Autowired
    private DataSource dataSource;

    @Test
    public void testConnection() throws SQLException {
        Connection connection = dataSource.getConnection();
        log.debug("connection = " + connection);
    }

}

1.2 整合Mybatis

1.2.1 思路

【SSM整合】1—Spring和Mybatis整合_第1张图片

1.2.2 Mybatis-Spring技术

版本匹配说明

MyBatis-Spring MyBatis Spring Framework Spring Batch Java
3.0 3.5+ 6.0+ 5.0+ Java 17+
2.1 3.5+ 5.x 4.x Java 8+
2.0 3.5+ 5.x 4.x Java 8+
1.3 3.4+ 3.2.2+ 2.1+ Java 6+

加入依赖


<dependency>
    <groupId>org.mybatisgroupId>
    <artifactId>mybatis-springartifactId>
    <version>2.0.6version>
dependency>

1.2.3 创建Mybatis全局配置文件


DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 
    
    <settings>
        
        
        
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    settings>
 
configuration>

1.2.4 创建模型

物理模型继续沿用之前创建的t_emp表。

public class Emp {
 
    private Integer empId;
    private String empName;
    private Double empSalary;

1.2.5 创建Mapper接口

public interface EmpMapper {
 
    List<Emp> selectAll();
 
}

1.2.6 创建Mapper配置文件


DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 




<mapper namespace="com.atguigu.ssm.mapper.EmpMapper">
 
    
    <select id="selectAll" resultType="Emp">
        select emp_id,emp_name,emp_salary from t_emp
    select>
 
mapper>

1.2.7 配置SqlSessionFactoryBean

保留Mybatis全局配置文件


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 
    
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
 
    
    <property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/>
 
    
    <property name="dataSource" ref="druidDataSource"/>
 
bean>

彻底舍弃Mybatis全局配置文件


<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 
    
    <property name="configuration">
        <bean class="org.apache.ibatis.session.Configuration">
            <property name="mapUnderscoreToCamelCase" value="true"/>
        bean>
    property>
 
    
    <property name="typeAliasesPackage" value="com.atguigu.ssm.entity"/>
 
    
    <property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/>
 
    
    <property name="dataSource" ref="druidDataSource"/>
 
bean>

注意:上面两种方式如果并存,会抛出异常: java.lang.IllegalStateException: Property 'configuration' and 'configLocation' can not specified with together

1.2.8 配置接口扫描器

使用扫描器


<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <property name="basePackage" value="com.atguigu.ssm.mapper"/>
bean>

使用mybatis-spring命名空间

<mybatis-spring:scan base-package="com.atguigu.ssm.mapper"/>

1.2.9 测试

@Autowired
private EmpMapper empMapper;

@Test
public void testMybatis() {
    List<Emp> empList = empMapper.selectAll();
 
    for (Emp emp : empList) {
        log.debug(emp.toString());
    }
}

1.3 加入声明式事务

1.3.1 配置事务管理器


<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    
    <property name="dataSource" ref="druidDataSource"/>
bean>
 

<tx:annotation-driven transaction-manager="transactionManager"/>

1.3.2 创建Service组件

@Service
public class EmpServiceImpl implements EmpService {
 
    @Autowired
    private EmpMapper empMapper;
 
    @Override
    @Transactional(readOnly = true)
    public List<Emp> getAll() {
        return empMapper.selectAll();
    }
}

1.3.3 配置自动扫描的包

<context:component-scan base-package="com.atguigu.ssm.service"/>

1.3.4 测试

@Autowired
private EmpService empService;
 
@Test
public void testTx() {
    List<Emp> empList = empService.getAll();
    for (Emp emp : empList) {
        log.debug("emp = " + emp);
    }
}

在框架打印的日志中能够看到事务打开、提交、回滚等操作即可确认声明式事务已生效。

你可能感兴趣的:(微服务,#SSM,mybatis,spring,java)