Mybaits逆向工程
1 逆向工程概述
通过表结构逆向生成(影响)JavaBean、XXXMapper、映射文件等.
- MyBatis Generator:mbg
mbg.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>
<!--
targetRuntime: 执行生成的逆向工程的版本
MyBatis3Simple: 生成基本的CRUD
MyBatis3: 生成带条件的CRUD
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="root">
</jdbcConnection>
<!-- javaBean的生成策略-->
<javaModelGenerator targetPackage="com.atguigu.mybatis.beans" targetProject=".\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- SQL映射文件的生成策略 -->
<sqlMapGenerator targetPackage="com.atguigu.mybatis.mapper" targetProject=".\conf">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- Mapper接口的生成策略 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.atguigu.mybatis.mapper" targetProject=".\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 逆向分析的表 -->
<table tableName="tbl_dept" domainObjectName="Dept"></table>
<table tableName="tbl_employee" domainObjectName="Employee"></table>
</context>
</generatorConfiguration>
2 逆向工程使用步骤
1. 导入jar包
2. 编写配置文件
3. 运行代码生成器的相关代码
分页插件(PageHelper)
PageUtils.java
<?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>
<!--
targetRuntime: 执行生成的逆向工程的版本
MyBatis3Simple: 生成基本的CRUD
MyBatis3: 生成带条件的CRUD
-->
<context id="DB2Tables" targetRuntime="MyBatis3">
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis"
userId="root"
password="root">
</jdbcConnection>
<!-- javaBean的生成策略-->
<javaModelGenerator targetPackage="com.atguigu.mybatis.beans" targetProject=".\src">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- SQL映射文件的生成策略 -->
<sqlMapGenerator targetPackage="com.atguigu.mybatis.mapper" targetProject=".\conf">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<!-- Mapper接口的生成策略 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.atguigu.mybatis.mapper" targetProject=".\src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 逆向分析的表 -->
<table tableName="tbl_dept" domainObjectName="Dept"></table>
<table tableName="tbl_employee" domainObjectName="Employee"></table>
</context>
</generatorConfiguration>
@RequestMapping(value = "/emps/{pageNo}", method = RequestMethod.GET)
public String getAllEmps(Map map, HttpServletRequest request,
@PathVariable("pageNo") Integer pageNo){
Page<Object> page = PageHelper.startPage(pageNo, 3);
List<Employee> allEmps = employeeServlet.getAllEmps();
map.put("allEmps", allEmps);
PageInfo<Employee> info = new PageInfo<>(allEmps,5);
String pageInfo = PageUtils.getPageInfo(info, request);
map.put("pageInfo", pageInfo);
return "list";
}
1 回顾分页
- javaWeb阶段实现分页
* Page(5/15): currPageNo,totalPageNum,totalRecord,pageSize,List<T>
2 PageHelper(Mybatis分页插件)使用步骤
- 导入2个jar包
- 在核心配置文件中,添加插件
- 使用核心对象
* 在查询结果之前,使用PageHelper开启分页功能
* 在查询结果之后,使用PageInfo封装(获取)分页相关信息
SSM整合
1 SSM整合思路(Spring+SpringMVC+Mybatis)
- Spring+SpringMVC
- Spring+Mybatis
2 SSM整合步骤
-
搭建工程环境
* web project(2.5)
* 导入jar包(22+2【分页】) -
配置文件
- log4j.xml
- web.xml
- 监听器(ContextLoaderListener):创建&管理spring容器对象
- 字符编码过滤器(CharacterEncodingFilter)
- Rest过滤器(HiddenHttpMethodFilter)
- 前端(核心)控制器(DispatcherServlet)
- springmvc.xml
- 组件扫描
- 视图解析器
- mvc的相关配置
- 解决静态资源加载问题
- 解决静态资源加载后续问题
- mybatis-config.xml
- 数据源
- 事务管理器
- mapper.xml加载
- 分页插件
- setting
- 别名…
- XxxMapper.xml
- spring.xml
- 组件扫描
- 数据源
- 事务管理器
- Mybatis整合
- 使用SqlSessionFactoryBean管理SqlSessionFactory
(SqlSession->SqlSessionFactory) - 使用MapperScannerConfigurer创建并管理Mapper接口代理实现类对象
(Mapper接口代理实现类)
- 使用SqlSessionFactoryBean管理SqlSessionFactory
- 解决冲突
- Spring+SpringMVC
- 组件扫描
- Spring+Mybatis
- 数据源
- 事务管理器
- 使用SqlSessionFactoryBean管理SqlSessionFactory
- 使用MapperScannerConfigurer创建并管理Mapper接口代理实现类对象
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 注册ContextLoaderListener管理spring容器-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 注册CharacterEncoding过滤器:处理字符编码-->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 注册HiddenHttpMethodFilter过滤器,支持REST风格代码-->
<filter>
<filter-name>hiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 注册DispatcherServlet:springMVC核心(前端)控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 组件扫描
扫描除了controller层
-->
<context:component-scan base-package="com.atguigu.ssm">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 引入外部db.properites-->
<context:property-placeholder location="classpath:db.properties"/>
<!-- 装配DruidDataSource-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="driverClassName" value="${jdbc.driver}"></property>
</bean>
<!-- 声明式事务
1. 装配事务管理器
2. 启用事务注解
-->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"></tx:annotation-driven>
<!-- Mybatis整合
* 使用SqlSessionFactoryBean管理SqlSessionFactory
(SqlSession->SqlSessionFactory)
* 使用MapperScannerConfigurer创建并管理Mapper接口代理实现类对象
(Mapper接口代理实现类)
-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 指定mybatis核心配置文件路径-->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
<!-- 指定数据源-->
<property name="dataSource" ref="dataSource"></property>
<!-- 指定别名-->
<property name="typeAliasesPackage" value="com.atguigu.ssm.bean"></property>
<!-- 指定映射文件路径
支持通配符:*
映射文件与Mapper接口的包名不必须一致(建议一致)
-->
<property name="mapperLocations" value="classpath:com/atguigu/ssm/mapper/*.xml"></property>
</bean>
<!-- 使用MapperScannerConfigurer创建并管理Mapper接口代理实现类对象
basePachage:指定Mapper的包名
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.atguigu.ssm.mapper"></property>
</bean>
<!-- <mybatis-spring:scan base-package="com.atguigu.ssm.mapper"/>-->
</beans>
springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 组件扫描:只扫描controller(handler)层-->
<context:component-scan base-package="com.atguigu.ssm" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 解决静态资源加载问题及后续问题-->
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
</beans>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--配置文件根标签-->
<configuration>
<!-- properties-->
<!-- <properties resource="db.properties" />-->
<!-- settings-->
<settings>
<!-- 驼峰式命名自动映射-->
<setting name="mapUnderscoreToCamelCase" value="True"/>
<!-- 开启延迟加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 设置加载的数据是按需还是全部 -->
<setting name="aggressiveLazyLoading" value="false"/>
<!-- 开启二级缓存-->
<setting name="cacheEnabled" value="true"/>
</settings>
<!-- 添加分页插件-->
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>
<!-- 类型别名-->
<!-- 配置数据库环境-->
<!-- 指定映射文件路径:
要求,映射文件与Mapper接口的包名必须一致
<mappers>
<package name="com.atguigu.ssm.mapper"/>
</mappers>
-->
</configuration>
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>