Spring SpringBoot是如何做到去xml的?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring SpringBoot是如何做到去xml的?相关的知识,希望对你有一定的参考价值。

参考技术A 使用configuration注解替换替换applicationContext.xml中的<beans>标签

SpringBoot除了高度集成封装了Spring一系列框架之外,还封装了web容器.
SpringBoot支持嵌入tomcat jetty undertow三种web容器,查看EmbeddedServletContainerAutoConfiguration 类源码可知.

在spring-boot-starter-web的pom中可以看到,springweb application默认使用的是tomcat容器.

1.实现javax.servlet.ServletContainerInitializer

就这样,springbootApplication执行main方法时启动tomcat容器,tomcat容器初始化加载时,会执行ServletContainerInitializer的onStartup方法,Spring通过对该接口的实现,完成spring上下文,配置,servlet等的初始化装载.

Springboot如何创建一个项目

一、什么是SpringBoot;

Springboot是一个快速开发框架。其采用了完全注解的方式,简化了xml配置。并通过springboot 父项目定义好了各类框架的版本信息,简化了maven依赖配置,及版本兼容性问题。内部通过java类配置了各类框架的整合配置,能够做到框架的自动装配。 总体来说简化了spring项目的初始搭建,降低了框架整合的复杂度,做到开箱即用。

优点:

1)简化了maven配置

2)自动装配spring和其他框架

3)简化了xml配置

4)内置了tomcat,无需war部署

5)天然集成微服务开发springcloud

 

二、Springboot项目的创建;

然后点击确定即可;

我们最开始的项目结构是这样的;

 

三、使用项目;

1)Springboot项目是一个标准的maven项目。

Resources目录下,默认生成了static,templates,application.properties三个目录和文件;

Static:用来存放静态资源(css js 图片 静态html);

Templates:用来存放模板页面(动态的页面,类似于jsp),templates下的内容是不能直接访问的,必须通过控制层进行跳转;

Src目录下会按groupid 和项目生成对应的包结构。在包中会生成一个springboot项目的启动类。我们可以通过运行该类中的main方法启动springboot项目;

Springboot推崇约定大于配置的思想。

 

2)@SpringBootApplication 注解是springboot启动类的注解。

其相当于以前版本中的三个注解:

@SpringbootConfiguration  指定springboot配置类的注解

@ComponentScan:组件扫描注解,相当于<comtext:compent-scan> 扫描包注解

 Springboot中约定,自动会扫描启动类所在包及其子包下的所有的类。

@EnableAutoConfiguration 自动装配注解,springboot会根据导入的依赖关系,去自动配置装载框架相关的配置项。

 

3)Springboot整合mybatis;

1、导入mybatis依赖;

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

2、在springboot启动类上添加@MapperScan注解,扫描Mapper接口所在的包;

@SpringBootApplication//springboot项目的启动类注解
@MapperScan("com.seecen.springboot.mapper")//扫描mybatis Mapper接口
public class SpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}

3、Springboot的配置文件中Application.properties中配置 mapper.xml位置,别名等配置;

