Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例

                                         作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

  能看到这篇文章的小伙伴,详细你已经有一定的Java功能,并且对SSM组件已经有一定的了解啦。上次我分享过一篇关于“SSM之Spring和Mybatis整合案例”,这次我们需要在上次的基础之上添加前端的支持。本篇博客只是介绍他们的联合用法,并不涉及具体的业务逻辑。但是我们可以通过这个小案例,来嵌套我们实际生产环境中所需要的处理的业务逻辑哟!

一.开发环境介绍

  整合SSM使用的是idea开发工具。在进行开发之前,我们需要准备数据库测试数据以及在Windows操作系统下安装WEB服务器(Tomcat)。

1>.添加数据库数据

 create database yinzhengjie;

 use yinzhengjie;

 create table if not exists users(id int primary key auto_increment,name varchar(20) , age int) ;

2>.安装Tomcat

  安装Tomcat的过程极为艰难,直接在网上下载一个安装即可,当然我这里的测试版本大家也可以下载,直接解压即可完成安装操作。我已经下载好了Tomcat绿色版(链接:https://pan.baidu.com/s/1_fTB5tX0JMUtErI-s0_Ofg 密码:bow5

二.编写MVC框架代码并启动Tomcat服务器

1>.创建模块,添加web project支持

2>.引入Maven依赖

 <?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>cn.org.yinzhengjie</groupId>
<artifactId>MySSM</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.17</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.5.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
</project>

pom.xml 文件内容

3>.编写代码

  创建包结构如下:

  具体代码如下:

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.ssm.dao; import java.util.List; /**
* Basedao,基本dao
*/
public interface BaseDao<T> {
public abstract void insert(T t) ;
public abstract void update(T t) ;
public abstract void delete(Integer id) ;
public abstract T selectOne(Integer id) ;
public abstract List<T> selectAll() ;
public abstract List<T> selectPage(int offset, int length) ;
public abstract int count() ;
}

BaseDao.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.ssm.dao.impl; import cn.org.yinzhengjie.ssm.dao.BaseDao;
import cn.org.yinzhengjie.ssm.domain.User;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository; import javax.annotation.Resource;
import java.util.List; @Repository("userDao")
public class UserDaoImpl extends SqlSessionDaoSupport implements BaseDao<User> { public void insert(User user) {
getSqlSession().insert("users.insert" , user) ;
} public void update(User user) {
getSqlSession().update("users.update", user);
} public void delete(Integer id) {
getSqlSession().delete("users.deleteOne", id);
} public User selectOne(Integer id) {
return getSqlSession().selectOne("users.selectOne", id);
}
public int count() {
return getSqlSession().selectOne("users.selectCount");
} public List<User> selectAll() {
return getSqlSession().selectList("users.selectAll");
}
public List<User> selectPage(int offset ,int length) {
return getSqlSession().selectList("users.selectPage" , new RowBounds(offset,length));
} @Resource(name="sqlSessionFactory")
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
}

UserDaoImpl.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.ssm.domain; public class User {
private Integer id;
private String name;
private int age; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

User.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.ssm.service; import java.util.List; public interface UserService<T> {
public abstract void insert(T t); public abstract void update(T t); public abstract void delete(Integer id); public abstract T selectOne(Integer id);
public abstract int selectCount(); public abstract List<T> selectAll();
public abstract List<T> selectPage(int offset, int length);
}

UserService.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.ssm.service.impl; import cn.org.yinzhengjie.ssm.dao.BaseDao;
import cn.org.yinzhengjie.ssm.domain.User;
import cn.org.yinzhengjie.ssm.service.UserService;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.util.List; /**
* 用户服务实现类
*/
@Service("userService")
public class UserServiceImpl implements UserService<User> { @Resource(name="userDao")
private BaseDao<User> userDao ; public void insert(User user) {
userDao.insert(user);
} public void update(User user) {
userDao.update(user);
} public void delete(Integer id) {
userDao.delete(id);
} public User selectOne(Integer id) {
return userDao.selectOne(id);
} public List<User> selectAll() {
return userDao.selectAll();
} public List<User> selectPage(int offset , int length) {
return userDao.selectPage(offset , length);
} public int selectCount() {
return userDao.count();
}
}

UserServiceImpl.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.ssm.web.controller; import cn.org.yinzhengjie.ssm.domain.User;
import cn.org.yinzhengjie.ssm.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import javax.annotation.Resource; @Controller
@RequestMapping("/home")
public class HomeController { //注入用户Service
@Resource(name="userService")
private UserService us ; @RequestMapping("/m1")
public String m1(){
System.out.println("m1");
User u = new User();
u.setName("yinzhengjie");
u.setAge(18);
us.insert(u);
return "index" ;
}
}

HomeController.java 文件内容

 /*
@author :yinzhengjie
Blog:http://www.cnblogs.com/yinzhengjie/tag/Java%E5%9F%BA%E7%A1%80/
EMAIL:y1053419035@qq.com
*/
package cn.org.yinzhengjie.ssm.web.controller; import cn.org.yinzhengjie.ssm.domain.User;
import cn.org.yinzhengjie.ssm.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import javax.annotation.Resource;
import java.util.List; @Controller
@RequestMapping("/user")
public class UserController { @Resource(name="userService")
private UserService<User> us ; public String findAll(Model m){
List<User> list = us.selectAll();
m.addAttribute("list" , list) ;
return "user/list" ;
} @RequestMapping("/list")
public String page(Model m , @RequestParam(value = "pno" , defaultValue = "1") int pno){
//每页显示5条记录
int records = 5 ; //总页数
int pages = 1 ; //查询总记录数
int count = us.selectCount() ; if(count % records == 0){
pages = count / records ;
}
else{
pages = count / records + 1;
} List<User> list = us.selectPage( (pno-1) * records, records) ; m.addAttribute("list" ,list) ;
m.addAttribute("pages" , pages) ;
return "user/list" ;
} @RequestMapping("/delete")
public String delete(Integer uid) {
us.delete(uid);
return "redirect:/user/list";
} @RequestMapping("/toadd")
public String toadd(){
return "user/reg" ;
} @RequestMapping(value = "/doadd" ,method = RequestMethod.POST)
public String doAdd(User user){
us.insert(user);
return "redirect:/user/list" ;
} @RequestMapping(value = "/modify" ,method = RequestMethod.GET)
public String modify(Model m ,Integer uid){
User u = us.selectOne(uid) ;
m.addAttribute("user" , u) ;
return "user/edit" ;
} @RequestMapping(value = "/update" ,method = RequestMethod.POST)
public String update(User u){
us.update(u);
return "redirect:/user/list" ;
}
}

UserController.java 文件内容

4>.编辑Spring和Mybatis配置文件

   文件存放路径如下:

  具体代码如下:

 <?xml version="1.0"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
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-4.3.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">
<context:component-scan base-package="cn.org.yinzhengjie.ssm.service,cn.org.yinzhengjie.ssm.dao" />
<!-- 数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:5200/yinzhengjie"/>
<property name="user" value="root"/>
<property name="password" value="yinzhengjie"/>
<property name="maxPoolSize" value="10"/>
<property name="minPoolSize" value="2"/>
<property name="initialPoolSize" value="3"/>
<property name="acquireIncrement" value="2"/>
</bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean> <!-- 事务管理器,在servie层面上实现事务管理的。 -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean> <!-- 事务通知 -->
<tx:advice id="txAdvicd" transaction-manager="txManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT" />
<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" />
<tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" />
<tx:method name="select*" propagation="REQUIRED" isolation="DEFAULT" read-only="true" />
<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT" />
</tx:attributes>
</tx:advice> <aop:config>
<aop:advisor pointcut="execution(* *..*Service.*(..))" advice-ref="txAdvicd" />
</aop:config>
</beans>

beans.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>
<typeAliases>
<typeAlias type="cn.org.yinzhengjie.ssm.domain.User" alias="_User" />
</typeAliases>
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>

mybatis-config.xml 文件内容

 <?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 定义名字空间 -->
<mapper namespace="users">
<insert id="insert">
insert into users(name, age) values(#{name}, #{age}) ;
</insert> <update id="update">
update users set name = #{name} , age = #{age} where id = #{id}
</update> <delete id="deleteOne">
delete from users where id = #{id}
</delete> <select id="selectOne" resultType="_User">
select * from users where id = #{id}
</select> <select id="selectAll" resultType="_User">
select * from users
</select>
<select id="selectPage" resultType="_User">
select * from users limit #{offset} , #{limit}
</select>
<select id="selectCount" resultType="int">
select count(*) from users
</select> </mapper>

UserMapper.xml 文件内容

5>.配置web文件

  配置目录如下:

  具体文件内容如下:

【web/user目录】

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>UserList</title>
</head>
<body>
</body>
<form action='<c:url value="/user/update"/>' method="post">
<input type="hidden" name="id" value='<c:out value="${user.id}"/>'>
username : <input type="text" name="name" value='<c:out value="${user.name}"/>'><br>
age : <input type="text" name="age" value='<c:out value="${user.age}"/>'><br>
<input type="submit" value="提交">
</form>
</html>

edit.jsp 文件内容

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>UserList</title>
</head>
<body>
<a href='<c:url value="/user/toadd" />'>添加新用户</a><br>
<table border="1px" cellpadding="0px" cellspacing="0px"
style="border-collapse: collapse">
<tr>
<td>id</td>
<td>name</td>
<td>age</td>
<td>修改</td>
<td>删除</td>
</tr>
<c:forEach items="${list}" var="u">
<tr>
<td><c:out value="${u.id}" /></td>
<td><c:out value="${u.name}" /></td>
<td><c:out value="${u.age}" /></td>
<td><a href='<c:url value="/user/modify?uid=${u.id}" />'>修改</a></td>
<td><a href='<c:url value="/user/delete?uid=${u.id}" />'>删除</a></td>
</tr>
</c:forEach>
<tr>
<td colspan="5" style="text-align: right">
<c:forEach begin="1" end="${pages}" var="i">
<c:if test="${i == param.pno}">
[<c:out value="${i}"/>]&nbsp;&nbsp;
</c:if>
<c:if test="${i != param.pno}">
<a href='<c:url value="/user/list?pno=${i}" />'><c:out value="${i}"/></a>&nbsp;&nbsp;
</c:if>
</c:forEach>
</td>
</tr> </table>
</body>
</html>

list.jsp 文件内容

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>UserList</title>
</head>
<body>
</body>
<form action='<c:url value="/user/doadd"/>' method="post">
username : <input type="text" name="name"><br>
age : <input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
</html>

reg.jsp 文件内容

【web/WEB-INF目录】

 <?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:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- 配置扫描路径 -->
<context:component-scan base-package="cn.org.yinzhengjie.ssm.web.controller"/>
<!-- 使用注解驱动 -->
<mvc:annotation-driven/>
<!-- 内部资源视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>

dispatcher-servlet.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_3_1.xsd"
version="3.1"> <!-- 通过上下文参数指定配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param> <!-- 上下文载入器监听器,确保web服务器启动时,加载spring的配置到容器中 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener> <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>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

web.xml 文件内容

【web根目录】

 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html> <!--Doctype告诉浏览器使用什么样的html或xhtml规范来解析html文档。html这种模式兼容浏览器是最好的-->
<html lang="en">
<head name="尹正杰" age="25"> <!--标签的开头,其里面的内容(name="尹正杰")是标签的属性,其属性可以定义多个。-->
<meta charset="UTF-8"/> <!--指定页面编码,我们称这种标签类型为自闭和标签,因为我们需要在标签的结尾写上“/”,为了方便我们识别标签类型。-->
<meta http-equiv="refresh" content="5; Url=http://www.cnblogs.com/yinzhengjie/"> <!--这是做了一个界面的跳转,表示30s不运行的话就跳转到指定的URL-->
<title>尹正杰的个人主页</title> <!--定义头部(标签)的标题-->
<meta name="keywords" content="开发者,博客园,开发者,程序猿,程序媛,极客,编程,代码,开源,IT网站,Developer,Programmer,Coder,Geek,技术社区" /> <!--“content”定义关键字,其作用就是让浏览器通过搜索关键字时,会匹配该网站,这就是说如果你没有单独给百度钱的话,这些关键字就尤为重要啦!-->
<meta name="description" content="博客园是一个面向开发者的知识分享社区。自创建以来,博客园一直致力并专注于为开发者打造一个纯净的技术交流社区,推动并帮助开发者通过互联网分享知识,从而让更多开发者从中受益。博客园的使命是帮助开发者用代码改变世界。" /> <!--定义描述字符,其作用就告诉客户你的这个网站是干嘛使用的。-->
<link rel="shortcut icon" href="https://baike.baidu.com/pic/%E9%82%93%E7%B4%AB%E6%A3%8B/6798196/0/d1a20cf431adcbef011db9bba6af2edda3cc9f66?fr=lemma&ct=single#aid=0&pic=d1a20cf431adcbef011db9bba6af2edda3cc9f66" type="image/x-icon" /> <!--定义头部图标-->
<meta http-equiv="X-UA-Compatible" content="IE=Edge"> <!--这个是IE的浏览器生效的规则,如果你用的是谷歌,360等浏览器的话,这行规则不生效,如果你用的是IE浏览器的话,表示用IE最新的引擎去渲染HTML-->
</head> <!--标签的结尾,结合该标签的开头,这种标签类型我们称之为主动闭合标签。-->
<body>
<h1>尹正杰</h1><!--定义文件的内容,其中“h1”标签中-->
<h2>尹正杰</h2>
<h3>尹正杰</h3>
<h4>尹正杰</h4>
<h5>尹正杰</h5>
<h6>尹正杰</h6>
<h1>You are a good boy!</h1>
<div style="width: 4000px"> <!--是其缩进代码的父级标签,给其定义宽度属性是200像素大小-->
<h1>尹正杰</h1><!--块级标签:也叫父级标签,即自己单独占了一行空间,或者说是占它父级标签的100%。作用:定义文件的内容-->
<h1>You are a good boy!</h1>
</div> <!--div的标签的结尾-->
<p>素胚勾勒出青花笔锋浓转淡<br/>瓶身描绘的牡丹一如你初妆<br/>冉冉檀香透过窗心事我了然<br/>宣纸上走笔至此搁一半<br/>釉色渲染仕女图韵味被私藏<br/>而你嫣然的一笑如含苞待放</p> <!--其中<br/>表示换行符的意思,<p></p>表示一个段落的意思。-->
<a>yinzhengjie</a> <!--内联标签,以a开头的标签都是内联标签,这些标签的内容时连接在一起的。:-->
<a>2017</a>
<a href="http://www.cnblogs.com/yinzhengjie/" target="_blank">尹正杰博客</a> <!--a标签特有的性能,重定向,通过href属性定义需要跳转的网站,通过target="_blank"表示新打开一个标签页并打开新的URL地址--> <a href="#Y1">Golang第一章</a> <!--a标签特有的性能,做锚,找ID为"Y1"的标签并跳转过去-->
<a href="#Y2">Golang第二章</a> <!--找ID为"Y2"的标签-->
<a href="#Y3">Golang第三章</a> <!--找ID为"Y3"的标签--> <div id="Y1" style="height:700px;background-color:antiquewhite"> <!--用id来定义标签为"Y1"(一般要具有唯一性,即尽量不要让标签的id的值相同),用style来定义高度为700像素,颜色用background-color来定义。-->
Golang进阶之路Day1<br/>
Go语言官方自称,之所以开发Go 语言,是因为“近10年来开发程序之难让我们有点沮丧”。 这一定位暗示了Go语言希望取代C和Java的地位,成为最流行的通用开发语言。博客地址:http://www.cnblogs.com/yinzhengjie/p/6482675.html
</div> <div id="Y2" style="height:700px;background-color:rebeccapurple;">
<br/>Golang进阶之路Day2<br/>
前者大家应该都很熟悉,因为我在上一篇(http://www.cnblogs.com/yinzhengjie/p/6482675.html)关于GO的博客中用"go build"命令编译不同的版本,但是在这里我们还是要演示一下go build的花式用法。博客地址:http://www.cnblogs.com/yinzhengjie/p/7000272.html
</div> <div id="Y3" style="height:700px;background-color:brown;">
Golang进阶之路Day3<br/>
当然我这里只是介绍了Golang的冰山一角,对Golang感兴趣的小伙伴,可以看一下Golang官网的文档说明。毕竟官方才是最权威的,给出国内地址:https://golang.org/pkg/!博客地址:http://www.cnblogs.com/yinzhengjie/p/7043430.html
</div> <!--功能最少的标签,最纯洁的易于加工的标签,即他们没有“h1”和"a"标签那么多的属性。-->
<div>我是块标签</div>
<span>我是内联标签</span>     <!--列表-->
<ul> <!--打印字符穿前面带个小黑点-->
<li>菜单一</li>
<li>菜单二</li>
<li>菜单三</li>
</ul> <ol> <!--打印字符串前面有数字标识-->
<li>第一章</li>
<li>第二章</li>
<li>第三章</li>
</ol> <ol>
<dd>北京</dd> <!--自带缩进,可以用于写新闻的标题-->
<dt>朝阳区</dt>
<dt>亦庄经济开发区</dt>
<dt>丰台区</dt>
<dt>海淀区</dt>
<dd>河北</dd>
<dt>石家庄</dt>
<dt>保定</dt>
<dd>陕西</dd>
<dt>西安</dt>
<dt>安康</dt>
</ol> <!--表格-->
<table border="1"> <!--定义一个表格,其属性是border="1",表示加边框的意思。-->
<thead> <!--定义表头信息-->
<tr> <!--'tr'表示定义一行的数据,里面的内容由子标签<th></th>实现-->
<th>姓名</th> <!--'th'定义同一行每一列的内容,也就是说只要带有这个标签的且在其父标签"tr"标签中就是写的同一行内容。-->
<th>年龄</th>
<td>性别</td>
</tr>
</thead>
<tbody> <!--定义表格的内容-->
<tr> <!--'tr'表示每一行的数据,其定义的是行的操作。-->
<td>尹正杰</td> <!--td用来定义当前行的每一列的内容,与thead中的'th'用法相同。只不过'th’有加粗效果!-->
<td>25</td>
<td>boy</td>
</tr>
<tr> <!--'tr'表示每一行的数据-->
<td>尹正杰</td> <!--‘<td></td>’标签定义的是列的操作-->
<td colspan="2">26</td> <!--注意,'td'标签的colspan属性表示向右占锯的空间,我们给的值是“2”,就表示会从当前列往后在占一个列,共计当前行的两列空间!-->
</tr>
<tr> <!--'tr'表示每一行的数据-->
<td>yinzhengjie</td> <!--‘<td></td>’标签定义的是列的操作-->
<td rowspan="2">26</td> <!--注意,'td'标签的rowspan属性表示向下占据的空间,我们这里给的是还是“2”,即从当前行的当前列,向下扩充空一列内容。-->
</tr>
<tr> <!--'tr'表示每一行的数据-->
<td>yinzhengjie</td> <!--‘<td></td>’标签定义的是列的操作-->
<td >26</td> <!--表示这个'td'标签占两列的空间-->
</tr>
</tbody>
</table>
</body>
</html>

index.jsp 文件内容

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>myhtml.html</title>
</head>
<body>
<table border="1px" cellpadding="0px" cellspacing="0px" style="border-collapse: collapse">
<tr>
<td>id</td>
<td>name</td>
<td>age</td>
</tr>
<tr>
<td>1</td>
<td>tom</td>
<td>12</td>
</tr>
<tr>
<td>2</td>
<td>tomas</td>
<td>13</td>
</tr>
</table>
<h1>h1标题</h1>
<h2>h2标题</h2>
<h3>h3标题</h3>
<a href="http://www.baidu.com">百度</a><br>
<img src="Koala.gif" width="200px" height="100px">
<input action="">
username : <input type="text" name="user_name"><br>
password : <input type="password" name="user_pass"><br>
confirm : <input type="password" name="user_confirm"><br>
nickname : <input type="text" name="user_nickname"><br>
sex : <input type="radio" name="user_sex" value="1">男</input>
<input type="radio" name="user_sex" value="0">女</input><br>
hobby : <input type="checkbox" name="user_hobby" value="0">足球</input>
<input type="checkbox" name="user_hobby" value="1">蓝球</input>
<input type="checkbox" name="user_hobby" value="2">排球</input><br>
民族 : <select multiple="multiple">
<option value="0">汉族</option>
<option value="1">满族</option>
<option value="2">回族</option>
</select>
<br>
<textarea></textarea>
</form>
</body>
</html>

myhtml.html 文件内容(主要是测试HTML标签的代码文件)

koala.gif是一张考拉的图片,这个大家可以随意放一张照片上去,如下:

6>.添加Tomcat服务端插件

7>.修改Tomcat的服务器名称

8>.添加开发环境(选中项目名称)

9>.配置Tomcat的相关参数(配置完毕之后需要点击ok确认哟)

10>.给项目添加依赖库

  点击OK确认配置成功,如下图:

11>.启动Tomcat服务器

  启动成功之后,会自动打开我们设置的浏览器,如下图:

三.通过Web界面实现增删改查

  由于我的首页会在5秒之后进行自动跳转,因此咱们的手速得快,我们需要切换到指定的路径中去“/user/list”。

1>.查看数据库信息

2>.通过web界面网数据库里插入数据

  添加新用户

  添加测试用户:

   添加数据成功:

3>.删除数据(我们用上面的方法多添加一些数据信息)

4>.修改数据

  将修改的数据进行提交:

  查看数据是否修改成功:

Java基础-SSM之Spring和Mybatis以及Spring MVC整合案例的更多相关文章

  1. Java基础-SSM之Spring和Mybatis整合案例

    Java基础-SSM之Spring和Mybatis整合案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   在之前我分享过mybatis和Spring的配置案例,想必大家对它们的 ...

  2. Java基础-SSM之mybatis快速入门篇

    Java基础-SSM之mybatis快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 其实你可能会问什么是SSM,简单的说就是spring mvc + Spring + m ...

  3. Java基础-SSM之Spring MVC入门篇

    Java基础-SSM之Spring MVC入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Spring MVC简介 1>.什么是Spring MVC 答:Sprin ...

  4. Java基础-SSM之Spring的POJO(Plain Old Java Object)实现AOP

    Java基础-SSM之Spring的POJO(Plain Old Java Object)实现AOP 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 上次我分享过Spring传统的A ...

  5. Java基础-SSM之Spring的AOP编程

    Java基础-SSM之Spring的AOP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   Spring的本质说白了就是动态代理,接下来我们会体验AOP的用法.它是对OOP的 ...

  6. Java基础-SSM之Spring快速入门篇

    Java基础-SSM之Spring快速入门篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java ...

  7. Java基础-SSM之mybatis的统计函数和分页查询

    Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  8. Java基础-SSM之mybatis一对一关联

    Java基础-SSM之mybatis一对一关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表)  1>.创建husbands和wifes表并建 ...

  9. Java基础-SSM之mybatis多对多关联

    Java基础-SSM之mybatis多对多关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建teas,stus,links表 u ...

随机推荐

  1. 程序员大佬推荐的java学习路线

    作为我的第一篇博客,我第一个想到的就是在校时就看到的这篇文章.并且在之后的时间里自己都反复观看过,有时候这不单单是一篇学习路线,也是审视自己技术能力的里程碑,和激励自己的鞭挞绳. 先来个书籍清单: & ...

  2. Android中级教程之----Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

    在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助. android. ...

  3. resource fork, Finder information, or similar detritus not allowed

    1.关闭当前项目和Xcode 2.打开终端或者iterm cd ~/Library/Developer/Xcode/DerivedData/ 3. xattr -rc . 4.重新打开项目 5.如果不 ...

  4. Linux shell (6)

    1.linux shell函数: 将一组命令集或语句形成一个可用的块,这些语句块成为函数. 2.shell 函数的组成:  函数名:函数的名字,注意一个脚本中函数名要唯一,否则会引起调用函数紊乱  函 ...

  5. 微软职位内部推荐-SW Engineer II for WinCE

    微软近期Open的职位: Do you have a passion for embedded devices and services? &nbsp Does the following m ...

  6. ace -- 语法高亮

    Creating a Syntax Highlighter for Ace 给ace创建一个语法高亮 Creating a new syntax highlighter for Ace is extr ...

  7. Substrings (C++ find函数应用)

    Description You are given a number of case-sensitive strings of alphabetic characters, find the larg ...

  8. 第二个spring冲刺第3天

    今天天气突然变得很冷,所以我们队的人都有少许的不适.加上天气比较冷,我们都不怎么想做.幸好在队长的提醒下,我们终于继续投入研发的工作中.由于市面上的同类软件的数量不少所以我们下载了一些来看,希望能找到 ...

  9. c#代码阅读

    问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间精确到分钟(电脑:单核CPU 4 ...

  10. springmvc下载文件

    Controller内代码: @RequestMapping(value = "/upload") public ResponseEntity<byte[]> uplo ...