一創(chuàng)建gradle web項目
1.以下是我的項目結構web工程+工具module恬偷,mapper用來存放mybatis-plus自動生成類雄坪,通過 MpGenerator.class 生成些阅。
2.剛創(chuàng)建的web項目webapp下沒有web.xml文件五垮,生成方式如下所示
二spring配置 在resources文件夾下面新建以下文件(1~4)
1.jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/tobi_fresh?
useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=root
2.logo4j.properties
log4j.rootLogger=error, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache=error
log4j.logger.java.sql.ResultSet=error
log4j.logger.java.sql.Connection=error
log4j.logger.java.sql.Statement=error
log4j.logger.java.sql.PreparedStatement=error
log4j.logger.org.springframework=error
log4j.logger.org.springframework.jdbc.support=error
log4j.logger.org.springframework.scheduling=error
3.applicationContext.xml 省略頭尾<beans>
<context:component-scan base-package="com.tobi.*.services"/>
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--數(shù)據(jù)源-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init"
destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- 配置初始化大小膨处、最小崎场、最大 -->
<property name="initialSize" value="1"/>
<property name="minIdle" value="1"/>
<property name="maxActive" value="20"/>
<!-- 配置獲取連接等待超時的時間 -->
<property name="maxWait" value="60000"/>
<!-- 配置間隔多久才進行一次檢測佩耳,檢測需要關閉的空閑連接,單位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一個連接在池中最小生存的時間谭跨,單位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000"/>
<property name="validationQuery" value="SELECT 'x'"/>
<property name="testWhileIdle" value="true"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<!-- 打開PSCache干厚,并且指定每個連接上PSCache的大小 -->
<property name="poolPreparedStatements" value="true"/>
<property name="maxPoolPreparedStatementPerConnectionSize" value="20"/>
<!-- 配置監(jiān)控統(tǒng)計攔截的filters,去掉后監(jiān)控界面sql無法統(tǒng)計 -->
<property name="filters" value="stat"/>
</bean>
<!-- 定義 MP 全局策略 -->
<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!-- 主鍵策略配置 -->
<!-- 可選參數(shù) AUTO->`0`("數(shù)據(jù)庫ID自增") INPUT->`1`(用戶輸入ID") ID_WORKER->`2`("全局唯一ID") UUID->`3`("全局唯一ID") -->
<property name="idType" value="2"/>
<!-- 數(shù)據(jù)庫類型配置 -->
<!-- 可選參數(shù)(默認mysql) MYSQL->`mysql` ORACLE->`oracle` DB2->`db2` H2->`h2` HSQL->`hsql` SQLITE->`sqlite` POSTGRE->`postgresql` SQLSERVER2005->`sqlserver2005` SQLSERVER->`sqlserver` -->
<property name="dbType" value="MYSQL"/>
<!-- 全局表為下劃線命名設置 true -->
<!-- <property name="dbColumnUnderline" value="true"/>-->
<!--邏輯未刪除全局值-->
<!--<property name="logicNotDeleteValue" value="1"/>-->
<!--邏輯刪除全局值 邏輯刪除的字段需要注解 @TableLogic-->
<!-- <property name="logicDeleteValue" value="2"/>-->
</bean>
<!-- 會話工廠 完美整合 mybatis螃宙, 不需要mybatis配置文件-->
<bean name="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations">
<array>
<value>classpath:com/tobi/sqlxml/*.xml</value>
</array>
</property>
<!-- 配置包別名 -->
<property name="typeAliasesPackage" value="com.tobi.entity"/>
<!-- 插件配置 -->
<property name="plugins">
<array>
<!-- 分頁插件配置 -->
<bean id="paginationInterceptor" class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
<!-- 指定數(shù)據(jù)庫方言 -->
<property name="dialectType" value="mysql"/>
</bean>
<!-- SQL 執(zhí)行分析攔截器 stopProceed 發(fā)現(xiàn)全表執(zhí)行 delete update 是否停止運行 -->
<bean id="sqlExplainInterceptor" class="com.baomidou.mybatisplus.plugins.SqlExplainInterceptor">
<property name="stopProceed" value="false"/>
</bean>
</array>
</property>
<!-- MP 全局配置注入 -->
<property name="globalConfig" ref="globalConfig"/>
</bean>
<!-- DAO接口所在包名蛮瞄,Spring會自動查找其下的類 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.tobi.mapper"/>
</bean>
<!--聲明式事物管理器-->
<!-- 配置spring的PlatformTransactionManager,名字為默認值 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置基于注解的聲明式事務 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
4.spring-mvc.xml
<!-- 啟動注解驅(qū)動的Spring MVC功能谆扎,注冊請求url和注解POJO類方法的映射 -->
<mvc:default-servlet-handler/>
<!--自動生成文檔-->
<mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>
<mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>
<!-- controller 掃描 -->
<context:component-scan base-package="com.tobi.*.controller"/>
<bean class="com.tobi.config.SwaggerConfig"/>
<!-- handler(controller)映射器 用來尋找 controller 就是查找 對應的 @controller注解的類- 3.2以前是
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- handler(controller)適配器 用來執(zhí)行controller 3.2以前是 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
<!-- 消息解析 -->
<property name="messageConverters">
<list>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html; charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
<!-- 用來配置 返回json對象的參數(shù)挂捅, 默認 會出現(xiàn) 亂碼 需要導入 jackson-annotations.jar,jackson-core.jar,jackson-databind.jar -->
<bean
class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html; charset=UTF-8</value>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
<!-- 定義自己的綁定器 -->
<property name="webBindingInitializer" ref="binder"/>
</bean>
<bean id="binder"
class="org.springframework.web.bind.support.ConfigurableWebBindingInitializer">
<!-- 使用自己的綁定 解析器 比如 這里 用來 對 日期類型進行參數(shù)綁定 -->
<property name="conversionService" ref="timeConversionService"/>
<!-- 加 校驗器 -->
<!-- <property name="validator" -->
</bean>
<bean id="timeConversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<!-- 定義自己的轉換器 -->
<property name="converters">
<set>
</set>
</property>
</bean>
<!-- 視圖解析器 配置解析JSP jstl 的解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 配置前綴和后綴 , controller層 return modelandview 返回文件時 不用寫前面的路徑和后面的文件后綴名 -->
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
5.web.xml
<!--加載 spring 容器 的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--加載 spring 容器 的配置文件-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:log4j.properties</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<!--springMvc前端控制器-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<!--springMvc前端控制器-->
<!--阿里巴巴監(jiān)控配置-->
<servlet>
<servlet-name>DruidStatView</servlet-name>
<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DruidStatView</servlet-name>
<url-pattern>/mysql/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>/log.html</welcome-file>
</welcome-file-list>
<session-config>
<session-timeout>30</session-timeout>
</session-config>
三mapper自動生成 mapper燕酷、entity籍凝、mapperXml
1.在module的build.gradle中添加依賴
//MyBatis-plus
compile "com.baomidou:mybatis-plus:2.1.4"
compile group: 'org.apache.velocity', name: 'velocity', version: '1.7'
//數(shù)據(jù)庫驅(qū)動
compile "mysql:mysql-connector-java:5.1.23"
2.在 Java 文件夾建一個main方法(僅供參考,生成規(guī)則苗缩,數(shù)據(jù)庫地址需要自己配置)
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("D:\\ProjectHub\\tobi\\mapper\\src\\main\\java");
gc.setFileOverride(true);
gc.setActiveRecord(true);
gc.setEnableCache(false);// XML 二級緩存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML columList
gc.setAuthor("tobi");
// 自定義文件命名饵蒂,注意 %s 會自動填充表實體屬性!
// dev.setMapperName("%sDao");
// dev.setXmlName("%sDao");
// dev.setServiceName("MP%sService");
// dev.setServiceImplName("%sServiceDiy");
mpg.setGlobalConfig(gc);
// 數(shù)據(jù)源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setTypeConvert(new MySqlTypeConvert(){
// 自定義數(shù)據(jù)庫表字段類型轉換【可選】
@Override
public DbColumnType processTypeConvert(String fieldType) {
return super.processTypeConvert(fieldType);
}
});
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("root");
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/tobi_fresh?characterEncoding=utf8");
mpg.setDataSource(dsc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
// strategy.setCapitalMode(true);// 全局大寫命名 ORACLE 注意
strategy.setTablePrefix(new String[] {"b_","c_","m_","p_","s_","t_"});// 此處可以修改為您的表前綴
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
// strategy.setInclude(new String[] { "user" }); // 需要生成的表
// strategy.setExclude(new String[]{"test"}); // 排除生成的表
// 自定義實體父類
// strategy.setSuperEntityClass("com.baomidou.demo.TestEntity");
// 自定義實體酱讶,公共字段
// strategy.setSuperEntityColumns(new String[] { "test_id", "age" });
// 自定義 mapper 父類
// strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");
// 自定義 service 父類
// strategy.setSuperServiceClass("com.baomidou.demo.TestService");
// 自定義 service 實現(xiàn)類父類
// strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl");
// 自定義 controller 父類
// strategy.setSuperControllerClass("com.baomidou.demo.TestController");
// 【實體】是否生成字段常量(默認 false)
// public static final String ID = "test_id";
// strategy.setEntityColumnConstant(true);
// 【實體】是否為構建者模型(默認 false)
// public User setName(String name) {this.name = name; return this;}
// strategy.setEntityBuliderModel(true);
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com");
pc.setModuleName("tobi");
pc.setMapper("mapper");
pc.setXml("sqlxml");
mpg.setPackageInfo(pc);
// 自定義模板配置退盯,可以 copy 源碼 mybatis-plus/src/main/resources/template 下面內(nèi)容修改,
// 放置自己項目的 src/main/resources/template 目錄下, 默認名稱一下可以不配置泻肯,也可以自定義模板名稱
TemplateConfig tc = new TemplateConfig();
tc.setController(null);
//tc.setEntity("/templates/entity.java.vm");//模版自定義添加了邏輯刪除注解渊迁。
//tc.setMapper(null);
//tc.setXml(null);
tc.setService(null);
tc.setServiceImpl(null);
//如上任何一個模塊如果設置 空 OR Null 將不生成該模塊。
mpg.setTemplate(tc);
// 執(zhí)行生成
mpg.execute();
// 打印注入設置
// System.err.println(mpg.getCfg().getMap().get("abc"));
}
四 創(chuàng)建 controller, services
回到web項目,創(chuàng)建controller 和 services 包 類使用 @Controller @Services 注解
@Controller
public class LogController {
@RequestMapping("log")
@ResponseBody
public AjaxMsg log(){
Map<String,Object> map=new HashMap<>();
map.put("title","hello word");
map.put("content","a");
AjaxMsg ajaxMsg=new AjaxMsg();
ajaxMsg.setCode(200);
ajaxMsg.setMsg("a");
ajaxMsg.setObject(map);
return ajaxMsg;
}
private class AjaxMsg{
```````
}
@RequestMapping("indexJsp")
public String indexJsp(Model model){
model.addAttribute("a","a");
return "index";
}
}
里面有個@ResponseBody注解用于瀏覽器直接返回 json 需要用到
compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jackson_version
compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: jackson_version
compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: jackson_version
~ 對應spring-mvc灶挟,xml 中映射器適配器配置
五Hello word
添加一個Tomcat server 并部署 war(exploded) 運行后 輸了localhost:8080/index.html
最后
報錯406琉朽,檢查spring-mvc.xml 映射器適配器;jackson的三個包有沒有添加稚铣,
報錯404箱叁,檢查web.xml過濾器