Springmvc-Spring-Mybatis整合

7 篇文章 0 订阅
6 篇文章 0 订阅

1. Springmvc 操作流程分析:
    1. 入口是: DispatcherServlet 这个在web.xml中配置,用来拦截请求;同时在 DispatcherServlet 中设置初始化参数:
        contextConfigLocation 用来指定它的核心配置文件的路径:classpath:spring/springmvc.xml; 
    2. 在核心配置文件中配置有: 处理器映射器, 处理器适配器, 视图解析器(在视图解析器中配置前后缀,这样我们就可以在
            controller的返回视图中 简化逻辑视图的编写;)
    3. 通过        

2. JDBC 操作流程分析:
    1.加载驱动:
        Class.forName("com.mysql.jdbc.Driver");
    2.获得连接: 
        connection =  DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "123");                
    3.编写sql语句 ?表示占位符 : 
        String sql = "select * from user where username = ?";
    4.获取预处理statement:
        preparedStatement = connection.prepareStatement(sql);
    5.设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
        preparedStatement.setString(1, "王五");
    6.向数据库发出sql执行查询,查询出结果集
        resultSet =  preparedStatement.executeQuery(); 
        
        
        
    
3. mybatis 传统方式 操作流程分析:
    1.第一步:创建一个SQLSessionFactoryBuilder对象。
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    2.第二步:加载配置文件。
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");    
    3.第三步:创建SQLSessionFactory对象
        sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
    4.第四步:创建SQLSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();    
    5.第五步:使用SqlSession对象执行查询,得到User对象。
        //第一个参数:执行查询的statementId ,这个地方使用了 mapper.xml中sql映射;
        User user = sqlSession.selectOne("getUserById", 10);
        
    6.第六步:打印结果
        System.out.println(user);
    7.第七步:释放资源
        sqlSession.close();    
    
    简单总结:mybatis单独使用时,是直接使用 sqlSession 调用方法完成:CRUD操作;
        mapper.xml中的sql映射的使用是通过sqlSession调方法时的第一个参数来实现的;
    
4.     mybatis mapper代理方式 操作流程分析:
    1.第一步:创建一个SQLSessionFactoryBuilder对象。
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    2.第二步:加载配置文件。
        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");    
    3.第三步:创建SQLSessionFactory对象
        sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);    
    4.第四步:创建SQLSession对象
        SqlSession sqlSession = sqlSessionFactory.openSession();        
    5.获得代理对象 (这个地方使用了mapper.xml中的sql映射生成了代理对象)
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);    
    6.使用代理对象: userMapper 进行操作,其实这个 userMapper 就是mapper.xml中sql映射的java代码形式;
        
        

        
5.    mybatis单独使用终极总结: mybatis要解决的核心问题是,如何将mapper.xml中的sql映射利用起来;
    不论是"传统方式" 还是"mapper代理方式" 核心问题是获得:sqlSessionFactory ---> sqlSession---->
        ---->1.传统方式:  
            User user = sqlSession.selectOne("getUserById", 10);
            List<User> list = sqlSession.selectList("getUserByName", "张");
            
                sqlSession直接调用方法:在方法中通过statementID 来找到指定 sql语句映射,这样
            就使用了映射配置文件中的sql映射配置;
            
        ---->2.mapper代理方式: 
            <!-- mapper代理的开发规则:
                1、namespace必须时候接口的全限定名
                2、Statementid必须和接口的方法名称一致
                3、接口方法的参数类型要和parameterType要一致
                4、接口方法的返回值类型要和resultType一致
             -->
            sqlSession.getMapper(UserMapper.class); 
            
6. spring与mybatis整合:
    思路分析: 将mybatis核心配置文件 SqlMapConfig.xml 中配置,迁移到applicationContext.xml中:    
        我们先来看看SqlMapConfig.xml中配置了什么?
        SqlMapConfig.xml中配置的内容和顺序如下:

            properties(属性)    --------->我们会配置一些连接参数,整合时放入db.properties文件中;
            settings(全局配置参数)
            typeAliases(类型别名)-------->别名主要用在输入输出映射时,映射类型简写;这个不迁移;
            typeHandlers(类型处理器)
            objectFactory(对象工厂)
            plugins(插件)
            environments(环境集合属性对象) 
                environment(环境子属性对象)
                    transactionManager(事务管理) -------->迁移到applicationContext.xml中
                    dataSource(数据源)  -------->迁移到applicationContext.xml中
            mappers(映射器)     -------->迁移到applicationContext.xml中

            注意: 顺序不能颠倒!!!
        
        applicationContext.xml 中的配置:
        
            <!-- 加载配置文件 -->
            <context:property-placeholder location="classpath:db.properties" />
            
            <!-- 数据库连接池 -->
            <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                destroy-method="close">
                <property name="driverClassName" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
                <property name="maxActive" value="10" />
                <property name="maxIdle" value="5" />
            </bean>
            
            <!-- sqlSessonFactory的配置 -->
            <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                <!-- 配置数据库连接池 -->
                <property name="dataSource" ref="dataSource"></property>
                <!-- 加载配置文件 -->
                <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"></property>
            </bean>
            
            <!-- 配置包扫描器 -->
            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                <!-- 配置要扫描的包 ,如果扫描多个包使用半角逗号分隔-->
                <!-- <property name="basePackage" value="cn.itheima.mybatis.mapper,com.itheima.mybatis.mapper"/> -->
                <property name="basePackage" value="com.itheima.mybatis.mapper"/>
            </bean>
        
        上边配置中: <!-- 加载配置文件 --> ,<!-- 数据库连接池 -->,<!-- sqlSessonFactory的配置 -->这几个都是基本配置,
        最关键的配置是: <!-- 配置包扫描器 --> 因为这个配置用有一个 <!-- 加载配置文件 --> 这个配置文件下有连两个东西:
            1. mapper接口
            2. mapper映射文件 (用来生成mapper接口的代理实现;)
        利用这两个东西,生成了mapper接口的代理实现,这其实已经解决了mybatis的核心问题: 使外置sql语句生效;
        这个代理对象是由spring创建的,所以我们可以注入到servcie中;这样就实现了 spring与mybatis整合;
        
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值