SSM整合&PageHelper&mybatis-generator
- 整合ssm
- SpringMVC
- web.xml
- 字符编码:CharacterEncodingFilter
- 前端控制器:DispatcherServlet
- 关联Spring:ContextLoaderListener
- example-servlet.xml
- 扫描控制器:<context:component-scan>
- 加载Annotation驱动:<mvc:annotation-driven>
- 视图解析器:InternalResourceViewResolver
- 访问静态资源:<mvc:default-servlet-handler/>,<mvc:resources>
- 文件上传解析器:CommonsMultipartResolver
- web.xml
- Spring
- applicationContext.xml
- 扫描包:<context:component-scan>
- 连接池:ComboPooledDataSource
- 事务管理器:DataSourceTransactionManager
- 加载Annotation驱动:<tx:annotation-driven/>
- JDBC模板:JdbcTemplate
- applicationContext.xml
- Mybatis
- mapper
- SpringMVC
- 整合步骤
- 创建maven工程,导入pom文件
- 先整合SpringMVC
- web.xml
- example-servlet.xml
- 编写Handler,jsp,进行局部测试
- 整合Spring和mybatis
- applicationContext.xml
- 创建dao,mapper,service
- Junit进行局部测试
- Handler装配service实现相应功能,整合完毕
- mybatis的分页插件PageHelper
- 导包:(建议版本4.1.6【我使用最高版本报错】)
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</dependency> - 配置到applicationContext.xml
<!-- 分页插件 -->
<property name="plugins">
<array>
<bean class="com.github.pagehelper.PageHelper">
<property name="properties">
<value>
dialect=mysql
reasonable=true
</value>
</property>
</bean>
</array>
</property> - Handler代码编写
@RequestMapping("/getAll/{page}")
public String getAll(Map<String,Object> map,@PathVariable("page") Integer page) {
PageHelper.startPage(page, 5);
List<Book> list = bookService.getAll();
PageInfo<Book> pageInfo = new PageInfo<Book>(list);
map.put("pageInfo", pageInfo);
return "bookList";
} - JSP代码编写
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<table border="1" align="center" width="80%">
<tr>
<td>序号</td>
<td>书名</td>
<td>价格</td>
<td>操作</td>
</tr>
<c:forEach items="${pageInfo.list }" var="book" varStatus="state">
<tr>
<td>${state.count }</td>
<td>${book.name }</td>
<td>${book.price }</td>
<td>假装有操作</td>
</tr>
</c:forEach>
</table>
<div align="center">
总页数:${pageInfo.pages },总记录数:${pageInfo.total },当前页:${pageInfo.pageNum }
</div>
<div align="center">
<a href="${pageInfo.firstPage }">首页</a> |
<a href="${pageInfo.prePage }">上一页</a> |
<a href="${pageInfo.nextPage }">下一页</a> |
<a href="${pageInfo.lastPage }">尾页</a>
</div>
- 导包:(建议版本4.1.6【我使用最高版本报错】)
- mybatis-generator
- 代码生成器,根据表生成
- vo
- mapper
- dao
- 具体使用步骤
- 新建一个maven工程,专门用来生成以上相关代码
- 导包
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.36</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- java编译插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build> - 配置conf.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>
<context id="testTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是;false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!-- 数据库连接的信息:驱动类,连接地址,用户名,密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mytest"
userId="root"
password="root">
</jdbcConnection>
<!-- 默认false,把JDBC DECIMAL 和 NUMRRIC 类型解析为 Integer,
为true时,把JDBC DECIMAL 和 NUMRRIC 类型解析为java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成PO类的位置 -->
<javaModelGenerator targetPackage="com.oracle.vo"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.oracle.mapper"
targetProject=".\src\main\resources">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.oracle.dao"
targetProject=".\src\main\java">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<table schema="" tableName="book"></table>
<table schema="" tableName="account"></table>
<!-- 有些表的字段需要指定java类型 -->
<!-- <table schema="" tableName="">
<columnOverride column="" javaType="" />
</table> -->
</context>
</generatorConfiguration> - 创建包com.oracle.main,包下创建Generator.java
package com.oracle.main;
import java.io.File;
import java.util.ArrayList;
import java.util.List;import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;public class Generator {
public void generator() throws Exception{
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
// 指定逆向工程配置文件
File configFile = new File("src/main/resources/conf.xml");
System.out.println(configFile.getAbsolutePath());
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
/**
* 主函数
*/
public static void main(String[] args) {
try {
Generator generatorSqlmap = new Generator();
generatorSqlmap.generator();
} catch(Exception e) {
e.printStackTrace();
}
}
} -
执行这个带有主方法的类,刷新工程,会发现conf中指定生成的表被生成出如图所示诸多代码及对应文件夹/包
-
将想要使用的vo,dao,mapper拷贝到正在做的工程下对应文件夹/包下,即可使用
-
dao中生成了多种操作,example则是多种条件,基本够用了。
-
只需编写对应的Service和Handler,例如:
@Service
public class AccountService {@Autowired
AccountMapper accountDao;
@Transactional
public int insert(Account record) {
return accountDao.insert(record);
}
@Transactional
public List<Account> selectByExample(AccountExample example){
return accountDao.selectByExample(example);
}
}
@Controller
public class AccountHandler {@Autowired
AccountService accountService;
@RequestMapping("/saveAccount")
public String save() {
Account record = new Account();
record.setAccountid(8);
record.setName("sdiven");
record.setRemain(100000);
accountService.insert(record);
return "success";
}
@RequestMapping("/getAccount")
public String getAccount() {
AccountExample example = new AccountExample();
example.createCriteria().andRemainGreaterThan(8000).andAccountidBetween(3, 9);
List<Account> list = accountService.selectByExample(example);
System.out.println(list);
return "success";
}
}
- 代码生成器,根据表生成