`
234390216
  • 浏览: 10232885 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462622
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775513
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398351
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395022
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679980
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530892
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1183945
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467902
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151382
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68148
社区版块
存档分类
最新评论

Spring Boot(19)——使用Mybatis

阅读更多

使用Mybatis

Mybatis官方提供了整合Spring Boot的Starter,需要在Spring Boot应用中使用Mybatis,需要在pom.xml中添加如下依赖,当前最新的版本是1.3.2。

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

mybatis-spring-boot-starter默认会扫描@SpringBootApplication标注的Class所在package下的标注了@org.apache.ibatis.annotations.Mapper的接口作为Mapper,并注册为Spring bean。所以此时可以定义类似如下这样的Mapper接口。

@Mapper
public interface UserMapper {

    @Select("select * from tb_user where username=#{username}")
    User findByUsername(String username);
    
}

然后可以在需要的地方遵循Spring规范进行自动注入即可。

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;
    
    public User findByUsername(String username) {
        return this.userMapper.findByUsername(username);
    }
    
}

以上就是最简单的在Spring Boot应用中使用Mybatis的方式了。Mybatis的自动配置由org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration负责,其会自动寻找DataSource bean,然后注册SqlSessionFactory、SqlSessionTemplate类型的bean,并能自动扫描Mapper接口。

如果不想通过注解写SQL,想使用Mapper.xml也是可以的,比如下面就是UserMapper对应的UserMapper.xml,其中定义了一个findById的查询。

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper  
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.elim.springboot.mybatis.UserMapper">

    <select id="findById" resultType="com.elim.springboot.mybatis.User"
        parameterType="java.lang.Long">
        select * from tb_user where id=#{id}
    </select>

</mapper>

那对应的UserMapper接口中也需要定义一个findById方法,这个时候UserMapper接口的定义是如下这样子。

@Mapper
public interface UserMapper {

    @Select("select * from tb_user where username=#{username}")
    User findByUsername(String username);
    
    User findById(Long id);
    
}

接下来的用法是一模一样的。但是需要注意的是UserMapper接口上的@Mapper注解不能去掉,因为此时Mybatis还要靠它来识别Mapper接口。如果希望不加上@Mapper也能被识别为Mapper接口,则需要引入@MapperScan。比如下面代码就通过@MapperScan指定了将扫描com.elim.springboot.mybatis包及其子包下的接口。@MapperScan还可以通过markerInterface属性指定需要扫描的接口继承的父接口,通过annotationClass属性指定Mapper接口上应该添加的注解,可以通过sqlSessionTemplateRef属性指定扫描到的Mapper接口需要绑定的SqlSessionTemplate对应的bean,可以通过sqlSessionFactoryRef属性指定需要使用的SqlSessionFactory对应的bean,更多配置信息可以参考MapperScan的API文档。

@SpringBootApplication
@MapperScan(basePackages="com.elim.springboot.mybatis")
public class MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }
    
}

如果我们的Mapper是放在不同的package下面的,则可以指定多个package,packages属性对应的是一个数组。如果所放的多个package是具有一定规则的,则可以应用通配符来表示。比如下面的将扫描com.elim.package1.mapper,也会扫描com.elim.package2.mapper等等。如果期望匹配任意多级目录,则可以使用两个*,比如com.elim.**.mapper,会扫描com.elim.package1.package2.mapper包。

@SpringBootApplication
@MapperScan(basePackages="com.elim.*.mapper")
public class MybatisApplication {

    public static void main(String[] args) {
        SpringApplication.run(MybatisApplication.class, args);
    }
    
}

可以通过mybatis.*进行一些自定义的配置。可以通过mybatis.type-aliases-package指定需要注册类型别名的包,多个包之间可以通过英文的逗号或分号分隔。比如下面的代码就指定了将扫描com.elim.springboot.mybatis包下面的Class进行别名注册。

mybatis.type-aliases-package=com.elim.springboot.mybatis

可以通过mybatis.executor-type=BATCH指定默认的ExecutorType为BATCH,对应Executor为BatchExecutor。

可以通过mybatis.type-handlers-package=com.elim.springboot.mybatis指定将在com.elim.springboot.mybatis包下寻找TypeHandler并进行注册,多个包之间可以通过英文的逗号或分号分隔。

如果Mapper.xml文件跟Mapper接口不是存放在相同的路径下,可以通过mybatis.mapper-locations属性指定Mapper.xml文件存放的路径,可以同时指定多个路径,多个路径间以英文的逗号分隔。

mybatis.mapper-locations=classpath*:mappers/*Mapper.xml

如果需要对org.apache.ibatis.session.Configuration进行全局配置可以通过mybatis.configuration.*进行配置,org.apache.ibatis.session.Configuration中拥有set方法的都是可以配置的,详情请参考对应的API文档。

使用Interceptor

MybatisAutoConfiguration会自动把bean容器中定义的org.apache.ibatis.plugin.Interceptor注册到创建的SqlSessionFactory中,所以如果需要开发自己的Interceptor,只需要把它定义为一个Spring bean即可自动完成注册,比如下面这样。

@Intercepts({
        @Signature(method = "query", type = Executor.class, args = { MappedStatement.class, Object.class,
                RowBounds.class, ResultHandler.class }),
        @Signature(method = "prepare", type = StatementHandler.class, args = { Connection.class, Integer.class}) })
@Component
public class MyInterceptor implements Interceptor {

    public Object intercept(Invocation invocation) throws Throwable {
        Object result = invocation.proceed();
        System.out.println("Invocation.proceed()--" + result + "---" + invocation.getMethod().getName());
        return result;
    }

    public Object plugin(Object target) {
        return Plugin.wrap(target, this);
    }

    public void setProperties(Properties properties) {
        String prop1 = properties.getProperty("prop1");
        String prop2 = properties.getProperty("prop2");
        System.out.println(prop1 + "------" + prop2);
    }

}

但如果是需要使用第三方已经实现好的Interceptor怎么办呢?比如需要使用流行的分页插件pagehelper,首先当然是引入PageHelper的依赖了。

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.1.4</version>
</dependency>

然后可以通过定义一个@Configuration配置类,然后定义PageInterceptor为一个bean,比如下面这样。

@Configuration
public class ThirdInterceptorConfiguration {
    
    @Bean
    public PageInterceptor newPageInterceptor() {
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties = new Properties();
        properties.put("dialet", "mysql");
        pageInterceptor.setProperties(properties);
        return pageInterceptor;
    }

}

最简单的办法是直接使用PageHelper提供的Spring Boot Starter,其PageHelperAutoConfiguration会负责往SqlSessionFactory中注册PageInterceptor。可以通过pagehelper.*配置相关的自定义属性。

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.5</version>
</dependency>

ConfigurationCustomizer

ConfigurationCustomizer是mybatis-spring-boot-starter提供的一个可用于对Configuration对象进行一些自定义配置的接口。MybatisAutoConfiguration在进行自动配置时会自动获取bean容器中定义的所有的ConfigurationCustomizer类型的bean,在创建好Configuration对象后会一一调用它们的customize()方法。下面的代码定义了一个ConfigurationCustomizer类型的bean,其配置启用了Mybatis的懒加载。

@Component
public class MyConfigurationCustomizer implements ConfigurationCustomizer {

    @Override
    public void customize(Configuration configuration) {
        configuration.setLazyLoadingEnabled(true);
    }

}

参考文档

http://www.mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/

(注:本文是基于Spring Boot 2.0.3所写)

 

0
0
分享到:
评论

相关推荐

    spring boot+thymeleaf+mybatis+mysql

    在本项目中,"spring boot+thymeleaf+mybatis+mysql" 是一个常见的Web应用开发框架组合,尤其适合初学者快速构建基于Java的Web应用程序。以下将详细阐述这四个关键技术及其整合过程中的关键知识点。 1. Spring Boot...

    spring boot 整合jsp与mybatis

    4. 在Spring Boot的主配置类中启用MyBatis,通常使用`@EnableMybatis`注解。 5. 使用`@MapperScan`注解扫描Mapper接口,让Spring自动创建Mapper的代理对象。 在项目结构中,通常会有一个`src/main/resources`目录,...

    spring boot+shiro+mybatis实现不同用户登录显示不同的权限菜单

    Spring Boot、Shiro和MyBatis这三大框架的组合提供了一种高效且灵活的方式来实现这一目标。本项目通过集成这三个工具,能够根据用户的登录身份展示不同的权限菜单,确保了用户只能访问他们被授权的功能。 **Spring ...

    spring boot + spring + mybatis 集合xml

    spring boot + spring + mybatis 集合xmlspring boot + spring + mybatis 集合xmlspring boot + spring + mybatis 集合xml

    Spring Boot+MySQL+Mybatis+Maven+IDEA(一个简单的数据库增删改查项目)

    在本项目中,我们主要探讨的是如何利用Spring Boot、MySQL、Mybatis以及Maven这四大核心技术,配合IDEA集成开发环境来实现一个基础的数据库增删改查功能。这是一个典型的Web应用开发流程,旨在帮助开发者快速搭建...

    spring-boot_mysql_mybatis_druid

    在IT领域,Spring Boot、MySQL、MyBatis和Druid是常见的开发工具和技术,它们各自在Web应用开发中扮演着重要角色。让我们深入探讨一下这些技术及其整合。 **Spring Boot** 是一个基于Spring框架的快速开发工具,它...

    spring-boot-starter-mybatis-spring-boot-1.0.2.zip

    总之,"spring-boot-starter-mybatis-spring-boot-1.0.2.zip"压缩包提供了一个方便的Spring Boot与MyBatis集成方案,通过简单的步骤,我们可以在Spring Boot应用中便捷地使用MyBatis进行数据库操作。这个版本适用于...

    spring-boot-starter-mybatis-spring-boot-1.1.0.zip

    这个starter是Spring Boot官方提供的一个启动器,它简化了MyBatis在Spring Boot项目中的配置,使得我们可以轻松地在Spring Boot应用中使用MyBatis。在`spring-boot-starter-mybatis-1.1.0`这个版本中,包含了对...

    spring-boot-starter-mybatis-spring-boot-2.2.1.tar.gz

    Spring Boot Starter MyBatis支持使用注解来替代XML配置,可以在Mapper接口上使用`@Mapper`注解,同时在方法上使用`@Select`、`@Insert`、`@Update`、`@Delete`等注解来编写SQL。 5. **MapperScannerConfigurer...

    spring boot+maven+mybatis+mysql

    在本教程中,我们将深入探讨如何使用Eclipse开发工具,结合Spring Boot、Maven、MyBatis和MySQL来创建一个完整的Java Web应用。这四个组件是现代Java开发中的关键技术,它们各自扮演着不同的角色,共同构建了一个...

    Java Web开发, Spring Boot, Layui, Mybatis-plus, 后台管理系统源代码, 实战项目

    该压缩文件包含了使用Spring Boot、Layui和Mybatis-plus开发的简单后台管理系统的源代码。这个项目提供了一套基本的功能和界面,帮助用户快速搭建和运行一个后台管理系统。 适用人群: 该资源适用于具备一定Java...

    spring-boot-starter-mybatis-spring-boot-1.3.3.zip

    本文将详细介绍如何在Spring Boot项目中集成MyBatis,以及如何获取和使用相关的资源。 一、Spring Boot与MyBatis的集成原理 Spring Boot通过`spring-boot-starter`系列模块简化了依赖管理,`spring-boot-starter-...

    Spring Boot + mysql +mybatis

    通过这个项目,初学者可以深入理解Spring Boot的自动配置原理,掌握MySQL数据库的使用,以及MyBatis如何简化SQL操作,为后续的Web应用开发打下坚实的基础。在实际项目中,还可以结合Spring Security进行权限控制,...

    spring boot+mybatis基础demo

    在本项目"spring boot+mybatis基础demo"中,我们将探讨如何使用Spring Boot与MyBatis框架构建一个基本的应用程序。这个示例演示了如何整合这两个流行的技术来处理数据库操作,其中数据源包括SQL Server和Oracle。...

    spring boot + maven + mybatis + layui

    MyBatis与Spring Boot结合使用时,可以通过Spring的注解驱动实现数据访问层的事务管理和其他服务。 **LayUI** LayUI是一个采用自身模块规范编写的前端UI框架,强调轻量、高性能、优雅的代码结构。LayUI提供了丰富的...

    全注解 spring boot +spring security + mybatis+druid+thymeleaf+mysql+bootstrap

    标题中的"全注解 spring boot +spring security + mybatis+druid+thymeleaf+mysql+bootstrap"是一个集成开发环境的配置,涉及到的主要技术有Spring Boot、Spring Security、MyBatis、Druid、Thymeleaf、MySQL以及...

    Spring Boot集成dubbo,mybatis构建maven工程

    在本项目中,我们主要探讨如何使用Spring Boot整合Dubbo和MyBatis来构建一个Maven工程。这个项目旨在提供一种高效、可扩展的服务架构,其中Spring Boot作为基础框架,Dubbo作为服务治理组件,而MyBatis则作为持久层...

    spring-boot-starter-mybatis-spring-boot-1.1.0.tar.gz

    Spring Boot以其简化Spring应用程序的初始化和配置而备受推崇,而MyBatis作为轻量级的持久层框架,以其灵活的SQL映射和易于使用的特性赢得了开发者们的喜爱。本文将深入探讨如何在Spring Boot项目中集成MyBatis,...

    spring-boot-starter-mybatis-spring-boot-2.3.1.tar.gz

    《Spring Boot集成MyBatis详解:以spring-boot-starter-mybatis-2.3.1为例》 在现代Java开发中,Spring Boot以其简洁、高效的特点成为首选框架,而MyBatis作为轻量级的持久层框架,也因其灵活的数据访问能力受到...

Global site tag (gtag.js) - Google Analytics