# my-mvc **Repository Path**: liuzy1988/my-mvc ## Basic Information - **Project Name**: my-mvc - **Description**: 一天实现SpringMVC框架IOC核心 - **Primary Language**: Unknown - **License**: WTFPL - **Default Branch**: master - **Homepage**: https://liuzy88.com/ - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2021-08-08 - **Last Updated**: 2021-08-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # my-mvc > 从零开始手写SpringMVC框架 ## 第零步:搭建开发环境 - 安装JDK8 - 安装IDE(IDEA或Eclipse) - 安装Maven(或使用IDE自带的) ## 第一步:使用Maven创建基本Servlet应用 - 创建Maven工程,引入servlet-api依赖,scope为provided(容器提供) - 写一个Servlet,重写doGet和doPost方法 - 写web.xml配置你的Servlet - 添加Maven插件tomcat7:run - 启动,发送请求,验证Servlet工作正常 ## 第二步:创建项目project - 创建`UserController`类,及相关注解(`@Controller`和`@RequestMapping`和`@RequestParam`) - 创建`UserService`类,及相关注解(`@Service`和`@Resource`) - 创建`UserDao`类,及相关注解(`@Repository`和`@Query`) - 创建`UserEntity`类,及相关注解(`@Entity`和`@Id`和`@Column`) ## 第三步:实现框架spring - 把`Servle`t改为我们的`IOC`核心,即`DispatcherServlet` - 修改`web.xml`添加Servlet初始化参数(`scanPackage`) - 实现包扫描 - 实现过滤出包中的Bean(`@Controller`和`@Service`) - 实现Bean的注入(`@Service`) - 实现`请求路径`和`Controller`方法的映射 - 启动,发送请求,验证`登陆请求`被`UserController`的`login`方法处理,并且`userService`不为空 ## 第四步:代理Dao层 - 实现创建`UserDao`的代理`DaoProxy`,并在`invoke`方法中返回测试值 - 实现过滤出包中的Bean(`@Repository`) - 实现Bean的注入(`@Resource`) - 启动,发送请求,验证执登陆时`userService`中的`userDao`不为空 ## 第五步:连接JDBC - 修改`web.xml`添加Servlet初始化参数(driverClassName、url、username、password) - 创建JDBC基本操作类(MySQL)实现SQL的查询和更新,及stmt的参数设置 - 实现查询结果`ResultSet`转为`List>`数据类型 - 修改Servlet的初始化方法,启动时先连接数据库 - 启动,验证是否正确执行`select version()`并打印数据库版本号 ## 第六步:数据库响应转Entity - 实现`List>`对`Entity`的转换 - 启动,验证登陆接口 ## 第七步:数据库响应转List - 实现`List>`对`List`的转换,关键在于获取`returnType`验证是List类型后,再获得List的泛型 - 启动,验证获取所有用户接口 ## 第八步:自动建表 - 修改Bean过滤方法对`@Entity`的处理,执行建表SQL语句 - 删除数据库表,验证启动后是否正确创建 ## 第九步:强化建表 - 实现获取`@Entity`和`@Id`和`@Column`注解的参数,自动拼装建表SQL语句 - 删除数据库表,验证启动后是否正确创建 ## 第十步:文档 - 完善代码,优化格式和日志等 - 写`README.md`总结实现过程 --- > 感谢支持 [https://pay.liuzy88.com/](https://pay.liuzy88.com/)