您当前的位置: 首页 >  mybatis

white camel

暂无认证

  • 2浏览

    0关注

    442博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring集成MyBatis的三种实现方式

white camel 发布时间:2020-04-01 19:58:54 ,浏览量:2

目录
  • 一、回顾MyBatis入门
  • 二、Spring集成MyBatis
  • 三、整合实现一
  • 四、整合实现二
  • 五、整合实现三
一、回顾MyBatis入门

跳转到目录 也包括一些Spring需要的坐标


    
    
        junit
        junit
        4.12
        test
    
    
    
        org.projectlombok
        lombok
        1.16.20
        provided
    
    
    
        org.slf4j
        slf4j-log4j12
        1.7.25
        test
    
    
    
        mysql
        mysql-connector-java
        5.1.40
        runtime
    
    
    
        com.alibaba
        druid
        1.1.19
    
    
    
        org.mybatis
        mybatis
        3.5.0
    
    
    
    
        org.springframework
        spring-webmvc
        5.2.2.RELEASE
    
    
    
        org.springframework
        spring-jdbc
        5.2.2.RELEASE
    
    
        org.springframework
        spring-test
        5.2.2.RELEASE
    
    
        org.aspectj
        aspectjweaver
        1.8.13
    

数据库关系表设计

CREATE TABLE `t_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) DEFAULT NULL,
  `age` tinyint(4) DEFAULT NULL,
  `born_date` date DEFAULT NULL,
  `head_img` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;

domain实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private Date bornDate;
    private String headImg;
}

实现mybatis的配置文件





    
        
    

    
        
            
            
                
                
                
                
            
        
    

	
        
    


UserMapper接口编写

public interface UserMapper {
    List selectAll();
}

接口对应的Mapper映射文件






    
        
        
        
        
        
    

    
        SELECT id, name, age, born_date, head_img FROM t_user;
    
    

测试类

public class UserMapperTest {
    @Test
    public void test1() throws Exception{
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = factory.openSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List userList = mapper.selectAll();
        for (User user : userList) {
            System.out.println(user);
        }
        sqlSession.close();
    }
}
二、Spring集成MyBatis

跳转到目录 官方文档: mybatis-spring

什么是 MyBatis-Spring?

  • MyBatis-Spring 会帮助你将 MyBatis 代码无缝地整合到 Spring 中。
  • 在开始使用 MyBatis-Spring 之前,你需要先熟悉 Spring 和 MyBatis 这两个框架和有关它们的术语。

MyBatis-Spring 需要以下版本: 在这里插入图片描述

Spring整合MyBatis, 主要目的就是把MyBatis核心配置文件中的内容,交给Spring来处理; 再简单点来说, 将MyBatis的SqlSessionFactoryMapper的创建交给Spring处理;

1、简单介绍

    
    
        org.mybatis
        mybatis-spring
        2.0.0
    

在这里插入图片描述


  

在这里插入图片描述

    
    
        
        
    

现在,这个 bean 就可以直接注入到你的 DAO bean 中了。你需要在你的 bean 中添加一个 SqlSession 属性,就像下面这样:

public class UserMapperImpl implements UserMapper{
    
    private SqlSessionTemplate sqlSession;

    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }

    public List selectAll() {
        return sqlSession.getMapper(UserMapper.class).selectAll();
    }
}

按下面这样,注入 SqlSessionTemplate

    
    
        
    
三、整合实现一

跳转到目录

1、创建Spring配置文件applicationContext.xml


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

db.properties

#连接数据库的四个基本要素
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm
jdbc.username=root
jdbc.password=1111
#druid连接池其他配置,省略





    
    
    
    

3、配置SqlSessionFactory,关联MyBatis


    
    
    
    
    
    
    
    

4、注册sqlSessionTemplate,关联sqlSessionFactory;


    
    

5、增加Mapper(Dao)接口的实现类;私有化sqlSessionTemplate
public class UserMapperImpl implements UserMapper{
    
    private SqlSessionTemplate sqlSession;

    public void setSqlSession(SqlSessionTemplate sqlSession) {
        this.sqlSession = sqlSession;
    }

    public List selectAll() {
        return sqlSession.getMapper(UserMapper.class).selectAll();
    }
}
6、注册bean实现

    

7、测试
 @Test
public void test1() throws Exception{
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserMapper userMapper = context.getBean("userMapperImpl", UserMapper.class);
    for (User user : userMapper.selectAll()) {
        System.out.println(user);
    }
}

结果成功输出!现在我们的Mybatis配置文件的状态!发现都可以被Spring整合!




    
    
        
    

其实我们可以通过Spirng完全将mybatis配置文件去除,这里还是保留一个配置吧!

四、整合实现二

跳转到目录 让Dao继承Support类 , 直接利用 getSqlSession()获得 , 然后直接注入SqlSessionFactory . 比起方式1 , 不需要管理SqlSessionTemplate , 而且对事务的支持更加友好

官方文档截图: 在这里插入图片描述

1、将我们上面写的UserMapperImpl修改一下
public class UserMapperImpl extends SqlSessionDaoSupport implements UserMapper {
    public List selectAll() {
        return getSqlSession().getMapper(UserMapper.class).selectAll();
    }
}
2、修改bean的配置

    

3、测试
 @Test
public void test2() throws Exception{
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserMapper userMapper = context.getBean("userMapperImpl", UserMapper.class);
    for (User user : userMapper2.selectAll()) {
        System.out.println(user);
    }
}
五、整合实现三

跳转到目录 前两种的整合实现方式,都创建了Dao接口的实现类,通过实现类来获取mapper对象; 使用整合方式三,我们告诉Spring,让他来帮我们创建mapper的代理对象即可!

1、配置MapperFactoryBean,Spring帮我们创建 Mapper的代理对象



    
    
    


或者采用下面扫描的方式


	

此时的applicationContext.xml文件; 其他和方式一相同 在这里插入图片描述

2、测试
public class UserMapperTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    public void testSelectAll(){
        /*
        // 非DI注入的方式
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserMapper mapper = context.getBean("userMapper", UserMapper.class);
        for (User user : mapper.selectAll()) {
            System.out.println(user);
        }*/

        // DI注入方式
        List users = userMapper.selectAll();
        for (User user : users) {
            System.out.println(user);
        }
    }
}

此时, 通过DI注入的方式获取到mapper对象,然后进行CRUD即可!

总结 : 整合到spring中以后可以完全不要mybatis的配置文件,除了这些方式可以实现整合之外,我们还可以使用注解来实现
关注
打赏
1661428283
查看更多评论
立即登录/注册

微信扫码登录

0.0403s