mybatis 高级映射和spring整合之与Spring整合(6)

简介: mybatis 高级映射和spring整合之mybatis与Spring整合3.0 mybatis和spring整合(掌握) 3.1 整合思路 需求spring通过单例方式管理SqlSessionFactory。 spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybat

mybatis 高级映射和spring整合之mybatis与Spring整合

3.0 mybatis和spring整合(掌握)
    3.1 整合思路
    需求spring通过单例方式管理SqlSessionFactory。
    spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)
    持久层的mapper都需要有spring进行管理。 

    3.2 整合环境
    创建一个新的java工程(接近实际开发的工程结构)
    jar包:
    mybatis3.2.7的jar包
    spring3.2.0的jar包
    mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供的,mybatis和spring整合由mybatis提供。


    3.3 sqlSessionFactory        
        在applicationContext.xml配置sqlSession 和 数据源
        sqlSessionFactory在mybatis 和spring的整合包下
        applicationContext.xml

        <!-- 加载配置文件 -->
        <context:property-placeholder location="classpath:db.properties">
        <!-- 数据源,使用dbcp -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-method="close">
            <property name="driverClassName" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.driver}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <property name="maxActive" value="10"/>
            <property name="maxIdle" value="5"/>
        </bean>
        <!-- sqlSessionFactory -->
        <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 加载mybatis的配置文件 -->
            <property name="configLocation" value="mybatis/SqlMapConfig.xml"/>
            <!-- 数据源 -->
            <property name="dataSource" ref="dataSource">
            </property>
        </bean>
    3.4 原始dao开发(和spring整合后) 
        3.4.1 User.xml (mapper映射文件)
        User.xml
        <mapper namespace="test">
            <select id="findUserById" parameterType="int" resultType="com.demo.mybatis.ssm.po.User">
                SELECT * FROM USER WHERE id=#{value}
            </select>
        </mapper>

        在SqlMapconfig.xml中加载User.xml
            <!-- 加载映射文件 -->
            <mapper>
                <mapper resource="sqlmap/User.xml">
        3.4.2 dao(实现类继承SqlSessionDaoSupport)
        public interface UserDao {
            //根据id查询用户信息
            public User findUserById(int id) throws Exception;
        }

        dao接口实现类需要注入SqlSessionFactory,通过spring进行注入。
        这里使用spring的声明配置方式,配置dao的bean


        让UserDaoImpl实现类继承SqlSessionDaoSupport

            UserDaoImpl.java
            public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
                //继承 SqlSessionDaoSupport,通过 this.getSqlSession()得到sqlSession
                SqlSession sqlSession = this.getSqlSession)();
                User user = sqlSession.select("test.findUserById",id);
                return user;
            }
        3.4.3 配置dao
        在applicationContext.xml中配置dao。
             applicationContext.xml
            <!-- 原始的dao接口-->
            <bean id="userDao" class="com.demo.ssm.dao.UserDaoImpl">
                <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
            </bean>
        3.4.4 测试程序

            package com.demo.ssm.dao;

            public class UserDaoImplTest{
                //private ApplicationContext applicationContext;
                //在setUp这个方法得到spring容器
                @Before
                public void setUp() throws Exception{
                    applicationContext =  new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml")
                }

                @Test
                public void testFindUserByID(){
                    UserDao userDao = applicationContext.getBean("userDao");
                    //调用userDao的方法
                    User user = userDao.findUserById(1);
                    System.out.println(user);
                }
            }
        3.5 mapper代理开发
            3.5.1 mapper.xml和mapper.java
            3.5.2 spring通过MapperFactoryBean来创建代理对象
            <!-- mapper配置
                mapperFactoryBean:根据mapper接口生成代理对象
            -->
            <bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean">
                <!-- mapperInterface指定mapper接口 -->
                <property name="mapperInterface" value="com.demo.ssm.mapper.UserMapper"/>
                <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
            </bean>
            此方法问题:
            需要针对每个mapper进行配置,麻烦。
            所以 解决办法3.5.3(屏蔽3.5.2)

            3.5.3 通过MapperScannerConfigurer进行mapper扫描(建议使用)
            <!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册
            遵循规范:将mapper.java 和 mapper.xml 映射文件名称保持一致,且在一个目录中。
            自动扫描出来的mapper的bean的id为mapper类名(首字母小写)
            -->
            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                <!-- 指定扫描的包名
                    如果扫描多个包,每个包中间使用半角逗号分隔 
                -->
                <property name="basePackage" value="com.demo.ssm.mapper"/>
                <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            </bean>


            3.5.4 测试代码

            @Test
            public void testFindUserByID() throws Exception{
                UserMapper userMapper = (UserMapper) applicationContext.getBean("userBean");
                System.out.println(user);
            }
目录
相关文章
|
5天前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
25 0
|
24天前
|
SQL XML Java
七、MyBatis自定义映射resultMap
七、MyBatis自定义映射resultMap
42 6
|
5天前
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于注解的整合
本文介绍了Spring Boot集成MyBatis的两种方式:基于XML和注解的形式。重点讲解了注解方式,包括@Select、@Insert、@Update、@Delete等常用注解的使用方法,以及多参数时@Param注解的应用。同时,针对字段映射不一致的问题,提供了@Results和@ResultMap的解决方案。文章还提到实际项目中常结合XML与注解的优点,灵活使用两者以提高开发效率,并附带课程源码供下载学习。
17 0
|
5天前
|
Java 数据库连接 数据库
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——MyBatis 介绍和配置
本文介绍了Spring Boot集成MyBatis的方法,重点讲解基于注解的方式。首先简述MyBatis作为持久层框架的特点,接着说明集成时的依赖导入,包括`mybatis-spring-boot-starter`和MySQL连接器。随后详细展示了`properties.yml`配置文件的内容,涵盖数据库连接、驼峰命名规范及Mapper文件路径等关键设置,帮助开发者快速上手Spring Boot与MyBatis的整合开发。
34 0
|
2月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
150 29
|
2月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
108 2
|
2月前
|
SQL JavaScript Java
Spring Boot 3 整合 Mybatis-Plus 实现数据权限控制
本文介绍了如何在Spring Boot 3中整合MyBatis-Plus实现数据权限控制,通过使用MyBatis-Plus提供的`DataPermissionInterceptor`插件,在不破坏原有代码结构的基础上实现了细粒度的数据访问控制。文中详细描述了自定义注解`DataScope`的使用方法、`DataPermissionHandler`的具体实现逻辑,以及根据用户的不同角色和部门动态添加SQL片段来限制查询结果。此外,还展示了基于Spring Boot 3和Vue 3构建的前后端分离快速开发框架的实际应用案例,包括项目的核心功能模块如用户管理、角色管理等,并提供Gitee上的开源仓库
489 11
|
3月前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
198 4
|
3月前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
229 3
|
3月前
|
XML 安全 Java
Spring Boot中使用MapStruct进行对象映射
本文介绍如何在Spring Boot项目中使用MapStruct进行对象映射,探讨其性能高效、类型安全及易于集成等优势,并详细说明添加MapStruct依赖的步骤。
110 0