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的?的主要内容,如果未能解决你的问题,请参考以下文章