使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)
梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查询工程的流程说明)
此次会有开发过程中一些常见的问题,都会根据我自己的实例情况给出建议:
开发工具:IDEA, 数据库:MySQL 使用JDK:1.8
主要文件分为以下几个过程:
1.创建整体的项目文件:FIle—>project,
注意按照图片中的步骤创建,也可以不用,后续可以自己进行修改,下一步就是创建名称,输入你自己的组名和项目名称即可,如本次是groupId:com.eightteen, ArtifactId:test01,进行next
上面的步骤完事后,点击next 进行下一步:
这个图片是你具体创建项目的一些信息,确认完成后点击【Finish】即可。
常见完的项目一般如下所示:
项目创建完成后,会缺少一些文件需要你自己补齐,上面的只是针对如何创建项目,下面显示的是这次需要显示的项目,补齐后的文件如下图所示:
上面的文件做下简单的介绍:
jdbc.properties: 主要是关于数据库信息的配置,有驱动类,连接数据库的url,登陆MySQL的用户名和密码
Personal-GeneratorConfig.xml:主要是用于mybatis的逆向工程,用于根据数据库中的表生成对应的实体类,mapper映射文件,以及和映射文件对应的接口文件
spring-mybatis.xml:用于配置spring和mybatis的整合,其中mybatis是持久层框架,配置数据源,实现映射文件和接口文件的管理,可以操作接口文件用于操作MySQL,简化了很多步骤
spring-mvc.xml:用于配置控制层,实现bean的创建和管理,以及自动注解功能开启,视图解析器用于视图的解析
整体流程:
前台传递过来一个url请求,前端控制器接受到这个请求后,会根据这个请求的url去匹配映射(RequestMapping)到具体的业务处理方法,找到业务处理类后会发送给前端控制器handler,
然后交给映射适配器去执行这个handler(这个所谓的handler,其实就是去用于调用具体的业务处理方法的),业务处理方法执行完成后会返回要给ModelAndView给前端控制器。前端控制器会把ModelAndView交给视图解析器进行解析,解析出的View经过渲染后交给前台界面展示给客户。
我这个简单查询的具体流程就是:
在index.jsp文件中输入要查询的用户ID号码,点击查询后,根据映射的url或者说是from表单中的action:/person/select 去匹配映射文件到PersonController类中的getPerson()方法。
这个方法是调用业务的方法,里面通过接口personService文件中的方法去获取具体的信息,PersonServiceImpl类实现了这个接口,PersonServiceImpl这个类中直接使用PersonMapper接口文件去调用具体的处理方法selectByPrimaryKey(id),根据id号码返回要查询的用户信息,其中PersonMapper接口和PersonMapper.xml映射文件是一一对应的,接口中的方法直接对应到映射文件中的SQL ID号码,namespace(对应接口文件的路径)+ID(对应接口文件中的方法名),这些对应关系都是框架自动进行配置的,我们只需要确认这些文件被扫描到即可。
最终能确定唯一的SQL语句,执行结果会根据配置放到具体的对象或结果集中,直接过去即可。
下面开始具体的填补工程中的内容:
1)在MySQL中创建一个表:Person(特别简单,仅是用于梳理流程,实现项目功能),结构图如下所示:
2)根据创建出的表结构,在idea中逆向生成对应的实体类,映射文件和对应的dao层的接口文件,配置如下所示:
?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> <properties resource="jdbc.properties"></properties> <classPathEntry location="${jdbc.driverLocation}" /> <!--classPathEntry location="D:\zngkpt\m2\repository\mysql\mysql-connector-java\5.1.40\mysql-connector-java-5.1.40.jar" /--> <context id="context1" targetRuntime="MyBatis3"> <commentGenerator> <!-- 去除自动生成的注释 --> <property name="suppressAllComments" value="true" /> </commentGenerator> <!-- 数据库连接配置 --> <jdbcConnection driverClass="${jdbc.driverClass}" connectionURL="${jdbc.connectionURL}" userId="${jdbc.userId}" password="${jdbc.password}" /> <!--jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/test" userId="root" password="mysql" /--> <!-- 非必需,类型处理器,在数据库类型和java类型之间的转换控制--> <javaTypeResolver> <property name="forceBigDecimals" value="false"/> </javaTypeResolver> <!--配置生成的实体包 targetPackage:生成的实体包位置,默认存放在src目录下 targetProject:目标工程名 --> <javaModelGenerator targetPackage="com.one.entity" targetProject="src/main/java" /> <!-- 实体包对应映射文件位置及名称,默认存放在src目录下 --> <sqlMapGenerator targetPackage="com.one.mapper" targetProject="src/main/java" /> <!-- 接口类生成位置 --> <javaClientGenerator type="XMLMAPPER" targetPackage="com.one.dao" targetProject="src/main/java"/> <!-- 配置表 schema:不用填写 tableName: 表名 enableCountByExample、enableSelectByExample、enableDeleteByExample、enableUpdateByExample、selectByExampleQueryId: 去除自动生成的例子 --> <table schema="" tableName="person" enableCountByExample="false" enableSelectByExample="false" enableDeleteByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false" > </table> </context> </generatorConfiguration>
其中数据库链接配置文件jdbc.properties
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.connectionURL=jdbc:mysql://localhost:3306/fis?useUnicode=true&characterEncoding=utf-8
jdbc.userId=root
jdbc.password=rootjdbc.driverLocation=E:\\Java\\MySQL\\mysql-connector-java-5.1.43\\mysql-connector-java-5.1.43\\mysql-connector-java-5.1.43-bin.jar
也可以在配置文件中直接把properties文件中的变量直接写死到Personal-GeneratorConfig.xml 文件中,一般不这么做,不利于维护。
文件配置完成以后,按照下图所示点击菜单栏中的run,选择Edit Configuration,
点击完成以后,出现下图所示:
选择maven之后,会出现下图所示的界面:里面包含已经配置完的信息,最主要的是输入命令:mybatis-generator:generate -e
都配置完成以后,执行下图所示的过程:
以上就是根据表结构生成具体的实体类,映射文件及对应接口文件的过程。还有一种直接配置完后,通过Java文件main方法执行生成文件,这里不再具体叙述。
都执行完以后生成的文件如下所示:
到此,逆向生成文件就结束了,下一篇开始讲解关于里面控制文件,服务文件以及配置文件的说明。
有什么其他问题,欢迎来一起交流学习!
- 研究人员警示智能音箱等物联网设备存在较多安全问题
- Tootip小程序,整理一下自己用
- 滴滴电单车--“街兔” 无奈相关域名已被注册
- 联发科将推出两款芯片,拥有AI和人脸识别技术,能和高通叫板吗?
- 谷歌AI黑科技曝光:合成语音与真人声音难以区分
- 小程序是什么?有什么用?
- Aibee融资1.65亿元 曾16.8万元秒下aibee.cn
- 小程序审核攻略
- js checkbox.checked=true在document.body.appendChild(checkbox)前与后赋值
- 吹得飞起的人工智能,2017都摔过哪些跟头?
- 排序还可以这样做
- 韩政府公布虚拟货币投机行为打击对策
- SqlServer2005数据库文件损坏的拯救过程
- 2017年,人类在自己设计的所有游戏中都败给了AI,无一幸免
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- E0144"const char *" 类型的值不能用于初始化 "char *" 类型的实体的三种解决方法
- 数据采集面对JS加密无所适从?善用这3个工具,搞定一大半的JS逆向!
- 点赞功能设计与实现
- [推荐]Linux入门系列(一)换个角度看Linux其实很简单,带你一起入门
- (建议收藏)Java基础知识笔记(详细)
- 详解:小程序如何授权登录并获取用户绑定手机号?
- [Bazel]自定义命令行编译标志
- 如何部署一个Kubernetes集群
- static有什么作用?
- 温故知新——Spring AOP
- MySQL数据库的基本操作
- MySQL—电子杂志订阅表的实现
- VScode配置CMD本地运行环境(2.0)
- 山科小站小程序
- Nvue/Weex