Spring Mybatis Maven 项目搭建(Java配置)
2016-10-11 07:56
525 查看
本文主要介绍 spring mybatis maven 项目的搭建,使用 java 方式配置。本文只贴出主要的代码,完成的代码请参考文末的 GitHub 地址。
实现的功能有:
Maven 管理整个应用的生命周期
spring 处理客户端请求
mybatis 作为持久层框架
alibaba druid 作为数据库连接池
mybatis generator 生成实体和 mapper
velocity 渲染视图
整体项目结构是按照 maven 默认的结构组织的;
配置放在
mybatis generator 配置文件和 mybatis xml 放在
velocity 的配置放在 web 根目录(
在该配置中,配置了根应用上下文(也就是
该配置中定义了 spring 扫描的包,排除了 web 方面的包;导入了数据库的配置文件(
该配置文件配置了数据源,mybatis 的相关配置,事务管理。
下面是数据库的配置文件,也就是
这个 java 文件配置了很多东西,具体请参考以前的博文或其他相关的资料。
Velocity 配置文件和 velocity tool 配置 xml:
然后使用如下命令启动 tomcat:
浏览器输入
运行成功。。。
GitHub:https://github.com/acherie/spring-mybatis-maven
Mybatis:mybatis - MyBatis 3 | Introduction
实现的功能有:
Maven 管理整个应用的生命周期
spring 处理客户端请求
mybatis 作为持久层框架
alibaba druid 作为数据库连接池
mybatis generator 生成实体和 mapper
velocity 渲染视图
项目整体结构
整体项目结构是按照 maven 默认的结构组织的;
配置放在
org.acherie.demo.config包下,web 配置放在
org.acherie.demo.web.config包下;
mybatis generator 配置文件和 mybatis xml 放在
resources文件夹下;
velocity 的配置放在 web 根目录(
webapp)下的
WEB-INF/config文件夹下;
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.acherie</groupId> <artifactId>mybatis</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <!-- 依赖版本 --> <springframework.version>4.3.2.RELEASE</springframework.version> <junit.version>4.12</junit.version> <jackson.version>2.8.2</jackson.version> <mysql.version>5.1.38</mysql.version> <mybatis.version>3.4.1</mybatis.version> <mybatis.spring.version>1.3.0</mybatis.spring.version> <mapper.version>3.3.6</mapper.version> <pagehelper.version>4.1.4</pagehelper.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${springframework.version}</version> </dependency> <!--spring-json依赖--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>${jackson.version}</version> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!--mysql--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!--druid--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.11</version> </dependency> <!--Mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis.spring.version}</version> </dependency> <!-- Mybatis Generator --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> <scope>compile</scope> <optional>true</optional> </dependency> <!-- Test dependencies --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>${junit.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.0.52-beta</version> <scope>test</scope> </dependency> <!-- velocity --> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-tools</artifactId> <version>2.0</version> </dependency> </dependencies> <build> <finalName>web</finalName> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </pluginManagement> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <address>localhost</address> <port>8080</port> <path>/${project.artifactId}</path> <uriEncoding>UTF-8</uriEncoding> </configuration> </plugin> <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-maven-plugin</artifactId> <version>1.3.5</version> <configuration> <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile> <overwrite>true</overwrite> <verbose>true</verbose> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper</artifactId> <version>${mapper.version}</version> </dependency> </dependencies> </plugin> </plugins> </build> </project>
Web 应用入口
在 Servlet 2.5,整个 web 应用的入口为web.xml文件。因为使用了 Servlet 3.0,所以也就改成了 java 配置,而 java 配置的入口文件在本应用中为
WebInitialize类。
package org.acherie.demo.config; import org.acherie.demo.web.config.WebConfig; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { /** * 配置 Spring 根配置的 classes * @return */ @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[]{RootConfig.class}; } /** * 配置 Spring DispatcherServlet 配置的 classes * @return */ @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[]{WebConfig.class}; } @Override protected String[] getServletMappings() { return new String[]{"/"}; } }
在该配置中,配置了根应用上下文(也就是
ContextLoaderListener配置的应用上下文)和
DispatcherServlet的应用上下文和对应的 URL 映射。
根应用上下文(RootConfig)
package org.acherie.demo.config; import org.springframework.context.annotation.*; import org.springframework.core.type.filter.RegexPatternTypeFilter; import java.util.regex.Pattern; @Configuration @PropertySource("classpath:config.properties") @ComponentScan(basePackages = {"org.acherie.demo"}, excludeFilters = { @ComponentScan.Filter(type = FilterType.CUSTOM, value = RootConfig.WebPackage.class) }) @Import(DataConfig.class) public class RootConfig { // 内部类,用来排除 web 相关的包,因为这些包已经在 WebConfig 中导入了 public static class WebPackage extends RegexPatternTypeFilter { public WebPackage() { super(Pattern.compile("org\\.acherie\\.web")); } } }
该配置中定义了 spring 扫描的包,排除了 web 方面的包;导入了数据库的配置文件(
DataConfig.class)。
DataConfig配置如下:
package org.acherie.demo.config; import com.alibaba.druid.pool.DruidDataSource; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.annotation.MapperScan; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; // @MapperScan 设置 java mapper 扫描的包 @Configuration @EnableTransactionManagement @MapperScan(basePackages = "org.acherie.demo.dao") public class DataConfig { @Autowired public Environment env; @Bean(initMethod = "init", destroyMethod = "close") public DruidDataSource dataSource() { DruidDataSource dataSource = new DruidDataSource(); // 基本属性 url、user、password dataSource.setDriverClassName(env.getProperty("jdbc.driverClass")); dataSource.setUrl(env.getProperty("jdbc.url")); dataSource.setUsername(env.getProperty("jdbc.user")); dataSource.setPassword(env.getProperty("jdbc.password")); // 配置初始化大小、最小、最大 dataSource.setInitialSize(1); dataSource.setMinIdle(1); dataSource.setMaxActive(20); // 配置获取连接等待超时的时间 dataSource.setMaxWait(60000); // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 dataSource.setTimeBetweenEvictionRunsMillis(60000); // 配置一个连接在池中最小生存的时间,单位是毫秒 dataSource.setMinEvictableIdleTimeMillis(300000); dataSource.setValidationQuery("SELECT 'X'"); dataSource.setTestWhileIdle(true); dataSource.setTestOnBorrow(false); dataSource.setTestOnReturn(false); // 是否打开PSCache,并且指定每个连接上PSCache的大小 dataSource.setPoolPreparedStatements(false); dataSource.setMaxPoolPreparedStatementPerConnectionSize(20); return dataSource; } @Bean public SqlSessionFactory sqlSessionFactory(ApplicationContext applicationContext) throws Exception { SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); sessionFactory.setDataSource(dataSource()); // 设置 mapper xml sessionFactory.setMapperLocations(applicationContext.getResources("classpath:mapper/**/*.xml")); return sessionFactory.getObject(); } @Bean public PlatformTransactionManager txManager() { return new DataSourceTransactionManager(dataSource()); } }
该配置文件配置了数据源,mybatis 的相关配置,事务管理。
下面是数据库的配置文件,也就是
RootConfig.class引入的那个文件:
# config.properties # \u6570\u636E\u5E93\u914D\u7F6E jdbc.driverClass=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/world jdbc.user=root jdbc.password=root #c3p0 jdbc.maxPoolSize=50 jdbc.minPoolSize=10 jdbc.maxStatements=100 jdbc.testConnection=true # \u901A\u7528Mapper\u914D\u7F6E mapper.plugin = tk.mybatis.mapper.generator.MapperPlugin mapper.Mapper = tk.mybatis.mapper.common.Mapper # mybatis generator drive.class.path=E:/Maven/repository/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar # 包路径配置 model.package=org.acherie.demo.model.generator dao.package=org.acherie.demo.dao.generator xml.mapper.package=org.acherie.demo.dao.generator target.project=src/main/java xml.target.project=src/main/resources
Spring MVC 配置
package org.acherie.demo.web.config; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.web.servlet.ViewResolver; import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.servlet.view.velocity.VelocityConfigurer; import org.springframework.web.servlet.view.velocity.VelocityViewResolver; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @Configuration @EnableWebMvc @ComponentScan("org.acherie.demo.web") public class WebConfig extends WebMvcConfigurerAdapter { // 配置 VelocityViewResolver。因为 velocity 从2007年就未更新,所以 spring 从 4.3 // 版本开始不赞成使用 velocity,推荐使用 FreeMarker @Bean public ViewResolver viewResolver() { VelocityViewResolver resolver = new VelocityViewResolver(); resolver.setContentType("text/html;charset=UTF-8"); resolver.setPrefix("/views/"); resolver.setSuffix(".html"); resolver.setToolboxConfigLocation("/WEB-INF/config/velocity-toolbox.xml"); return resolver; } // Velocity 的配置 @Bean public VelocityConfigurer velocityConfigurer(ApplicationContext context) { VelocityConfigurer velocityConfigurer = new VelocityConfigurer(); velocityConfigurer.setResourceLoaderPath("/"); Map<String, Object> velocityPropertiesMap = new HashMap<>(); velocityPropertiesMap.put("input.encoding", "UTF-8"); velocityPropertiesMap.put("output.encoding", "UTF-8"); velocityConfigurer.setVelocityPropertiesMap(velocityPropertiesMap); velocityConfigurer.setConfigLocation(context.getResource("/WEB-INF/config/velocity.properties")); return velocityConfigurer; } // 开启默认 Servlet 的支持,可用于处理静态文件 @Override public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { configurer.enable(); } // 配置 HttpMessageConverter,可配置多个自定义的 HttpMessageConverter @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { converters.add(jacksonConverter()); } // 配置自定义的 MappingJackson2HttpMessageConverter,用于处理 application/json 类型的 mediaType, // 并添加了 application/xml 转 json 的支持 @Bean public MappingJackson2HttpMessageConverter jacksonConverter() { List<MediaType> mediaTypes = new ArrayList<>(); mediaTypes.add(MediaType.APPLICATION_XML); MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setSupportedMediaTypes(mediaTypes); return converter; } }
这个 java 文件配置了很多东西,具体请参考以前的博文或其他相关的资料。
Velocity 配置文件和 velocity tool 配置 xml:
directive.foreach.counter.name = velocityCount directive.foreach.counter.initial.value = 1 input.encoding=UTF-8 output.encoding=UTF-8 default.contentType=text/html; charset\=UTF-8 #velocimacro.library = webpage/ctcshop/macro.html,webpage/ctcshop/paginate.html,webpage/ctcshop/paginate2.html #velocimacro.library.autoreload =true
<?xml version="1.0" encoding="UTF-8"?> <toolbox> <tool> <key>date</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.DateTool</class> <parameter name="format" value="yyyy-MM-dd" /> </tool> <tool> <key>number</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.NumberTool</class> </tool> <tool> <key>math</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.MathTool</class> </tool> <tool> <key>esc</key> <scope>application</scope> <class>org.apache.velocity.tools.generic.EscapeTool</class> </tool> </toolbox>
运行
使用 maven 的 tomcat插件运行应用,为了每次能使用缩写运行 tomcat,需要在 maven 的settings.xml中加入如下内容:
<settings> ... <pluginGroups> <!-- pluginGroup | Specifies a further group identifier to use for plugin lookup. <pluginGroup>com.your.plugins</pluginGroup> --> <pluginGroup>org.apache.tomcat.maven</pluginGroup> </pluginGroups> ... </settings>
然后使用如下命令启动 tomcat:
tomcat7:run
浏览器输入
http://localhost:8080/mybatis,出现如下界面:
运行成功。。。
总结
本文并没有把整个项目的代码完整的贴出来,需要查看完整代码的童鞋,可以移步 github 地址。GitHub:https://github.com/acherie/spring-mybatis-maven
参考
Maven:Welcome to Apache MavenMybatis:mybatis - MyBatis 3 | Introduction
相关文章推荐
- java 搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目
- Java maven项目的搭建,配置web框架以及Spring
- java 搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目
- eclipse 中创建 整合springmvc+mybatis+maven 的java web项目步骤,以及maven仓库配置
- 从零开始搭建maven+springmvc+mybatis web项目(2)---springmvc配置文件编写
- java 搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目
- (四)从零搭建maven+spring+mybatis项目之mybatis与事务配置
- Java后台开发<二>:Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
- 记录-项目java项目框架搭建的一些问题(maven+spring+springmvc+mybatis)
- Spring 、SpringMVC、Mybatis、MySQL、Maven、Tomcat搭建JavaWeb项目流程---学习笔记(一)工具准备及环境配置
- java搭建基于springboot的ssm(spring + springmvc + mybatis)的maven项目
- java SSM(Spring+SpringMVC+MyBatis)maven项目 intellij idea 2017配置 MAC,(Linux,ubuntu,centos 只要更改相应目录即可)
- (三)从零搭建maven+spring+mybatis项目之spring配置
- maven 项目(三) spring集成mybatis事务配置(扫描注解)
- 手把手教你搭建自己的Java Web(Android)项目(SpringMVC + Mybatis服务端,Html5 Web端, Android客户端实现)
- Spirng+SpringMVC+Maven+Mybatis+MySQL项目搭建
- 使用Maven搭建Spring+SpringMVC+Mybatis+ehcache项目
- springmvc+mongodb+maven 项目搭建配置
- 关于maven+springMVC+mybatis搭建的web项目问题
- spring+springmvc+mybatis+maven搭建的框架项目