#mybatis配置
#配置mybatis mapper.xml文件的位置
mybatis.mapper-locations=classpath:mapper/*.xml
#配置别名,指定实体类所在包
mybatis.type-aliases-package=com.seecen.springboot.entity

4、Springboot整合mybatis分页插件;

1)     导入分页插件依赖;

        <!-- 分页插件 -->
        <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.12</version>
        </dependency>

2)     在springboot application.properties配置文件中配置分页插件;

#mybatis分页插件
#指定数据库方言
pagehelper.helper-dialect=oracle
pagehelper.reasonable=true
pagehelper.params=pageNum=pageHelperStart;pageSize=pageHelperRows
pagehelper.page-size-zero=true
pagehelper.support-methods-arguments=true

3)然后需要在方法中写PageInfo分页方法;

@Controller
@RequestMapping("/admin")
public class AdminController {
    @Autowired
    private AdminService adminService;
    @ResponseBody
    @GetMapping("/all")
    public PageInfo<TAdmin> selectAll(Integer pageSize, Integer pageNum){
        return adminService.selectAll(pageSize,pageNum);
    }
}
public interface AdminService {
    PageInfo<TAdmin> selectAll(Integer pageSize, Integer pageNum);
}
@Service
public class AdminServiceImpl implements AdminService{
    @Autowired
    private AdminMapper adminMapper;
    @Override
    public PageInfo<TAdmin> selectAll(Integer pageSize, Integer pageNum)
    {
        PageHelper.startPage(pageNum,pageSize);
        List<TAdmin> tAdmins = adminMapper.selectAll();
        return new PageInfo<>(tAdmins);
    }
}
@Repository
public interface AdminMapper {

    @Select("select * from t_admin")
    List<TAdmin> selectAll();

    TAdmin selectById(Integer id);
}

 

5、Springboot mybatis打印sql日志;

#配置springboot的日志级别
#配置日志的级别(全局配置)debug < info < warn < error
logging.level.root=info
#配置特定包下的日志级别
logging.level.com.seecen.springboot.mapper=debug
logging.level.com.seecen.springboot.service=debug

6、Mybatis 逆向工程,生成Mapper 和mapper.xml文件

(1)     导入maven的mybatis逆向工程插件;

  <!--      逆向生成代码  mybatis代码生成器-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.5</version>
        </dependency>
<!--        mybatis 代码生成器maven插件-->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.5</version>
                <configuration>
                    <!--        指定配置文件的路径-->
                    <configurationFile>src/main/resources/mybatis/generatorConfig.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
            </plugin>

(2)     编写配置文件;

generatorConfig.xml文件代码为:

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <!--加载jdbc.properties配置文件-->
    <properties resource="mybatis/jdbc.properties" />
    <!--配置驱动jar包的位置-->
    <classPathEntry location="${driverClassPath}" />
    <!--
        context:生成一组对象的环境
        id:必选,上下文id,用于在生成错误时提示
        defaultModelType:指定生成对象的样式
            1,conditional:类似hierarchical;
            2,flat:所有内容(主键,blob)等全部生成在一个对象中;
            3,hierarchical:主键生成一个XXKey对象(key class),Blob等单独生成一个对象,其他简单属性在一个对象中(record class)
        targetRuntime:
            1,MyBatis3:默认的值,生成基于MyBatis3.x以上版本的内容,包括XXXBySample;
            2,MyBatis3Simple:类似MyBatis3,只是不生成XXXBySample;
        introspectedColumnImpl:类全限定名,用于扩展MBG
    -->
    <context id="context1" targetRuntime="MyBatis3">

        <!-- genenat entity时,生成toString -->
        <plugin type="org.mybatis.generator.plugins.ToStringPlugin"/>
        <!-- generate entity时,生成serialVersionUID -->
        <plugin type="org.mybatis.generator.plugins.SerializablePlugin"/>
        <!--不生成注释-->
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>

        <!--配置数据库连接信息-->
        <jdbcConnection driverClass="${jdbc.driver}"
            connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}" />
        <!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL和 NUMERIC 类型解析为java.math.BigDecimal -->
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- java模型创建器,是必须要的元素
            负责:1,key类(见context的defaultModelType);2,java类;3,查询类
            targetPackage:生成的类要放的包,真实的包受enableSubPackages属性控制;
            targetProject:目标项目,指定一个存在的目录下,生成的内容会放到指定目录中,如果目录不存在,MBG不会自动建目录
         -->
        <javaModelGenerator targetPackage="com.seecen.springboot.entity"
            targetProject="src/main/java">
            <!-- 设置是否在getter方法中,对String类型字段调用trim()方法 -->
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成SQL map的XML文件生成器,
                    注意,在Mybatis3之后,我们可以使用mapper.xml文件+Mapper接口(或者不用mapper接口),
                        或者只使用Mapper接口+Annotation,所以,如果 javaClientGenerator配置中配置了需要生成XML的话,这个元素就必须配置
                    targetPackage/targetProject:同javaModelGenerator
                 -->
        <sqlMapGenerator targetPackage="mapper"
            targetProject="src/main/resources"></sqlMapGenerator>

        <!-- 对于mybatis来说,即生成Mapper接口,注意,如果没有配置该元素,那么默认不会生成Mapper接口
            targetPackage/targetProject:同javaModelGenerator
            type:选择怎么生成mapper接口(在MyBatis3/MyBatis3Simple下):
                1,ANNOTATEDMAPPER:会生成使用Mapper接口+Annotation的方式创建(SQL生成在annotation中),不会生成对应的XML;
                2,MIXEDMAPPER:使用混合配置,会生成Mapper接口,并适当添加合适的Annotation,但是XML会生成在XML中;
                3,XMLMAPPER:会生成Mapper接口,接口完全依赖XML;
            注意,如果context是MyBatis3Simple:只支持ANNOTATEDMAPPER和XMLMAPPER
        -->
        <javaClientGenerator targetPackage="com.seecen.springboot.mapper"
            targetProject="src/main/java" type="XMLMAPPER" />

        <!-- 需要逆向 enableCountByExample="false" enableUpdateByExample="false"
          enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"
         -->
<!--我们需要生成哪个实体类,就直接改t_admin为哪个实体类即可-> <table tableName="t_admin"> <!--<columnOverride column="ID" javaType="java.lang.Integer"></columnOverride> <columnOverride column="dept" javaType="java.lang.Integer"></columnOverride>--> </table> </context> </generatorConfiguration>

jdbc.properties文件代码为:

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:XE
jdbc.username=blog
jdbc.password=123456
#\\u9A71\\u52A8jar\\u5305\\u7684\\u4F4D\\u7F6E,\\u5177\\u4F53\\u7684\\u8DEF\\u5F84\\u3002\\u9006\\u5411\\u751F\\u6210\\u4EE3\\u7801\\u65F6\\u4F7F\\u7528
driverClassPath=C:\\\\Users\\\\Administrator\\\\.m2\\\\repository\\\\com\\\\oracle\\\\ojdbc\\\\ojdbc8\\\\19.3.0.0\\\\ojdbc8-19.3.0.0.jar
driverClassPath为你自己maven仓库的包的路径;

(3)     运行插件;

我们如果是测试的话,就在那个mapper.java文件对着那个实体类ctrl+shift+T,就可以快速生成测试方法了;

测试文件为:

测试结果为:

 

以上是关于Spring SpringBoot是如何做到去xml的?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 2.x 之 Logging

SpringBoot是如何做到无XML文件做配置的?

spring boot学习(十三)SpringBoot缓存(EhCache 2.x 篇)

Spring-Cloud的版本是如何定义的

大文件上传时如何做到秒传?

Spring Boot 2.x 集成 Redis 缓存