0
点赞
收藏
分享

微信扫一扫

linux环境, nginx https配置

m逆光生长 2023-05-31 阅读 47

文章目录

Spring:Day 04

整合 MyBatis

MyBatis 使用的代码整理:点此进入。

本文 Spring-MyBatis 中使用的代码整理:点此进入。

MyBatis-Spring 官方文档:点此进入。

一、配置环境

1. 导入依赖

需要导入的依赖如下

<!-- mysql 数据库驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.16</version>
</dependency>

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

<!-- spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.3.18</version>
</dependency>

<!-- aspectjweaver -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.6</version>
</dependency>

<!-- spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.3.23</version>
</dependency>

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

<!-- junit -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
</dependency>

<!-- lombok -->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.24</version>
</dependency>

2. 准备一个数据库


二、用 Spring 整合 MyBatis

1. 编写通用配置文件

引入外部配置文件

需要注册的 bean

  • dataSource 对象:DriverManagerDataSource 类创建;
  • sqlSessionFactory 对象:SqlSessionFactoryBean 类创建;
  • sqlSessionTemplate 对象:SqlSessionTemplate 类创建。
<!-- 外部配置文件 -->
<context:property-placeholder ignore-unresolvable="true" location="classpath:db.properties"/>

<!-- 注册 dataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="${drive}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</bean>

<!-- 注册 sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <!-- 绑定 MyBatis -->
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <property name="mapperLocations" value="classpath:com/Sun3285/dao/*.xml"/>
</bean>

<!-- 注册 sqlSessionTemplate -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
    <!-- 只能用构造器注入,因为类没有 set 方法 -->
    <constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>

2. 编写实现类

实现类实现接口,重写了业务方法,有两个作用

  • 创建 mapper 对象;
  • 通过 mapper 对象执行方法。

通过实现类中方法的返回值可以看到,是 mapper 又执行了方法,可以理解为这个实现类相当于加了一层,把之前测试类的代码封装了。

在原来,我们的所有操作,都使用 SqlSession 来执行;在现在,用 sqlSessionTemplate 来代替。SqlSessionTemplateMyBatis-Spring 的核心。作为 SqlSession 的一个实现,这意味着可以使用它无缝代替代码中已经在使用的 SqlSessionSqlSessionTemplate线程安全的,可以被多个 DAO 或映射器所共享使用。

3. 编写 Spring 配置文件

导入通用配置文件、注册实现类对象到容器中

4. 测试

出现错误一

错误一的改正方法:修改外部配置文件中的键,改为 jdbc.xxx

出现错误二

错误二的改正方法:在 Spring 通用配置文件中注册 mapper 时,将通配符 * 修改为具体的 xml 文件,或者将 classpath 改为 classpath*,这样路径中再使用通配符就不报错了。

改正错误后,最终运行成功

5. 分析总结

用 Spring 整合 MyBatis 过程中,用 Spring 配置文件注册 bean 代替了原先所有的创建对象,也可以通过绑定 MyBatis 来代替 MyBatis 核心配置文件中的各种配置,但是一般会在 MyBatis 配置文件中留下设置和别名管理

  • Spring 配置文件注册 dataSource 管理数据源,代替了原先:MyBatis 核心配置文件中配置环境管理数据源

  • 绑定 MyBatis 后,可以在 Spring 配置文件中进行各种配置,代替了原先:MyBatis 核心配置文件中的各种配置,如注册 mapper

  • 注册 sqlSessionFactory 对象,代替了原先:在工具类中创建 sqlSessionFactory 对象

  • 注册 sqlSessionTemplate 对象,代替了原先:在测试类中创建 sqlSession 对象

  • 注册自定义实现类对象,该实现类中封装了方法,代替了原先:在测试类中创建 mapper 对象,用 mapper 对象执行方法


三、拓展

在编写实现类时,可以继承 SqlSessionDaoSupport 类。

作用:可以用来提供 SqlSession:通过调用 getSqlSession() 方法得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法。

1. 实现

编写实现类

注册 bean

测试

2. 总结

  1. 继承 SqlSessionDaoSupport 类后,可以调用 getSqlSession() 方法得到一个 SqlSessionTemplate
  2. 进行的改变有:
    • 实现类中,不需要定义 SqlSession 属性;
    • 注册实现类时,属性由 SqlSession 变为 sqlSessionFactory
    • 通用配置文件中,不需要注册 sqlSessionTemplate 对象。

四、事务

1. 概述

  1. 事务在项目的开发中十分重要,涉及到数据的一致性和完整性问题;

  2. MyBatis-Spring 借助了 Spring 中的 DataSourceTransactionManager 来实现事务管理,而不是给 MyBatis 创建一个新的专用事务管理器;

  3. 在事务处理期间,一个单独的 SqlSession 对象将会被创建和使用。当事务完成时,这个 session 会以合适的方式提交或回滚

  4. 事务配置好了以后,MyBatis-Spring 将会透明地管理事务,这样在 DAO 类中就不需要额外的代码了。

  5. Spring 中事务管理的方式有两种:

    • 推荐声明式事务:是 AOP 的一个应用,代码是横切入进去的,不影响原有代码
    • 编程式事务:需要在代码中进行事务的管理,会改变原有代码

2. 没有事务时

没有事务时,如下图所示,如果想让方法中的代码出错时,进行回滚,则需要进行事务,接下来用声明式事务来实现。

结果

3. 声明式事务

通用配置文件中实现声明式事务的步骤

  • 头文件中,除了 aop、context 约束外,再导入 tx 约束;
  • 配置声明式事务
  • 结合 AOP 实现事务的织入
    • 配置事务通知(也就是切面,Spring 提供的);
    • 配置事务切入(设置切入点和执行环绕增加)。

这样通过设置后,在切入点处都会存在事务,测试

改正错误,执行成功

4. 总结

  1. 配置声明式事务时注意
    • 传入的 DataSource 可以是任何能够与 Spring 兼容的 JDBC DataSource,包括连接池和通过 JNDI 查找获得的 DataSource
    • 为事务管理器指定的 DataSource 必须和用来创建 SqlSessionFactoryBean 的是同一个数据源,否则事务管理器无法工作。
  2. 配置事务通知时注意
    • 要指定给哪些方法配置事务:其中 name 必须与接口中的方法名一致,可以用通配符 * 表示全部方法
    • 要指定事务的传播特性 propagation默认为 REQUIRED
  3. 配置事务切入包括设置切入点执行环绕增加
  4. MyBatis 管理事务通过核心配置文件中的事务管理器,Spring 管理事务通过以上配置。


注意:

  1. MyBatis-Spring 官方文档:http://mybatis.org/spring/zh/index.html
  2. 使用数据库之前先在 IDEA 中连接上数据库。
  3. 注册 bean 就是在创建对象getBean 就是从容器中获取对象
  4. 真正的实现类是编写 sql 语句的 UserMapper.xml 文件,而自己写的实现类相当于代替了原来的测试代码,最后还是 mapper 执行方法,执行的是 UserMapper.xml 文件的方法。
举报

相关推荐

nginx 配置https

nginx配置https

Nginx配置HTTPS

Nginx HTTPS配置

Nginx 配置 HTTPS 证书

0 条评论