栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring学习(十二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring学习(十二)

12. 整合Mybatis

步骤:

    导入相关jar包

    junit

    mybatis

    sql数据库

    spring相关的

    aop织入

    mybatis-spring【new】

    (注意!!这里的spring-core包要和spring-jdbc包的版本一致!!!!否则报错java.lang.NoSuchMethodError: org.springframework.beans.factory.config.ConfigurableListableBeanFactor)

    
        
            junit
            junit
            4.13.2
            test
        
        
            mysql
            mysql-connector-java
            8.0.28
        
        
            org.mybatis
            mybatis
            3.5.9
        
        
            org.springframework
            spring-webmvc
            5.3.16
        
        
        
            org.springframework
            spring-jdbc
            5.3.6
        
        
        
            org.aspectj
            aspectjweaver
            1.9.5
        
        
        
            org.mybatis
            mybatis-spring
            2.0.2
        
        
        
            org.springframework
            spring-core
            5.3.6
        
        
    
    

    编写配置文件

    测试

12.1 回忆MyBatis

    编写实体类

    @Data
    public class User {
        private int id;
        private String name;
        private String pwd;
    }
    

    编写核心配置文件

    
    
    
        
            
        
        
            
                
                
                    
                    
                    
                    
                
            
        
        
            
        
    
    

    编写接口

    public interface UserMapper {
        public List selectUser();
    }
    

    编写mapper.xml

    
    
    
        
    
    

    测试

    public class MyTest {
        @Test
        public void test() throws IOException {
            String resources="mybatis-config.xml";
            InputStream stream = Resources.getResourceAsStream(resources);
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
    
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);
            List userList = mapper.selectUser();
            for (User user : userList) {
                System.out.println(user);
            }
        }
    }
    
12.2 MyBatis-Spring

什么是MyBatis-Spring

MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。它将允许 MyBatis 参与到 Spring 的事务管理之中,创建映射器 mapper 和 SqlSession 并注入到 bean 中,以及将 Mybatis 的异常转换为 Spring 的 DataAccessException。 最终,可以做到应用代码不依赖于 MyBatis,Spring 或 MyBatis-Spring。

    编写数据源配置

    核心配置文件:代替原来的mybatis.xml

    
    
        
        
            
            
            
            
        
    
        
        
            
            
            
            
        
        
        
            
            
        
    
    

    在原来的mybatis文件中保留别名,与设置等标签,当然也可以整合到核心文件中

    
    
    
        
            
        
    	
    
    

    将实现类的bean分离出来,便于阅读

    
    
        
        
            
        
    
    

    sqlSessionFactory

        
        
            
            
            
            
        
    

    sqlSessionTemplate

        
        
            
            
        
    

    需要给接口添加实现类【新增】

    public class UserMapperImpl implements UserMapper{
        //在原来我们所有操作都是用sqlSession来执行,现在使用sqlSessionTemplate
        private SqlSessionTemplate sqlSessionTemplate;
    
        public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
            this.sqlSessionTemplate = sqlSessionTemplate;
        }
    
        @Override
        public List selectUser() {
            UserMapper mapper = sqlSessionTemplate.getMapper(UserMapper.class);
            return mapper.selectUser();
        }
    }
    

    将自己写的实现类注入到Spring中测试

    public class MyTest {
        @Test
        public void test() throws IOException {
    
            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
            UserMapper userMapper = context.getBean("userMapper", UserMapper.class);
            for (User user : userMapper.selectUser()) {
                System.out.println(user);
            }
        }
    }
    
12.3 SqlSessionDaoSupport

SqlSessionDaoSupport 是一个抽象的支持类,用来为你提供 SqlSession。调用 getSqlSession() 方法你会得到一个 SqlSessionTemplate,之后可以用于执行 SQL 方法,就像下面这样:

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
  public User getUser(String userId) {
    return getSqlSession().selectOne("org.mybatis.spring.sample.mapper.UserMapper.getUser", userId);
  }
}

在这个类里面,通常更倾向于使用 MapperFactoryBean,因为它不需要额外的代码。但是,如果你需要在 DAO 中做其它非 MyBatis 的工作或需要一个非抽象的实现类,那么这个类就很有用了。

SqlSessionDaoSupport 需要通过属性设置一个 sqlSessionFactory 或 SqlSessionTemplate。如果两个属性都被设置了,那么 SqlSessionFactory 将被忽略。

假设类 UserMapperImpl 是 SqlSessionDaoSupport 的子类,可以编写如下的 Spring 配置来执行设置:


  

13. 声明式事务 13.1 回顾事务

把一组事务当初一个业务来做,要么都成功,要么都失败事务在项目开发中,涉及到数据一致性问题确保完整性和一致性

事务的ACID原则:

原子性:确保事务要不都成功,要不都失败一致性:一旦事务完成,要么一致提交,数据前后保持不变隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,但要排除其他事务对本次事务的影响持久性:事务一旦提交,无论系统发生什么问题,结果不会被影响,被持久化的写到存储器中 13.2 Spring中的事务管理

声明式事务:Aop编程式事务:需要在代码中运行事务管理


    



    
        
        
        
        
        
        
        
    


    
    

为什么需要事务?

如果不配置事务,可能存在数据提交不一致的情况下;如果我们不在Spring中配置声明式事务,我们就需要在代码中手动配置事务事务在项目开发中十分重要,涉及到数据的一致性和完整性问题
essionTemplate。如果两个属性都被设置了,那么SqlSessionFactory` 将被忽略。

假设类 UserMapperImpl 是 SqlSessionDaoSupport 的子类,可以编写如下的 Spring 配置来执行设置:


  

13. 声明式事务 13.1 回顾事务

把一组事务当初一个业务来做,要么都成功,要么都失败事务在项目开发中,涉及到数据一致性问题确保完整性和一致性

事务的ACID原则:

原子性:确保事务要不都成功,要不都失败一致性:一旦事务完成,要么一致提交,数据前后保持不变隔离性:数据库允许多个并发事务同时对其数据进行读写和修改的能力,但要排除其他事务对本次事务的影响持久性:事务一旦提交,无论系统发生什么问题,结果不会被影响,被持久化的写到存储器中 13.2 Spring中的事务管理

声明式事务:Aop编程式事务:需要在代码中运行事务管理


    



    
        
        
        
        
        
        
        
    


    
    

为什么需要事务?

如果不配置事务,可能存在数据提交不一致的情况下;如果我们不在Spring中配置声明式事务,我们就需要在代码中手动配置事务事务在项目开发中十分重要,涉及到数据的一致性和完整性问题

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786124.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号