記錄SSM 框架整合只锭、使用Maven構(gòu)建鱼蝉,說M實(shí)際上是MybatisPlus洒嗤、是一種對(duì)Mybatis封裝好的框架、在不影響Mybatis原生的情況下魁亦,進(jìn)行的一種擴(kuò)展渔隶。
框架支持Freemarker 和 JSP 雙View展示(優(yōu)先找Freemarker)。
項(xiàng)目環(huán)境:
JDK : 1.7
SpringMVC : 4.2.5
Spring : 4.2.5
Mybatis Plus : 2.0.5
IntelliJ IDEA : 2016.2.5
LomBok : 1.16.8
Veolcity : 1.7 只用來mybatis反向生成代碼
freemarker : 2.3.23
LomBok 是一種能自動(dòng)生成Get & Set 等方法洁奈、大大減少開發(fā)時(shí)代碼量派撕、保持代碼簡(jiǎn)潔。
查看LomBok 操作:https://projectlombok.org/
Github 項(xiàng)目地址:
https://github.com/Jandaes/liujilu-ssm
- Mybatis Plus 自動(dòng)會(huì)引入Mybatis 的jar
- 使用Maven Tomcat Plugin部署運(yùn)行 (Intellij IDEA 中如何部署項(xiàng)目到 Tomcat睬魂?)
- 可通過Eclipse 或MyEclipse部署運(yùn)行终吼、不僅限于IDEA
pom.xml :
<build>
<finalName>liujilu</finalName>
<plugins>
<!--添加Tomcat7 maven 插件-->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<uriEncoding>UTF-8</uriEncoding>
</configuration>
</plugin>
</plugins>
</build>
<!--配置全局版本屬性-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>4.2.5.RELEASE</spring.version>
<junit.version>4.12</junit.version>
<druid.version>1.0.18</druid.version>
<fastjson.version>1.2.8</fastjson.version>
<mybaitsplus.version>2.0.5</mybaitsplus.version>
<mysql.version>5.1.38</mysql.version>
<log4j.version>1.2.17</log4j.version>
<slf4j.version>1.7.19</slf4j.version>
<aspectjweaver.version>1.8.8</aspectjweaver.version>
<shiro.version>1.3.1</shiro.version>
</properties>
<!-- Spring MVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<!--參考項(xiàng)目源碼-->
<!--......-->
web.xml
<!-- SpringMVC 過濾 -->
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 加載Spring配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring.xml,classpath:spring/spring-*.xml</param-value>
</context-param>
<!-- 啟動(dòng)監(jiān)聽器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--監(jiān)聽器出用于主要為了解決java.beans.Introspector導(dǎo)致內(nèi)存泄漏的問題-->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
從項(xiàng)目根目錄/
開始攔截所有的請(qǐng)求、全部交給Springmvc管理氯哮,包括靜態(tài)資源(css,js,image
)际跪,如果項(xiàng)目有引入靜態(tài)資源也被攔截的話、需要在springmvc.xml
加入:
<mvc:resources location="/image/" mapping="/image/**"/> <mvc:resources location="/css/" mapping="/css/**"/> <mvc:resources location="/js/" mapping="/js/**"/>
classpath:spring/spring-*.xml : 加載所有spring目錄下spring- 開頭的xml文件
Spring.xml
<!-- 自動(dòng)掃描 -->
<context:component-scan base-package="com.liujilu.service.*"/>
<!-- 開啟注解 -->
<context:annotation-config/>
<!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
SpringMVC.xml
<!-- 自動(dòng)掃描該包喉钢,使SpringMVC認(rèn)為包下用了@controller注解的類是控制器,不掃描Service姆打,使用Spring中的Service -->
<context:component-scan base-package="com.liujilu.controller">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
<!-- 處理器映射器 -->
<mvc:annotation-driven />
<!-- 引入靜態(tài)資源 -->
<mvc:default-servlet-handler/>
<!-- 視圖解析器(ViewResolver)配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前綴 -->
<property name="prefix" value="/WEB-INF/pages/"/>
<!-- 后綴 -->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 視圖解析器(ViewResolver)配置 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前綴 -->
<property name="prefix" value="/WEB-INF/pages/"/>
<!-- 后綴 -->
<property name="suffix" value=".jsp"/>
</bean>
<!-- 添加Freemarker解析器 -->
<!-- Freemarker配置 -->
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/views/" />
<property name="defaultEncoding" value="utf-8" />
<property name="freemarkerSettings">
<props>
<prop key="template_update_delay">10</prop>
<prop key="locale">zh_CN</prop>
<prop key="datetime_format">yyyy-MM-dd</prop>
<prop key="date_format">yyyy-MM-dd</prop>
<prop key="number_format">#.##</prop>
</props>
</property>
</bean>
<!-- 視圖解析器(ViewResolver)配置 -->
<!--視圖解釋器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView"></property>
<property name="suffix" value=".ftl" />
<property name="contentType" value="text/html;charset=utf-8" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="requestContextAttribute" value="request" />
<property name="order" value="1" />
</bean>
/WEB-INF/pages/
: SpringMVC 的返回頁面、只返回.jsp
結(jié)尾的文件
/WEB-INF/views/
:Freemarker 的模版頁面肠虽、只返回.ftl
結(jié)尾的文件
Freemarker文件后綴可自己編寫幔戏、比如:
*.html
spring-mybatis.xml
<!--數(shù)據(jù)源配置查看項(xiàng)目源碼-->
<!-- Spring整合Mybatis,更多查看文檔:http://mp.baomidou.com -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 自動(dòng)掃描Mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/xml/*.xml"/>
<!-- 配置 Mybatis 配置文件(可無)
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
-->
<!-- 配置包別名 -->
<property name="typeAliasesPackage" value="com.liujilu.model"/>
<property name="plugins">
<array>
<!-- 分頁插件配置 -->
<bean id="paginationInterceptor" class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
<property name="dialectType" value="mysql"/>
</bean>
</array>
</property>
<!-- 全局配置注入 -->
<property name="globalConfig" ref="globalConfig" />
</bean>
<!-- 定義 MP 全局策略 -->
<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!--
AUTO->`0`("數(shù)據(jù)庫ID自增")
INPUT->`1`(用戶輸入ID")
ID_WORKER->`2`("全局唯一ID")
UUID->`3`("全局唯一ID")
-->
<property name="idType" value="2" />
<!--
MYSQL->`mysql`
ORACLE->`oracle`
DB2->`db2`
H2->`h2`
HSQL->`hsql`
SQLITE->`sqlite`
POSTGRE->`postgresql`
SQLSERVER2005->`sqlserver2005`
SQLSERVER->`sqlserver`
-->
<property name="dbType" value="mysql"/>
<!-- Oracle需要添加該項(xiàng) -->
<!-- <property name="dbType" value="oracle" /> -->
<!-- 全局表為下劃線命名設(shè)置 true -->
<property name="dbColumnUnderline" value="true" />
</bean>
整合Mybatis plus 配置
SysUser.java
/**
* <p>
* 用戶信息表
* </p>
*
* @since 2017-07-31
*/
@TableName("sys_user")
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysUser extends Model<SysUser> {
private static final long serialVersionUID = 1L;
/**
* 編號(hào)
*/
@TableId(value="id", type= IdType.ID_WORKER)
private String id;
/**
* 姓名
*/
private String name;
/**
* 昵稱
*/
private String nickname;
/**
* 郵箱
*/
private String email;
/**
* Q號(hào)碼
*/
private String number;
/**
* 密碼
*/
private String password;
/**
* 創(chuàng)建時(shí)間
*/
@TableField("create_time")
private Date createTime;
/**
* 最后登錄時(shí)間
*/
@TableField("last_login_time")
private Date lastLoginTime;
/**
* 狀態(tài):0 鎖定税课、 1 正常
*/
private Integer status;
@Override
protected Serializable pkVal() {
return this.id;
}
}
@Data
: 會(huì)自動(dòng)生成Set & Get方法
@AllArgsConstructor
: 會(huì)自動(dòng)生成構(gòu)造方法
@NoArgsConstructor
: 會(huì)自動(dòng)生成無參構(gòu)造方法
@TableId(type= IdType.ID_WORKER)
:主鍵生成策略闲延、查看spring-mybatis.xml
PS : 如果有構(gòu)造方法的話、必須要寫無參構(gòu)造方法
SysUserController.java
@Controller
@RequestMapping("/")
public class SysUserController {
private Logger logger = Logger.getLogger(SysUserController.class);
@Autowired
private SysUserService userService;
/**
* 返回到JSP
* @return
*/
@RequestMapping("index")
public ModelAndView index(){
ModelAndView mv = new ModelAndView("index");
logger.info("進(jìn)來了");
List<SysUser> userList = userService.selectList(new EntityWrapper<SysUser>());
for (SysUser user:userList) {
System.out.println(user.toString());
}
mv.addObject("userList",userList);
return mv;
}
/**
* 返回到FreeMarker
* @param model
* @return
*/
@RequestMapping("/freemarker/index")
public String index(Model model){
logger.info("進(jìn)來了Freemarker 處理器");
List<SysUser> userList = userService.selectList(new EntityWrapper<SysUser>());
for (SysUser user:userList) {
System.out.println(user.toString());
}
model.addAttribute("userList",userList);
return "indexs";
}
}
MpGenerator.java
/**
* <p>
* 代碼生成器請(qǐng)勿輕易操作
* 操作時(shí)請(qǐng)取消 pom.xml 中的 velocity 注釋
* </p>
*/
public class MpGenerator {
/**
* @param args
*/
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setOutputDir("D://cache");//生成存放地址
gc.setFileOverride(true);
gc.setActiveRecord(true);
gc.setEnableCache(false);// XML 二級(jí)緩存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML columList
gc.setAuthor("D.Yang");
// 自定義文件命名韩玩,注意 %s 會(huì)自動(dòng)填充表實(shí)體屬性垒玲!
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setControllerName("%sController");
mpg.setGlobalConfig(gc);
// 數(shù)據(jù)源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setTypeConvert(new MySqlTypeConvert(){
// 自定義數(shù)據(jù)庫表字段類型轉(zhuǎn)換【可選】
@Override
public DbColumnType processTypeConvert(String fieldType) {
System.out.println("轉(zhuǎn)換類型:" + fieldType);
return super.processTypeConvert(fieldType);
}
});
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("");
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/liujilu?characterEncoding=utf8");
mpg.setDataSource(dsc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setTablePrefix(new String[] {""});// 此處可以修改為您的表前綴
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
//strategy.setInclude(new String[]{"sys_order"});//生成指定表
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com");
pc.setModuleName("liujilu");
pc.setEntity("model");
mpg.setPackageInfo(pc);
// 執(zhí)行生成
mpg.execute();
}
}
該工具類、自動(dòng)通過連接數(shù)據(jù)庫生成對(duì)應(yīng)的java文件找颓、包括:
Controller合愈、model、Service、ServiceImpl佛析、Mappler益老、Mapperxml
只要修改配置里面的數(shù)據(jù)庫連接地址、以及修改生成代碼的存放地址就可以使用寸莫。
具體更多的MybatisPlus方法操作捺萌、查看:http://git.oschina.net/baomidou/mybatis-plus
以上代碼為主要代碼、更多代碼查看Github 源碼
效果圖
后續(xù)提交添加储狭、修改、刪除
等操作
參考網(wǎng)站:http://liujilu.com/