Spring,Mybatis,Springmvc框架整合项目(第二部分)
一、创建数据库表
打开Navicat Premium,点击左上角连接,选择mysql
输入你的数据库用户名和密码信息,可以先点击下测试连接,如果显示连接成功,说明能连接到数据库,然后点击确定。如果显示1045类的错误,估计你数据库服务没打开。然后再左侧localhost_3306右键新建数据库,输入新建的数据库名,选择utf-8字符集,然后确定。
点击查询----新建查询
输入以下sql代码:
create table t_user (
id int primary key AUTO_INCREMENT,
username varchar(30),
password varchar(32),
last_visit datetime
) ENGINE=InnoDB;
这里ENGINE=InnoDB代表我们的表是支持事务的,主键id我们设置自增长。
然后左侧表,右键刷新,t_user表就创建成功了。last_visit字段代表最后访问时间,其他字段不用解释大家也知道。
二、代码讲解
1、首先我们需要定义一个用来封装数据库表字段的pojo,这里我们创建了一个User类,属性和t_user表字段对应。
2、我们在dao层定义我们的接口方法,包括查询用户,插入用户,更新最后访问时间。
3、创建mapper文件,mapper文件的命名必须和接口的命名一致(例如UserMapper.java和UserMapper.xml)
上面mapper文件的定义中,用查询用户sql来举例,id="findUserByUserName" 代表方法名称,parameterType="string"代表方法的参数类型,string可以直接小写,因为它是mybatis自定义的别名(基本数据类型都可以小写),当然你也可以直接写java.lang.String。resultType="user",这里的user代表的是com.neu.pojo.User,这里之所以可以直接用类名小写表示全限定类名,是因为在sqlMapConfig.xml文件中配置了批量定义别名,意思就是在com.neu.pojo包下的类在mapper文件中都可以用类名小写来表示。如果不配置,必须写全限定类名com.neu.pojo.User。
还有要注意的一点:如果传入的参数类型(parameterType)是pojo类型,那么#{}中的变量名称必须是pojo中对应的属性,例如用户注册和更新最后访问时间对应的sql语句中#{}的变量必须是User类中的属性,为了保持良好的编码习惯,不管我们传入的是什么类型的参数,都尽量和pojo的属性保持一致,例如查询用户对应的sql语句,虽然传入的参数是string类型,但是我们也使用了#{username}。
4、配置applicationContext-dao.xml
有了上面的mapper文件和pojo后,我们就可以配置dao层的spring文件了,在此之前,我们先配置下数据库的连接信息
在db.properties文件中我们配置了数据库的用户名,密码,驱动,url信息。之所以把这些信息抽取到外部文件,是为了方便管理。然后我们去配置下dao层的spring文件
【1中配置】加载刚才的db.properties文件,【2中配置】引用了db.properties定义的字段,配置连接源,只有配置了【1中配置】的<context:property-placeholder>标签,在【2中配置】才可以使用${}符号引用jdbc.username等字段。【3中配置】是让mybatis来管理我们的数据库,需要指定数据源和mybatis的配置文件。【4中配置】用来扫描mapper,需要指定接口所在的包位置。
5、创建业务代码
在com.neu.service.UserService类中我们实现了三个业务方法。首先需要让spring自动注入一个UserMapper接口类型对象
@Autowired代表按照类型注入,这里其实注入的是个代理对象,spring怎么能自动注入呢?我们需要在service层的spring配置文件中进行配置,来看applicationContext-service.xml
这里我们配置了注解扫描,意思就是扫描此包下所有类的中的注解,至于如何注入就是spring帮我们完成了。在刚才的业务类中,我们还需要在类上加上@Service注解,spring底层会自动为我们创建实例,待会controller层需要自动注入这个实例。
然后我们就可以使用userMapper来定义业务代码了
6、配置事务
在实际的开发环境中,我们需要为service层的方法加上事务管理,这个很好理解,例如我们的业务涉及到转账操作,转账业务至少包括两个sql语句,一个是加钱操作,一个是减钱操作,那么这两个操作必须都成功执行才能提交事务,否则就必须回滚事务。来看下applicationContext-transaction.xml
【1】中配置了事务管理器,需要指定数据源。【2】中定义了切面,切面由切点和增强两部分组成,切点用来确定哪些方法需要增强,增强包括增强逻辑和切点的方位信息。切面的意思就是,我们需要在哪个方法的哪个位置执行哪个增强代码,举个例子,我们在addUser(User user)方法执行前开启事务,在方法执行后提交或者回滚事务,addUser(User user)这个方法就是切点,开启事务和提交事务或者回滚事务对应的代码就是增强逻辑,而方法执行前或者执行后就代表方位信息。pointcut="execution(* com.neu.service.*.*(..))"代表切点,execution()是固定写法,第一个*代表方法的返回值,com.neu.service.*.*(..)中第一个*代表这个包下的所有类,第二个*代表类中所有的方法,..代表参数任意。所以com.neu.service.UserService下的所有方法都会被增强,【3】中定义增强,需要一个事务管理器属性。就是【1】中定义的,然后就是事务属性的配置,不同的方法名开头的方法定义了不同的事务传播行为,具体代表什么意思还需读者自行查询书籍或者资料,一两句话说不清。
7、创建controller
在controller中我们需要注入service,因为我们需要调用业务代码,前面是不是说了这里要用的。spring自动创建的UserService实例会注入进来,这里的controller类需要加上@Controller注解,目的也是让spring为我们自动创建实例,然后调用对应的handler。spring为什么能够自动创建controller呢,当然我们需要配置注解扫描了,来看springmvc.xml
上面的配置就会扫描com.neu.controller包下所有带注解的类,继续看配置:
【2】的配置没什么好解释的,就是配置最新的处理器映射器和处理器适配器。【3】中配置视图解析器,prefix代表前缀,suffix代表后缀,例如我们在controller中返回一个index.jsp页面,那么我们直接写return "index"就可以了,视图解析器就会知道我们要返回的是WEB-INF/jsp/index.jsp这个页面。springmvc.xml文件中还有【4】【5】配置,我们待会再讲!继续看controller
当我们在浏览器输入http://localhost:8080/的时候,这个请求就会映射到index()方法,同理输入http://localhost:8080/login和http://localhost:8080/register就会分别映射到showLogin()和showRegister方法。那么凭什么你说映射就映射,当然了,我们需要配置url的拦截形式,来看web.xml配置文件。
这里我们的url拦截形式是/,意思就是除了jsp页面之外,所有的资源都会拦截,注意我说的是所有资源,包括静态资源(css,js等)。所以当我们输入http://localhost:8080/或者http://localhost:8080/login的时候,DispatcherServlet对请求url进行解析,就会得到请求资源标示符/或者/login,然后就能够在controller中查找到对应的handler,这个时候对应的方法也就匹配上了,然后就执行,返回页面,让视图解析器去解析你返回的到底是哪个jsp,解析完之后再进行渲染,最后响应浏览器。读者可能疑惑,为什么url中没有工程名com-neu-web,这是因为我们在pom文件中配置了,在配置tomcat插件那个位置,只要配置了<path>/</path>就可以在url中不写工程名。还有一点说下,这里springmvc的处理请求流程说的比较简单,详细的请求过程会在第三部分细说。
8、web.xml配置
有了以上的配置和代码后,我们就可以在web.xml中去加载这些配置文件了
【1】是配置post乱码过滤器,【2】是加载spring的配置文件classpath:spring/applicationContext-*.xml,这里的使用*代表会加载以下三个文件:
三、启动项目
至此,我们的项目就可以启动了,主页和登录还有注册页面都可以显示了。这里只是显示,功能我们还没讲,我会在第三部分继续讲解。右键com-neu-web项目,选择run as , 选择maven build...,然后再Goals中输入clean tomcat7:run 点击run
看到如下信息说明启动成功:
在浏览器访问: http://localhost:8080/ ,我们的主页就出来了,看见这个小熊就说明访问成功!
点击请先登录,会跳转到登录页面,来我们点点试试,看看登录页面。
然后再点击Create Account试试,注册页面也就出来了。
先到这停吧,剩下的内容我会在第三部分继续讲解!
Spring,Mybatis,Springmvc框架整合项目(第二部分)的更多相关文章
- Spring,Mybatis,Springmvc框架整合项目(第一部分)
一.说在前面的话 本篇博文实现一个注册登录小项目,使用spring,mybatis,springmvc框架进行整合,我们创建的是一个maven工程,主要是方便jar包版本的管理.项目使用eclispe ...
- Spring+mybatis+struts框架整合的配置具体解释
学了非常久的spring+mybatis+struts.一直都是单个的用他们,或者是两两组合用过,今天总算整合到一起了,配置起来有点麻烦.可是配置完一次之后.就轻松多了,那么框架整合配置具体解释例如以 ...
- Spring,Mybatis,Springmvc框架整合项目(第三部分)
一.静态资源不拦截 第二部分最后显示的几个页面其实都加载了css和js等文件,要不然不会显示的那么好看(假装好看吧),前面已经说了,我们在web.xml中配置了url的拦截形式是/,那么Dispatc ...
- SSM(SpringMVC+Spring+MyBatis)三大框架使用Maven快速搭建整合(实现数据库数据到页面进行展示)
本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...
- SSM(Spring,SpringMVC,Mybatis)框架整合项目
快速上手SSM(Spring,SpringMVC,Mybatis)框架整合项目 环境要求: IDEA MySQL 8.0.25 Tomcat 9 Maven 3.6 数据库环境: 创建一个存放书籍数据 ...
- Spring+SpringMVC+MyBatis+Maven框架整合
本文记录了Spring+SpringMVC+MyBatis+Maven框架整合的记录,主要记录以下几点 一.Maven需要引入的jar包 二.Spring与SpringMVC的配置分离 三.Sprin ...
- SpringMVC+Spring+Mybatis+Maven+mysql整合
一.准备工作1.工具:jdk1.7.0_80(64)+tomcat7.0.68+myeclipse10.6+mysql-5.5.48-win322. 开发环境安装配置.Maven项目创建(参考:htt ...
- (一)springmvc+spring+mybatis+maven框架搭建
(一)springmvc+spring+mybatis+maven框架搭建 1.说明 工作之余,为了学习点东西.先搭建个框架. 以后要往里面加东西,比如rabbitMQ.redis.shiro等. 也 ...
- spring + Mybatis + pageHelper + druid 整合源码分享
springMvc + spring + Mybatis + pageHelper + druid 整合 spring 和druid整合,spring 整合druid spring 和Mybatis ...
随机推荐
- Spark Mllib里如何将trainDara训练数据的分类特征字段转换为数值字段(图文详解)
不多说,直接上干货! 字段3 是分类特征字段,但是呢,在分类算法里不能直接用.所以,必须要转换为数值字段才能够被分类算法使用. 具体,见 Hadoop+Spark大数据巨量分析与机器学习整合开发实战的 ...
- Storm编程入门API系列之Storm的Topology默认Workers、默认executors和默认tasks数目
关于,storm的启动我这里不多说了. 见博客 storm的3节点集群详细启动步骤(非HA和HA)(图文详解) 建立stormDemo项目 Group Id : zhouls.bigdata Art ...
- SpringBoot项目取消数据库配置
1. 错误springboot项目启动时,如果没有配置数据库配置,启动时会抛出如下异常. Description: Cannot determine embedded database driver ...
- Oracle 恢复数据后,数据库中中文变成问号解决方法
1.右击---我的电脑---环境变量 2.新增环境变量 变量名:LANG=zh_CN.GBK NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK 3.重启PLSQL或 ...
- 5、两个栈实现队列------------>剑指offer系列
题目 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路 栈1: 用于入队列存储 栈2: 出队列时将栈1的数据依次出栈,并入栈到栈2中 栈2出栈即栈1的底部数据 ...
- 双飞翼布局介绍-始于淘宝UED-2011年淘宝玉伯写的
仔细分析各种布局的技术实现,可以发现下面三种技术被经常使用: 浮动 float 负边距 negative margin 相对定位 relative position 这是实现布局的三个最基本的原子技术 ...
- setuid
-r-s--x--x #s就是setuid,仅可用在二进制文件,对目录设置无效
- Memcache笔记01-Memcache的安装
memcached是什么? Memcached是一个高性能的分布式的内存对象缓存系统,目前全世界不少人使用这个缓存项目来构建自己大负载的网站,来分担数据库的压力,通过在内存里维护一个统一的巨大的has ...
- Django之CSRF问题
1.csrf全称:cross site request forgery(跨站请求伪造),举例来讲,一个安全的网站A,一个恶意网站B,当你在A网站进行了登录后,这时候浏览器会保存你的cookie和ses ...
- bsub && lsf 介绍
文章转载地址:http://www.bbioo.com/lifesciences/40-114265-1.html LSF系统介绍 http://scc.ustc.edu.cn/zh_CN/ 中科大超 ...