环境 idea jdk1.8 tomcat MySQL
打开 idea 选择创建一个 maven 项目
然后点击 next,next,finsh
然后看项目的结构
如图所示
接着创建 com 包, 再在 com 包下新建四个包, 分别命名为:
自定义 pom.xml
- <?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>com.li</groupId>
- <artifactId>ssm_test_2</artifactId>
- <version>1.0-SNAPSHOT</version>
- <packaging>war</packaging>
- <name>ssm_test_2 Maven Webapp</name>
- <!-- 用来设置版本号 -->
- <properties>
- <srping.version>4.0.2.RELEASE</srping.version>
- <mybatis.version>3.2.8</mybatis.version>
- <slf4j.version>1.7.12</slf4j.version>
- <log4j.version>1.2.17</log4j.version>
- <druid.version>1.0.9</druid.version>
- </properties>
- <!-- 用到的 jar 包 -->
- <dependencies>
- <!-- servlet 依赖的 jar 包 start -->
- <dependency>
- <groupId>javax.servlet</groupId>
- <artifactId>javax.servlet-API</artifactId>
- </dependency>
- <!-- servlet 依赖的 jar 包 start -->
- <!-- jsp 依赖 jar 包 start -->
- <dependency>
- <groupId>javax.servlet.jsp</groupId>
- <artifactId>javax.servlet.jsp-API</artifactId>
- <version>2.3.1</version>
- </dependency>
- <!-- 单元测试 -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>4.11</version>
- <!-- 表示开发的时候引入, 发布的时候不会加载此包 -->
- <scope>test</scope>
- </dependency>
- <!-- spring 框架包 -->
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-test</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-core</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-oxm</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-tx</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-jdbc</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-aop</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-context-support</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-expression</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-ORM</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-Web</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${srping.version}</version>
- </dependency>
- <!-- spring 框架包 -->
- <!-- mybatis 框架包 -->
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis</artifactId>
- <version>${mybatis.version}</version>
- </dependency>
- <dependency>
- <groupId>org.mybatis</groupId>
- <artifactId>mybatis-spring</artifactId>
- <version>1.2.2</version>
- </dependency>
- <!-- mybatis 框架包 -->
- <!-- 数据库驱动 -->
- <dependency>
- <groupId>MySQL</groupId>
- <artifactId>MySQL-connector-java</artifactId>
- <version>5.1.35</version>
- </dependency>
- <!-- 导入 dbcp 的 jar 包, 用来在 applicationContext.xml 中配置数据库 -->
- <dependency>
- <groupId>commons-dbcp</groupId>
- <artifactId>commons-dbcp</artifactId>
- <version>1.2.2</version>
- </dependency>
- <!-- jstl 标签类 -->
- <dependency>
- <groupId>jstl</groupId>
- <artifactId>jstl</artifactId>
- <version>1.2</version>
- </dependency>
- <!-- log -->
- <dependency>
- <groupId>log4j</groupId>
- <artifactId>log4j</artifactId>
- <version>${log4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-API</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>slf4j-log4j12</artifactId>
- <version>${slf4j.version}</version>
- </dependency>
- <!-- 连接池 -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>druid</artifactId>
- <version>${druid.version}</version>
- </dependency>
- </dependencies>
- <build>
- <!-- 如果不添加此节点 mybatis 的 mapper.xml 文件都会被漏掉. -->
- <resources>
- <resource>
- <directory>src/main/java</directory>
- <includes>
- <include>**/*.properties</include>
- <include>**/*.xml</include>
- </includes>
- <filtering>false</filtering>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- <includes>
- <include>**/*.properties</include>
- <include>**/*.xml</include>
- </includes>
- <filtering>false</filtering>
- </resource>
- </resources>
- <!-- java 编译插件, 如果 maven 的设置里配置好 jdk 版本就不用 -->
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-compiler-plugin</artifactId>
- <version>3.2</version>
- <configuration>
- <source>1.8</source>
- <target>1.8</target>
- <encoding>UTF-8</encoding>
- </configuration>
- </plugin>
- </plugins>
- </build>
- </project>
在 resource 包下新建 Directory:mapper(用来放 xxMapper.xml)
添加 jdbc.properties 和 lo4j.properties 文件
- jdbc.properties
- driver=com.MySQL.jdbc.Driver
- url=jdbc\:MySQL\://localhost\:3306/test
- username=root
- password=123456
- initialSize=0
- maxActive=20
- maxIdle=20
- minIdle=1
- maxWait=60000
lo4j.properties 文件
- log4j.rootLogger=DEBUG,CONSOLE,file
- #log4j.rootLogger=ERROR,ROLLING_FILE
- log4j.logger.com.qhit.dao=debug
- log4j.logger.com.ibatis=debug
- log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
- log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
- log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
- log4j.logger.java.sql.Connection=debug
- log4j.logger.java.sql.Statement=debug
- log4j.logger.java.sql.PreparedStatement=debug
- log4j.logger.java.sql.ResultSet=debug
- log4j.logger.org.tuckey.Web.filters.urlrewrite.UrlRewriteFilter=debug
- ######################################################################################
- # Console Appender 日志在控制输出配置
- ######################################################################################
- log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
- log4j.appender.Threshold=error
- log4j.appender.CONSOLE.Target=System.out
- log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
- log4j.appender.CONSOLE.layout.ConversionPattern= [%p] %d %c - %m%n
- ######################################################################################
- # DailyRolling File 每天产生一个日志文件, 文件名格式: log2009-09-11
- ######################################################################################
- log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
- log4j.appender.file.DatePattern=yyyy-MM-dd
- log4j.appender.file.File=log.log
- log4j.appender.file.Append=true
- log4j.appender.file.Threshold=error
- log4j.appender.file.layout=org.apache.log4j.PatternLayout
- log4j.appender.file.layout.ConversionPattern=%d{
- yyyy-M-d HH:mm:ss
- }%x[%5p](%F:%L) %m%n
- log4j.logger.com.opensymphony.xwork2=error
然后创建 applicationContext.xm
- <?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:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <!-- 加载 properties 文件 -->
- <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
- <property name="location" value="classpath:jdbc.properties"/>
- </bean>
- <!-- 配置数据源 -->
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
- <property name="driverClassName" value="${driver}"/>
- <property name="url" value="${url}"/>
- <property name="username" value="${username}"/>
- <property name="password" value="${password}"/>
- </bean>
- <!-- mybatis 和 spring 完美整合, 不需要 mybatis 的配置映射文件 -->
- <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- <property name="dataSource" ref="dataSource"/>
- <!-- 扫描 model 包 -->
- <property name="typeAliasesPackage" value="com.lwy.pojo"/>
- <!-- 扫描 sql 配置文件: mapper 需要的 xml 文件 -->
- <property name="mapperLocations" value="classpath:mapper/*.xml"/>
- </bean>
- <!-- Mapper 动态代理开发, 扫描 dao 接口包 -->
- <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
- <!-- 注入 sqlSessionFactory -->
- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
- <!-- 给出需要扫描 Dao 接口包 -->
- <property name="basePackage" value="com.lwy.mapper"/>
- </bean>
- <!-- 事务管理 -->
- <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- <!-- 数据库连接池 -->
- <property name="dataSource" ref="dataSource"/>
- </bean>
- </beans>
创建 sping-mvc.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
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
- <!-- 扫描注解, 这样 com.xjt 包下的文件都能被扫描 -->
- <context:component-scan base-package="com.lwy"/>
- <!-- 开启 SpringMVC 注解模式 -->
- <mvc:annotation-driven/>
- <!-- 静态资源默认 servlet 配置 -->
- <mvc:default-servlet-handler/>
- <!-- 配置返回视图的路径, 以及识别后缀是 jsp 文件 -->
- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
- <property name="prefix" value="/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
- </beans>
接着在 webapp 下 Web-INF 配置 Web.xml
- <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">
- <display-name>mvcDemo</display-name>
- <welcome-file-list>
- <welcome-file>/pages/index.jsp</welcome-file>
- </welcome-file-list>
- <!-- 注册 ServletContext 监听器, 创建容器对象, 并且将 ApplicationContext 对象放到 Application 域中 -->
- <listener>
- <listener-class>org.springframework.Web.context.ContextLoaderListener</listener-class>
- </listener>
- <!-- 指定 spring 核心配置文件 -->
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:applicationContext.xml</param-value>
- </context-param>
- <!-- 解决乱码的过滤器 -->
- <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>springmvc</servlet-name>
- <servlet-class>org.springframework.Web.servlet.DispatcherServlet</servlet-class>
- <!-- 指定配置文件位置和名称 如果不设置, 默认找 / WEB-INF/<servlet-name>-servlet.xml -->
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:spring-mvc.xml</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- <async-supported>true</async-supported>
- </servlet>
- <servlet-mapping>
- <servlet-name>springmvc</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- </Web-App>
数据库创建一个表
- DROP TABLE IF EXISTS `user`;
- CREATE TABLE `user` (
- `id` varchar(200) NOT NULL,
- `name` varchar(200) CHARACTER SET utf8 NOT NULL,
- `pwd` varchar(200) CHARACTER SET utf8 NOT NULL
- ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
可以先添加数据方便测试
- INSERT INTO `user` VALUES ('2', '22', '44');
- INSERT INTO `user` VALUES ('5', '123', '123');
- INSERT INTO `user` VALUES ('1', '123s', '123');
开始编写代码
pojo 代码
- package com.lwy.pojo;
- public class User {
- private String id;
- public String getId() {
- return id;
- }
- public void setId(String id) {
- this.id = id;
- }
- private String name;
- private String pwd;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPwd() {
- return pwd;
- }
- public void setPwd(String pwd) {
- this.pwd = pwd;
- }
- }
- mapper
- package com.lwy.mapper;
- import com.lwy.pojo.User;
- import org.apache.ibatis.annotations.Param;
- import java.util.List;
- public interface UserMapper {
- User userlogin(@Param("name")String name, @Param("pwd") String pwd);
- int adduser(User user);
- int delteuser(String id);
- int updateuser(User user);
- User getById(String id);
- List<User> getallUser();
- }
xxMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
- <mapper namespace="com.lwy.mapper.UserMapper">
- <resultMap id="ResultMap" type="User">
- <id property="userid" column="user_id"></id>
- <result property="name" column="name"></result>
- <result property="pwd" column="pwd"></result>
- </resultMap>
- <select id="userlogin" resultType="User">
- SELECT * FROM `user` WHERE `name`=#{name} AND pwd=#{pwd}
- </select>
- <insert id="adduser" parameterType="User">
- INSERT INTO user(id,name,pwd) VALUES(#{id},#{name},#{pwd})
- </insert>
- <delete id="delteuser" parameterType="String">
- delete from user where id=#{id}
- </delete>
- <update id="updateuser" parameterType="User">
- UPDATE user SET NAME=#{name}, pwd=#{pwd} WHERE id=#{id}
- </update>
- <select id="getById" parameterType="String" resultMap="ResultMap">
- SELECT * FROM user WHERE id=#{id}
- </select>
- <select id="getallUser" resultMap="ResultMap">
- SELECT * FROM user
- </select>
- </mapper>
service 层
- package com.lwy.service;
- import com.lwy.pojo.User;
- import org.apache.ibatis.annotations.Param;
- import java.util.List;
- public interface UserService {
- User userlogin(@Param("name") String name, @Param("pwd") String pwd);
- int adduser(User user);
- int delteuser(String id);
- int updateuser(User user);
- User getById(String id);
- List<User> getallUser();
- }
实现
- package com.lwy.service.impl;
- import com.lwy.pojo.User;
- import com.lwy.mapper.UserMapper;
- import com.lwy.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.List;
- import java.util.UUID;
- @Service
- public class UserServiceImpl implements UserService {
- @Autowired
- UserMapper userMapper;
- @Override
- public int adduser(User user) {
- String id = UUID.randomUUID().toString();
- user.setId(id);
- return userMapper.adduser(user);
- }
- @Override
- public int delteuser(String id) {
- return userMapper.delteuser(id);
- }
- @Override
- public int updateuser(User user) {
- return userMapper.updateuser(user);
- }
- @Override
- public User getById(String id) {
- return userMapper.getById(id);
- }
- @Override
- public List<User> getallUser() {
- return userMapper.getallUser();
- }
- @Override
- public User userlogin(String name, String pwd) {
- return userMapper.userlogin(name, pwd);
- }
- }
controller 层
- package com.lwy.controller;
- import com.lwy.pojo.User;
- import com.lwy.service.UserService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Controller;
- import org.springframework.ui.Model;
- import org.springframework.Web.bind.annotation.RequestMapping;
- import java.util.List;
- @Controller
- public class UserController {
- @Autowired
- UserService userService;
- @RequestMapping("/login.do")
- public String login(String username, String password,Model model){
- System.out.println("开始登陆");
- userService.userlogin(username,password);
- // System.out.println("开始查询所有用户");
- // List<User> userlist = userService.getallUser();
- // model.addAttribute("userlist",userlist);
- return "redirect:/getAllUser.do";
- }
- @RequestMapping("/addUser.do")
- public String addUser(User user){
- userService.adduser(user);
- return "redirect:/getAllUser.do";
- }
- @RequestMapping("/deleteUser.do")
- public String deleteUser(String id){
- userService.delteuser(id);
- return "redirect:/getAllUser.do";
- }
- @RequestMapping("/updateUser.do")
- public String updateUser(User user){
- userService.updateuser(user);
- return "redirect:/getAllUser.do";
- }
- @RequestMapping("/getById.do")
- public String getUserById(String id,Model model){
- model.addAttribute("user",userService.getById(id));
- return "pages/user_update";
- }
- @RequestMapping("/getAllUser.do")
- public String getAllUser(Model model){
- System.out.println("开始查询所有用户");
- List<User> userlist = userService.getallUser();
- model.addAttribute("userlist",userlist);
- return "pages/userlist";
- }
- }
部署到 tomcat 中
如图
选择本地的 tomcat
页面
登陆
- <%--
- Created by IntelliJ IDEA.
- User: hasee
- Date: 2019/6/3
- Time: 16:03
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <HTML>
- <head>
- <title>Title</title>
- </head>
- <body>
- <form action="../login.do" method="post">
- 账号:<input type="text" name="username" />
- 密码:<input type="password" name="password" />
- <button type="submit"> 提交 </button>
- </form>
- </body>
- </HTML>
显示
- <%--
- Created by IntelliJ IDEA.
- User: hasee
- Date: 2019/6/3
- Time: 18:27
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <HTML>
- <head>
- <title>Title</title>
- </head>
- <body>
列表
- <a href="/pages/user_add.jsp"> 添加 </a>
- <a href="/pages/logout.do"> 退出 </a>
- <a href="/pages/admin.jsp">admin page</a>
- <table>
- <tr>
- <td>id</td>
- <td > 姓名 </td>
- <td > 密码 </td>
- <td > 操作 </td>
- </tr>
- <c:forEach items="${requestScope.userlist}" var="list">
- <tr>
- <td>${list.id}</td>
- <td>${list.name}</td>
- <td>${list.pwd}</td>
- <td>
- <a href="../getById.do?id=${list.id}"> 修改 </a>
- <a href="../deleteUser.do?id=${list.id}"> 删除 </a>
- </td>
- </tr>
- </c:forEach>
- </table>
- </body>
- </HTML>
添加
- <%--
- Created by IntelliJ IDEA.
- User: hasee
- Date: 2019/6/3
- Time: 20:18
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <HTML>
- <head>
- <title>Title</title>
- </head>
- <body>
- <form method="post" action="../addUser.do">
你的账号 < input type="text" name="name">
你的密码 < input type="text" name="pwd" />
- <button type="submit">
- 保存
- </button>
- </form>
- </body>
- </HTML>
修改
- <%--
- Created by IntelliJ IDEA.
- User: hasee
- Date: 2019/6/3
- Time: 20:18
- To change this template use File | Settings | File Templates.
- --%>
- <%@ page contentType="text/html;charset=UTF-8" language="java" %>
- <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- <HTML>
- <head>
- <title>Title</title>
- </head>
- <body>
- <form method="post" action="../updateUser.do">
- <input type="hidden" name="id" value="${requestScope.user.id}"/>
- gfdshjsahsdhsdhsdhsd
你的账号 < input type="text" name="name" value="${requestScope.user.name}"/>
你的密码 < input type="text" name="pwd" value="${requestScope.user.pwd}"/>
- <button type="submit">
- 修改
- </button>
- </form>
- </body>
- </HTML>
来源: http://www.bubuko.com/infodetail-3086658.html