Spring学习笔记(十一)。Spring整合MyBatis,applicationContext.xml,sqlSessionTemplate,SqlSessionDaoSupport

Spring学习笔记(十一)。Spring整合MyBatis,applicationContext.xml,sqlSessionTemplate,SqlSessionDaoSupport,第1张

Spring学习笔记(十一)。Spring整合MyBatis,applicationContext.xml,sqlSessionTemplate,SqlSessionDaoSupport

文章目录

Spring整合MyBatis1 回忆Mybatis2 MyBatis-Spring学习3 整合实现一4 整合实现二

Spring整合MyBatis

搭建一个MyBatis程序

    导入相关的依赖

junit


    junit
    junit
    4.12

mybatis


    org.mybatis
    mybatis
    3.5.2

mysql-connector


    mysql
    mysql-connector-java
    5.1.47

spring相关的


    org.springframework
    spring-webmvc
    5.1.10.RELEASE


    org.springframework
    spring-jdbc
    5.1.10.RELEASE

aspectJ AOP 织入器


    org.aspectj
    aspectjweaver
    1.9.4

mybatis-spring整合包 【重点】


    org.mybatis
    mybatis-spring
    2.0.2

lombok


    org.projectlombok
    lombok
    1.18.12

配置Maven静态资源过滤问题!


    
        
            src/main/java
            
                ***.xml
            
            true
        
        
            src/main/resources
            
                ***.xml
            
            true
        
    

    编写配置文件

    代码实现

1 回忆Mybatis

编写pojo实体类

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

编写UserMapper接口

public interface UserMapper {
    public List selectUser();
}

编写数据库连接配置

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF-8
username=root
password=xxc113206

实现mybatis的配置文件





    
    
    
    
        
    
    
        
            
            
                
                
                
                
            
        
    
    
    
        
    

接口对应的Mapper映射文件





    

工具类

public class MyBatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try {
            // 获取MyBatis第一步:获取sqlSessionFactory对象
            String resource = "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    // 既然有了sqlSessionFactory,顾名思义,我们就可以从中获得SqlSession的实例了
    // SqlSession 完全包含了面向数据库执行SQL命令所需的所有方法
    public static SqlSession getSqlSession(){
        return sqlSessionFactory.openSession(true);
    }
}

测试类

public class MyTest {
    @Test
    public void test(){
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List users = mapper.selectUser();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

2 MyBatis-Spring学习

官方文档:

http://mybatis.org/spring/zh/index.html

3 整合实现一
    引入Spring配置文件applicationContext.xml




    配置数据源替换mybaits的数据源

    
    
    
    

配置完之后我们就可以不用mybatis-config.xml中配置的了。

    配置SqlSessionFactory,关联MyBatis

    
    
    
    

说明:mapperLocations就是我们mybatis-config.xml中的映射器(mappers),说明我们之前在mybatis-config.xml中的配置现在可以配到applicationContext.xml了。甚至mybatis-config.xml不用也可以。我一般会将起别名和settings(设置)保留到mybatis-config.xml中。

    注册sqlSessionTemplate,关联sqlSessionFactory;(sqlSessionTemplate就是我们mybatis中说的sqlSession)

    
    

构造器注入参考:https://blog.csdn.net/weixin_45842494/article/details/122772913

    增加Dao接口的实现类;私有化sqlSessionTemplate
public class UserMapperImpl implements UserMapper {
    //sqlSession不用我们自己创建了,Spring来管理
    private SqlSessionTemplate sqlSession;
    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }
    public List selectUser() {
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        return mapper.selectUser();
    }
}
    注册bean实现

    

    测试
public class MyTest {
    @Test
    public void test1(){
        ApplicationContext context = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper mapper = (UserMapper) context.getBean("userMapper");
        List user = mapper.selectUser();
        System.out.println(user);
    }
}

说明:最主要的就是将SqlSessionTemplate称为私有化属性,在 *** 作中没有感觉到mybatis的存在一样。

同样的,为了体现整合的效果,我们将applicationContext.xml提取出来,使用import标签,用一个总得配置文件进行整合。

这样一来,spring-dao将作为固定不用在改变,我们需要注入的时候只需要修改applicationContext.xml即可

此时我们的mybatis-config.xml的内容为:





    
    
        
    

mybatis-config.xml被spring完美整合。

4 整合实现二

mybatis-spring1.2.3版以上的才有这个

官方文档截图:

dao继承Support类 , 直接利用 getSqlSession() 获得 , 然后直接注入SqlSessionFactory . 比起方式1 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好 . 可跟踪源码查看。

测试

    新建一个UserMapperImpl2.java
public class UserMapperImpl2 extends SqlSessionDaoSupport implements UserMapper{
    @Override
    public List selectUser() {
        return getSqlSession().getMapper(UserMapper.class).selectUser();
    }
}

继承了SqlSessionDaoSupport同时实现了UserMapper。因为已经有了sqlSession,所以sqlSessionTemplate都没有必要要了。

    注入到Spring中

    

这里直接用了sqlSessionFactory,没必要sqlSessionTemplate了

    测试
public class MyTest {
    @Test
    public void test1(){
        ApplicationContext context = new
                ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper mapper = (UserMapper) context.getBean("userMapper2");
        List users = mapper.selectUser();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5721483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存