目录
03mybatis框架整合及逆向工厂
1、三大框架整合(ssm整合)
在老期的项目中,一般都是使用ssm项目做开发的,虽然现在的主流开发是springboot来做开发,但是ssm的基本整合还是需要掌握的。
1、导入pom文件
(直接从之前所用的项目中赋值过来)
<dependencies>
======================================= springAOP ==========================================
<!-- https://mvnrepository.com/artifact/junit/junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/cglib/cglib -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/aopalliance/aopalliance -->
<dependency>
<groupId>aopalliance</groupId>
<artifactId>aopalliance</artifactId>
<version>1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
======================================= springMVC ==========================================
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.3.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<!-- <!– https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api –>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
======================================= mybatis ============================================
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.mybatis.caches</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.0-alpha1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>2.0.0-alpha1</version>
<scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.4</version>
</dependency>
</dependencies>
</project>
2、编写各个框架的配置文件
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">
//spring相关配置
<listener监听>
<listener-class>
org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param上下文参数>
<param-name>contextConfigLocation上下文配置地方</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
//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:springmvc.xml</param-value>
</init-param>
<load-on-startup启动时加载>1</load-on-startup>
</servlet>
<servlet-mapping控制器映射>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
//配置编码过滤器
<filter>
<filter-name>CharacterEncoding字符编码</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>forceEncoding强迫编码</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping过滤器映射>
<filter-name>CharacterEncoding字符编码</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
//配置REST过滤器
<filter过滤器>
<filter-name>rest休眠</filter-name>
<filter-class>
org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping过滤器映射>
<filter-name>rest休眠</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd">
//定义扫描的包
use-default-filters使用默认过滤器:默认的扫描会包含@Controller控制器,@Service服务,@Component组件,@Repository仓库,我们再进行配置的时候需要扫描这么多组件
===============================================================================
//这里只扫描@Controller控制器这个注解
<context:component-scan组件扫描 base-package基本组件="com.mashibing" use-default-filters使用默认过滤器="false">
<context:include-filter包含过滤器 type="annotation注解" expression表达式="org.springframework.stereotype.Controller"/>
</context:component-scan>
===============================================================================
//请求静态资源
<mvc:default-servlet-handler默认控制器处理></mvc:default-servlet-handler>
//请求动态资源
<mvc:annotation-driven注解开车></mvc:annotation-driven>
===============================================================================
//设置视图管理器
<bean豆 class=
"org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/page/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
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 https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
===============================================================================
//定义扫描的包
//Spring除了控制器不扫描,其他的组件都扫描,包括service,component等
<context:component-scan组件扫描 base-package基本组件="com.mashibing" use-default-filters使用默认过滤器="false">
<context:exclude-filter排除过滤器 type="annotation注解" expression表达式="org.springframework.stereotype.Controller"/>
</context:component-scan>
===============================================================================
//定义外部配置文件
<context:property-placeholder属性占位符 location地点="classpath:db.properties"></context:property-placeholder>
===============================================================================
//配置数据源
<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="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
</bean>
===============================================================================
//配置事务管理器
<bean豆 id="transactionManager事务管理器" class=
"org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource数据源" ref="dataSource数据源"></property>
</bean>
===============================================================================
//开启事务控制
<tx:annotation-driven注解开车 transaction-manager事务管理器="transactionManager事务管理器"></tx:annotation-driven>
//直接从上一个项目复制过来即可,但上面的”配置数据源”跟这个差不多
===============================================================================
//整合mybatis
<bean豆 id="sqlSessionFactory会话工厂"class=
"org.mybatis.spring.SqlSessionFactoryBean会话工厂豆">
<property name="dataSource数据源" ref="dataSource数据源" />
方式一:<property name="mapperLocations映射位置" value="classpath类路径: mybatis-config.xml"></property>
方式二:<property name="mapperLocations映射位置" value="classpath类路径:com/mashibing/dao/*.xml"></property>
</bean>
方式一:之前学mybatis用MyTest调试时:
方式二:
//配置映射
===============================================================================
//定义mybatis扫描器,扫描映射文件
<bean豆 class="org.mybatis.spring.mapper.MapperScannerConfigurer映射扫描配置">
<property name="basePackage基本包" value="com.mashibing.dao"></property>
<property name="sqlSessionFactoryBeanName会话工厂豆名字" value="sqlSessionFactory会话工厂"></property>
</bean>
</beans>
SSMController.java
@Controller
public class SSMController {
@Autowired自动装配
EmpDao empDao;
@RequestMapping请求路径("/test")
public String test(){
System.out.println("test");
Emp emp = empDao.selectEmpByEmpno(7369);
System.out.println(emp);
return "success";
}
}
<body>
ssm 6666
</body>
//lib
Emp.java
public class Emp implements Serializable序列化 {
private Integer empno;
private String ename;
private String job;
private Integer mgr;
private Date hiredate;
private Double sal;
private Double comm;
private Integer deptno;
public Integer getEmpno() {return empno;}
public void setEmpno(Integer empno) {this.empno = empno;}
public String getEname() {return ename;}
public void setEname(String ename) {this.ename = ename;}
public String getJob() {return job;}
public void setJob(String job) {this.job = job;}
public Integer getMgr() {return mgr;}
public void setMgr(Integer mgr) {this.mgr = mgr;}
public Date getHiredate() {return hiredate;}
public void setHiredate(Date hiredate) {this.hiredate = hiredate;}
public Double getSal() {return sal;}
public void setSal(Double sal) {this.sal = sal;}
public Double getComm() {return comm;}
public void setComm(Double comm) {this.comm = comm;}
public Integer getDeptno() {return deptno;}
public void setDeptno(Integer deptno) {this.deptno = deptno;}
@Override
public String toString() {
return "Emp{" +
"empno=" + empno +
", ename='" + ename + '\'' +
", job='" + job + '\'' +
", mgr=" + mgr +
", hiredate=" + hiredate +
", sal=" + sal +
", comm=" + comm +
", deptno=" + deptno +
'}';
}
}
Dept.java
public class Dept implements Serializable序列化 {
private Integer deptno;
private String dname;
private String loc;
private List<Emp> emps;
public Integer getDeptno() {return deptno;}
public void setDeptno(Integer deptno) {this.deptno = deptno;}
public String getDname() {return dname;}
public void setDname(String dname) {this.dname = dname;}
public String getLoc() {return loc;}
public void setLoc(String loc) {this.loc = loc;}
public List<Emp> getEmps() {return emps;}
public void setEmps(List<Emp> emps) {this.emps = emps;}
@Override
public String toString() {
return "Dept{" +
"deptno=" + deptno +
", dname='" + dname + '\'' +
", loc='" + loc + '\'' +
", emps=" + emps +
'}';
}
}
EmpDao.java
public interface EmpDao {
public Emp selectEmpByEmpno(Integer empno);
}
EmpDao.xml
<mapper namespace="com.mashibing.dao.EmpDao">
<select id="selectEmpByEmpno" resultType="com.mashibing.bean.Emp">
select * from emp where empno = #{empno}
</select>
</mapper>
DeptDao.java
public interface DeptDao {
public Dept selectDeptByDeptno(Integer deptno);
}
DeptDao.xml
<mapper namespace="com.mashibing.dao.DeptDao">
</mapper>
mybatis-config.xml
<configuration>
<properties resource="db.properties" ></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
</configuration>
调试结果:
如果报错,重新粘贴过该.xml文件,那么需要执行这段:
如果开启了spring.xml中的方式二,那么就:
===========================================================
//一样
另一种方式:
原因是拷贝时出现问题
//一样
spring.xml
//一样
简单开发:
<body>
ssm 6666
=================================== 添加 ======================================
<br>
${emp}
===============================================================================
</body>
2、mybatis逆向工程
1、引入pom依赖
<!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.4.0</version>
</dependency>
2、编写配置文件:
<!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="simple" targetRuntime="MyBatis3">
<!--指向数据库连接-->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://192.168.85.111:3306/demo?serverTimezone=UTC"
userId="root"
password="123456"
/>
<!--生成对应的实体类
targetPackage:指定生成java文件的目录
targetProject:放在那个工程的哪个目录下
-->
<javaModelGenerator targetPackage="com.mashibing.bean" targetProject="src/main/java"/>
<!--SQL映射文件生成器
targetPackage:指定生成java文件的目录
targetProject:放在那个工程的哪个目录下
-->
<sqlMapGenerator targetPackage="com.mashibing.dao" targetProject="src/main/resources"/>
<!--dao接口生成器-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.mashibing.dao" targetProject="src/main/java"/>
<!--指定要逆向生成的数据表
tableName:表名
domainObjectName:对象名
-->
<table tableName="emp" domainObjectName="Emp" enableCountByExample="false" enableDeleteByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false" enableSelectByExample="false"/>
<table tableName="dept" domainObjectName="Dept" enableCountByExample="false" enableDeleteByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false" enableSelectByExample="false"/>
</context>
</generatorConfiguration>
3、编写测试类
public class Test {
public static void main(String[] args) throws IOException, XMLParserException, InvalidConfigurationException, SQLException, InterruptedException {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("mbg.xml");
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);
}
}
3、分页插件 PageHelper(自学,项目中会使用)