Spring框架总结(9)

SSM整合&PageHelper&mybatis-generator

  1. 整合ssm
    1. SpringMVC
      1. web.xml
        1. 字符编码:CharacterEncodingFilter
        2. 前端控制器:DispatcherServlet
        3. 关联Spring:ContextLoaderListener
      2. example-servlet.xml
        1. 扫描控制器:<context:component-scan>
        2. 加载Annotation驱动:<mvc:annotation-driven>
        3. 视图解析器:InternalResourceViewResolver
        4. 访问静态资源:<mvc:default-servlet-handler/>,<mvc:resources>
        5. 文件上传解析器:CommonsMultipartResolver
    2. Spring
      1. applicationContext.xml
        1. 扫描包:<context:component-scan>
        2. 连接池:ComboPooledDataSource
        3. 事务管理器:DataSourceTransactionManager
        4. 加载Annotation驱动:<tx:annotation-driven/>
        5. JDBC模板:JdbcTemplate
    3. Mybatis
      1. mapper
  2. 整合步骤
    1. 创建maven工程,导入pom文件
    2. 先整合SpringMVC
      1. web.xml
      2. example-servlet.xml
      3. 编写Handler,jsp,进行局部测试
    3. 整合Spring和mybatis
      1. applicationContext.xml
    4. 创建dao,mapper,service
      1. Junit进行局部测试
      2. Handler装配service实现相应功能,整合完毕
  3. mybatis的分页插件PageHelper
    1. 导包:(建议版本4.1.6【我使用最高版本报错】)
          <dependency>
              <groupId>com.github.pagehelper</groupId>
              <artifactId>pagehelper</artifactId>
              <version>4.1.6</version>
          </dependency>
    2. 配置到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>
    3. 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";
          }
    4. 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. mybatis-generator
    1. 代码生成器,根据表生成
      1. vo
      2. mapper
      3. dao
    2. 具体使用步骤
      1. 新建一个maven工程,专门用来生成以上相关代码
      2. 导包
          <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>
      3. 配置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>
      4. 创建包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();
                }
            }
        }

      5. 执行这个带有主方法的类,刷新工程,会发现conf中指定生成的表被生成出如图所示诸多代码及对应文件夹/包

      6. 将想要使用的vo,dao,mapper拷贝到正在做的工程下对应文件夹/包下,即可使用

      7. dao中生成了多种操作,example则是多种条件,基本够用了。

      8. 只需编写对应的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";
            }
        }

猜你喜欢

转载自blog.csdn.net/addkai/article/details/81270529
今日推荐