SpringMVC Pipeline [A] part1

SpringMVC Pipeline [A] part1


SpringMVC Project

在这里插入图片描述

  • architecture: SpringMVC + myBatis + Spring + Bootstrap + jQuery Mobile
  • Spring FrameWork : Spring MVC: Spring web or Struts : J2EE: JavaBean
  • Persistent layer: MyBatis: iBatis: internet abatis: SQL Maps, Data Access Object (DAO)
  • Boostrap: Less Language Dynamic Css: Css/HTML framework
  • jQuery Mobile: jQuery
  • MySQL: for RDBMS (Relational Database Management System
  • Struts 2: popular
  • Struts 1: deprecate
  • Spring MVC: better than Struts 2
  • Spring MVC: 1: DispatcherServlet: dispatch request to controller
  • Spring MVC: 2: HandlerMapping: controller: a. BeanNameUrlHandlerMapping: controller name mapping
  • Spring MVC: 2: HandlerMapping: controller: b. SimpleUrlHandlerMapping: url mapping
  • Spring MVC: 2: HandlerMapping: controller: c. ControllerClassNameHandlerMapping: controller class mapping
  • Spring MVC: 3: Controller: control request
  • Spring MVC: 4: ModelAndView: Service return Model and View Encapsulated class
  • Spring MVC: 5: ViewResolver: Model and View Encapsulated class
  • Spring MVC: 6: Interceptors: intercept request for other processes
    在这里插入图片描述
  • install dynamic web on MyEclipse :
  • help> install from site following: Eclipse Java EE Developer Tools ; Eclipse Java Web Developer Tools ; Eclipse Web Developer Tools ; Eclipse XML Editors and Tools ; JST Server Adapters ; JST Server Adapters Extensions
  • or create dynamic web in IDEA
    在这里插入图片描述
  • file>project structure
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • put under lib
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • springmvc01
    在这里插入图片描述
  • LoginController.java
package com.abc.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LoginController extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest,
                                                 HttpServletResponse httpServletResponse)
            throws Exception {
        String userName= httpServletRequest.getParameter("userName");
        String userPw=httpServletRequest.getParameter("userPw");
        System.out.println("LoginController.java: LoginController: springMvc Controller");
        System.out.println("account:" +userName+":"+userPw);

        ModelAndView modelAndView = new ModelAndView("index");
        if("admin".equals(userName) && "123".equals(userPw)){
            modelAndView.addObject("message","User Login Success");
        }   else {
            modelAndView.addObject("message", "Login Fail");
        }
        return modelAndView;
    }
}
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>abc</title>
  </head>
  <body>
  <h1>${message}</h1>
  </body>
</html>
  • springMvc-servlet.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:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd  ">
    <!--Controller-->
    <bean id="LoginController" name="/Login.do" class="com.abc.controller.LoginController"></bean>
    <!--mapping use name to find controller-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
    <!--simple url mapping-->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="Login1.do">LoginController</prop>
            </props>
        </property>
    </bean>
    <!-- view-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>
  • web.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_4_0.xsd"
         version="4.0">
    <display-name>springmvc01</display-name>
    <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
    </welcome-file-list>
    <!--    frontend controller-->
    <servlet>
        <servlet-name>springMvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
</web-app>
  • login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>login.jsp</title>
</head>
<body>
<!--Controller-->
<!--<form action="/Login.do">-->
<!--simple url mapping-->
  <form action="/Login1.do">
      account: <input type="text" name="userName"/><br/>
      password: <input type="password" name="userPw"/><br/>
      <input type="submit" value="login">
  </form>
</body>
</html>
  • spring MVC steps:

    1. put jars under WEB-INF/lib
    1. web.xml, add frontend Servlet
    1. create spring-servlet.xml beans: springMvc controller, Model and View,
    1. edit LoginController.java inherit AbstractController (handleRequestInternal), return Model and View (“index”)
    1. edit index.jsp show Model and view result
  • ERROR: :org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 24 in XML document from ServletContext resource [/WEB-INF/dispatcher-servlet.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 24; columnNumber: 61; cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 ‘context:component-scan’ 的声明。

  • solve: bean address change to

<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-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
  • springmvc03
    在这里插入图片描述
  • UserInfo.java
package com.abc.domain;
import java.util.Arrays;
import java.util.Date;
public class UserInfo {
    private Integer userId;
    private String userPw;
    private String userName;
    private Integer userAge;
    private Date userBday;
    private String[] hobby;
    public UserInfo() {}
    public UserInfo(Integer userId, String userPw, String userName,
                    Integer userAge, Date userBday, String[] hobby) {
        this.userId = userId;
        this.userPw = userPw;
        this.userName = userName;
        this.userAge = userAge;
        this.userBday = userBday;
        this.hobby = hobby;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getUserPw() {
        return userPw;
    }
    public void setUserPw(String userPw) {
        this.userPw = userPw;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public Integer getUserAge() {
        return userAge;
    }
    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
    public Date getUserBday() {
        return userBday;
    }
    public void setUserBday(Date userBday) {
        this.userBday = userBday;
    }
    public String[] getHobby() {
        return hobby;
    }
    public void setHobby(String[] hobby) {
        this.hobby = hobby;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "userId=" + userId +
                ", userPw='" + userPw + '\'' +
                ", userName='" + userName + '\'' +
                ", userAge=" + userAge +
                ", userBday=" + userBday +
                ", hobby=" + Arrays.toString(hobby) +
                '}';
    }
}
  • RegController.java
package com.abc.servlet;
import com.abc.domain.UserInfo;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;
//same as create class controller
@Controller
@RequestMapping(value = "sys/")
public class RegController {
    //test
    @RequestMapping(value="reg.do")
    public String reg() {
        System.out.println("RegController.reg(): User Registration*****");
        return "index";
    }
    //get userId, userPw
    @RequestMapping(value="reg1.do")
    public String reg1(HttpServletRequest request) {
        System.out.println("request.getParameterNames()");
        System.out.println(request.getParameterNames());
        System.out.println("userId");
        System.out.println(request.getParameter("userId"));
        System.out.println("userPw");
        System.out.println(request.getParameter("userPw"));
        return "index";
    }
    //get userName
    @RequestMapping(value="reg2.do")
    public String reg2(String userName){
        System.out.println("username");
        System.out.println(userName);
        return "index";
    }
    //get Integer
    @RequestMapping(value="reg3.do")
    public String reg3(Integer userId, String userName, Date userBday){
        System.out.println("userId");
        System.out.println(userId);
        System.out.println("username");
        System.out.println(userName);
        System.out.println("userBday");
        System.out.println(userBday);
        return "index";
    }
    //get hobby
    @RequestMapping(value="reg4.do")
    public String reg4(String[] hobby){
        System.out.println("hobbies");
        for(String h:hobby){
            System.out.println(h);
        }
        return "index";
    }
    //get UserInfo
    @RequestMapping(value="reg5.do")
    public String reg5(UserInfo userInfo){
        System.out.println(userInfo.toString());
        return "index";
    }
    //time parse
    @InitBinder
    public void InitBinder(ServletRequestDataBinder bind){
        bind.registerCustomEditor(Date.class, new CustomDateEditor(
                new SimpleDateFormat("yyyy-MM-dd"),true));
    }
}
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>abc</title>
</head>
<body>
<h1>User Login Success</h1>
</body>
</html>
  • dispatcher-servlet.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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd ">
    <!--springmvc annotation-->
    <mvc:annotation-driven/>
    <!--springmvc component-->
    <context:component-scan base-package="com.abc.servlet"/>
    <!-- view-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/view/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>
  • web.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_4_0.xsd"
         version="4.0">
    <display-name>springmvc02</display-name>
    <welcome-file-list>
        <welcome-file>reg.jsp</welcome-file>
    </welcome-file-list>
    <!--    dispatcher -->
    <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>*.do</url-pattern>
    </servlet-mapping>
    <!--    filter-->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
  • reg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>reg.jsp</title>
</head>
<body>
<form action="sys/reg5.do" medthod="post" >
  account: <input type="text" name="userId"/><br/>
  password: <input type="password" name="userPw"/><br/>
  name: <input type="text" name="userName"/><br/>
  age: <input type="text" name="userAge"/><br/>
  birthday: <input type="text" name="userBday"/><br/>
  hobbies:<br/>
  <input type="checkbox" name="hobby" value="music"/>music
  <input type="checkbox" name="hobby" value="film"/>film
  <input type="checkbox" name="hobby" value="sports"/>sports<br/>
  <input type="submit" value="login">
</form>
</body>
</html>
  • GET
    在这里插入图片描述
  • POST
    在这里插入图片描述
  • Error: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\IJ\springmvc03\out\artifacts\springmvc03_war_exploded\WEB-INF\classes\com\abc\servlet\RegController.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1612
  • solve:
    在这里插入图片描述
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
  • springmvc04
  • SpringMVC return values
    1. HttpServletRequest
    1. ModelAndView
    1. Map<String, Object> map
    1. Model model
      在这里插入图片描述
  • UserInfoController.java
package com.abc.controller;
import com.abc.domain.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
public class UserInfoController {
    //  1.HttpServletRequest return value:
    @RequestMapping("/query1.do")
    public String query(HttpServletRequest request) {
        String name = "bob";
        request.setAttribute("name", name);
        UserInfo user = new UserInfo();
        user.setUserId(1234);
        user.setUserName("abe");
        request.setAttribute("user", user);
        return "index";
    }
    //      2.ModelandView return value:
    @RequestMapping("/query2.do")
    public ModelAndView query2() {
        UserInfo user = new UserInfo();
        user.setUserId(4321);
        user.setUserName("sam");
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("user2", user);
        return new ModelAndView("index", map);
    }
    //      3. Map return value:
    @RequestMapping("/query3.do")
    public String query3(Map<String, Object> map) {
        UserInfo user = new UserInfo();
        user.setUserId(1111);
        user.setUserName("avi");
        map.put("user3", user);
        return "index";
    }
    //   4. Model return value:
    @RequestMapping("/query4.do")
    public String query4(Model model) {
        UserInfo user = new UserInfo();
        user.setUserId(2222);
        user.setUserName("eva");
        model.addAttribute("user4", user);
        return "index";
    }
    // 5. Model return list:
    @RequestMapping("/query5.do")
    public String query5(Model model) {
        UserInfo user = new UserInfo();
        user.setUserId(333);
        user.setUserName("flo");
        List<UserInfo> list = new ArrayList<UserInfo>();
        list.add(user);
        list.add(user);
        list.add(user);
        model.addAttribute("list",list);
        return "index";
    }
}
  • UserInfo
package com.abc.domain;
public class UserInfo {
    private Integer userId;
    private String userName;
    public UserInfo() {
    }
    public UserInfo(Integer userId, String userName) {
        this.userId = userId;
        this.userName = userName;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                '}';
    }
}
  • dispatcher-servlet.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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd ">
    <!--springmvc annotation-->
    <mvc:annotation-driven/>
    <!--springmvc component-->
    <context:component-scan base-package="com.abc.controller"/>
    <!-- view-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>
  • web.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_4_0.xsd"
         version="4.0">
    <display-name>springmvc03</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!--    dispatcher -->
    <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>*.do</url-pattern>
    </servlet-mapping>
    <!--    filter-->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>abc</title>
</head>
<body>
<hr/>
1.HttpServletRequest return value: <br/>
<form action="query1.do" method="post">
    <input type="submit" value="search"><br/>
</form>
<br/>
name:${name}<br/>
userId:${user.userId}<br/>
userName:${user.userName}<br/>
<hr/>
2.ModelandView return value: <br/>
<form action="query2.do" method="post">
    <input type="submit" value="search"><br/>
</form>
<br/>
userId:${user2.userId}<br/>
userName:${user2.userName}<br/>
<hr/>
3. Map return value: <br/>
<form action="query3.do" method="post">
    <input type="submit" value="search"><br/>
</form>
<br/>
userId:${user3.userId}<br/>
userName:${user3.userName}<br/>
<hr/>
4. Model return value: <br/>
<form action="query4.do" method="post">
    <input type="submit" value="search"><br/>
</form>
<br/>
userId:${user4.userId}<br/>
userName:${user4.userName}<br/>
<hr/>
5. Model return list: <br/>
<form action="query5.do" method="post">
    <input type="submit" value="search"><br/>
</form>
<br/>
List: ${list}<br/>
</body>
</html>
  • @ResponseBody

  • HttpMessageConverter

  • StringHttpMessageConverter (/, text/*)

  • MappingJacksonHttpMessageConverter (change to JSON: user ObjectMapper from Jackson to map JSON onto JavaBean, must use Jackson Jar)
    在这里插入图片描述

  • JSON Converter (String Converter

    <!--    stringConverter -->
    <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/plain;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <!--   json converter -->
    <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="stringConverter"/>
                <ref bean="jsonConverter"/>
            </list>
        </property>
    </bean>
  • springmvcajax
    在这里插入图片描述
  • RegController.java
package com.abc.controller;
import com.abc.domain.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@Controller
public class RegController {
    @RequestMapping("ajax1.do")
    public void ajax1(String uId, HttpServletResponse response) {
        System.out.println(uId);
        try {
            //response
            response.setContentType("text/html");
            response.setCharacterEncoding("UTF-8");
            PrintWriter out = response.getWriter();
            if ("admin".equals(uId)) {
                out.println("account exist, try again");
            } else {
                out.println("success");
            }
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    @RequestMapping("/ajax2.do")
    public @ResponseBody
    UserInfo ajax2(String uId) {
        System.out.println(uId);
        UserInfo user = new UserInfo();
        if ("111".equals(uId)) {
            user.setUserId(111);
            user.setUserName("bob");
        } else {
            user.setUserId(222);
            user.setUserName("sam");
        }
        return user;
    }
    @RequestMapping("/ajax3.do")
    public @ResponseBody List<UserInfo> ajax3() {
        List<UserInfo> list = new ArrayList<UserInfo>();
        UserInfo user1 = new UserInfo();
        user1.setUserId(111);
        user1.setUserName("bob");
        list.add(user1);
        UserInfo user2 = new UserInfo();
        user2.setUserId(112);
        user2.setUserName("bob2");
        list.add(user2);
        UserInfo user3 = new UserInfo();
        user3.setUserId(113);
        user3.setUserName("bob3");
        list.add(user3);
        System.out.println(list.toString());
        return list;
    }
}
  • UserInfo.java
package com.abc.domain;
public class UserInfo {
    private Integer userId;
    private String userName;
    public UserInfo(){}
    public UserInfo(Integer userId, String userName) {
        this.userId = userId;
        this.userName = userName;
    }
    public Integer getUserId() {
        return userId;
    }
    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
}
  • dispatcher-servlet.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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd ">
    <!--springmvc annotation-->
    <mvc:annotation-driven/>
    <!--springmvc component-->
    <context:component-scan base-package="com.abc.controller"/>
    <!-- view-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--    stringConverter -->
    <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/plain;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <!--   json converter -->
    <bean id="jsonConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"></bean>
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="stringConverter"/>
                <ref bean="jsonConverter"/>
            </list>
        </property>
    </bean>
</beans>
  • web.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_4_0.xsd"
         version="4.0">
    <display-name>springmvc03</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!--    dispatcher -->
    <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>*.do</url-pattern>
    </servlet-mapping>
    <!--    filter-->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
  • reg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <script type="text/javascript" src="js/jquery-3.3.1.js"></script>
    <script type="text/javascript">
        $().ready(function () {
            //ajax1.do
            $("#b1").click(function () {
                var userId = $("#userId").val();
                if (userId.length != 0) {
                    alert(userId)
                    $.post('ajax1.do', {uId: userId}, function (data) {
                        alert(data);
                    });
                } else {
                    alert("enter info");
                }
            });
            //ajax2.do
            $("#b2").click(function () {
                $.post("ajax2.do", {uId: $("#userId2").val()}, function (data) {
                    alert(data.userId+":"+data.userName);
                    $("#info2").html(data.userId+":"+data.userName);
                }, "json");
            });
            //ajax3.do
            $("#b3").click(function () {
                alert("ajax3.do");
                $.post("ajax3.do",{}, function (data) {
                    var str= "";
                    for(var i=0; i<data.length; i++){
                        str+="userId: "+data[i].userId+": userName" +data[i].userName+"<br/>";
                    }
                    $("#info3").html(str);
                }, "json");
            });
        });
    </script>
</head>
<body>
<hr/>
<form action="">
    account search admin: <input type="text" id="userId" name="userId">
    <input type="button" id="b1" value="check">
</form>
<hr/>
<form action="">
    account search userId(111): <input type="text" id="userId2" name="userId2">
    <input type="button" id="b2" value="search">
    <div id="info2"></div>
</form>
<hr/>
<form action="">
    account search all info:
    <input type="button" id="b3" value="search">
    <div id="info3"></div>
</form>
<hr/>
</body>
</html>
  • File upload: .fileupload.jar & loggin.jar: in jsp: form: enctype=“multipart/form-data”: add into spring.xml: multipartResolver bean, then add following to contoller:
    在这里插入图片描述在这里插入图片描述
  • ERROR: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: file [D:\IJ\springmvcUpload\out\artifacts\springmvcUpload_war_exploded\WEB-INF\classes\com\abc\controller\RegController.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 1612
  • solve: wrong realPath, also do not add "string " to system.out.println(object) ???not sure why… cannot concat string
  • directly enter path for fileout
  • springmvcUpload ( unsuccessful: maybe springframework and jdk has conflict? cannot concat strings properly…upload sort of works, better example in Spring MVC MyBatis [A]

在这里插入图片描述

  • RegController.java
package com.abc.controller;
import com.abc.domain.UserInfo;
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.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@Controller
public class RegController {
    @RequestMapping(value = "/upload.do", method = RequestMethod.POST)
    public String upload(UserInfo user, HttpServletRequest req, Model model) {
        System.out.println(user);
        System.out.println(req);
        System.out.println(model);
        //change MultipartHttpServletRequest request
        MultipartHttpServletRequest request = (MultipartHttpServletRequest) req;
        System.out.println(request);
        //get file
        CommonsMultipartFile cmfile = (CommonsMultipartFile) request.getFile("userImg");
        System.out.println(cmfile);
        //get file bytes
        byte[] b = cmfile.getBytes();
        System.out.println(b);
        //get filename
        String ofileName = cmfile.getOriginalFilename();
        System.out.println(ofileName);
        String suffix = ofileName.substring(ofileName.lastIndexOf("."));
        System.out.println(suffix);
        //getpath
        String path = req.getSession().getServletContext().getRealPath("/");
        System.out.println(path);
        //write to folder
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String fname = sdf.format(date);
        System.out.println(fname);
        System.out.print(path);
        System.out.print(fname);
        System.out.print(suffix);
        try {
            OutputStream os = new FileOutputStream("D:/IJ/springmvcUpload/out/artifacts/springmvcUpload/20210422163702431.jpg");
 //           OutputStream os = new FileOutputStream(path+fname+suffix);
            System.out.println(os.toString());
            os.write(b);
            os.flush();
            os.close();
            user.setUrl("D:/IJ/springmvcUpload/out/artifacts/springmvcUpload/20210422163702431.jpg");
            model.addAttribute("user",user);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "reg";
    }
}
  • UserInfo.java
package com.abc.domain;
public class UserInfo {
    private String userId;
    private String userName;
    private String url;
    private Integer userAge;
    public UserInfo(){}
    public UserInfo(String userId, String userName, String url, Integer userAge) {
        this.userId = userId;
        this.userName = userName;
        this.url = url;
        this.userAge = userAge;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public Integer getUserAge() {
        return userAge;
    }
    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "userId='" + userId + '\'' +
                ", userName='" + userName + '\'' +
                ", url='" + url + '\'' +
                ", userAge=" + userAge +
                '}';
    }
}
  • dispatcher-servlet.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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd ">
    <!--springmvc annotation-->
    <mvc:annotation-driven/>
    <!--springmvc component-->
    <context:component-scan base-package="com.abc.controller"/>
    <!-- view-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
<!--    fileupload, must be named multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="1024000"></property>
</bean>
</beans>
  • web.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_4_0.xsd"
         version="4.0">
    <display-name>springmvc03</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!--    dispatcher -->
    <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>*.do</url-pattern>
    </servlet-mapping>
    <!--    filter-->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
  • reg.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="upload.do" method="post" enctype="multipart/form-data">
    <h1>registration</h1><br/>
    account: <input type="text" name="userId"><br/>
    name: <input type="text" name="userName"><br/>
    file: <input type="file" name="userImg"><br/>
    age:  <input type="text" name="userAge"><br/>
    <input type="submit" value="submit">
</form>
<hr/>
${user}
<div/>
</body>
</html>
  • Interceptor: HandlerInterceptor
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • springmvcInterceptor
    在这里插入图片描述

  • TestController

package com.abc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class TestController {
    @RequestMapping("test.do" )
    public String test(){
        System.out.println("this is controller");
        return "index";
    }
}
  • MyInterceptor
package com.abc.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
                             HttpServletResponse httpServletResponse, Object o)
            throws Exception {
        System.out.println("preHandle:MyInterceptor");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest httpServletRequest,
                           HttpServletResponse httpServletResponse, Object o,
                           ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle:MyInterceptor");
    }
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest,
                                HttpServletResponse httpServletResponse,
                                Object o, Exception e) throws Exception {
        System.out.println("afterCompletion:MyInterceptor");

    }
}
  • MyInterceptor1
package com.abc.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyInterceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest,
                             HttpServletResponse httpServletResponse, Object o)
            throws Exception {
        System.out.println("preHandle:MyInterceptor1");
        return true;
    }
    @Override
    public void postHandle(HttpServletRequest httpServletRequest,
                           HttpServletResponse httpServletResponse, Object o,
                           ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle:MyInterceptor1");
    }
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest,
                                HttpServletResponse httpServletResponse,
                                Object o, Exception e) throws Exception {
        System.out.println("afterCompletion:MyInterceptor1");
    }
}
  • dispatcher-servlet.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"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-4.3.xsd ">
    <!--springmvc annotation-->
    <mvc:annotation-driven/>
    <!--springmvc component-->
    <context:component-scan base-package="com.abc.controller"/>
    <!-- view-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    <!--    stringConverter -->
    <bean id="stringConverter" class="org.springframework.http.converter.StringHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/plain;charset=UTF-8</value>
            </list>
        </property>
    </bean>
<!--interceptor-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/*"/>
            <bean class="com.abc.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/*"/>
            <bean class="com.abc.interceptor.MyInterceptor1"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
</beans>
  • web.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_4_0.xsd"
         version="4.0">
    <display-name>springmvc03</display-name>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!--    dispatcher -->
    <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>*.do</url-pattern>
    </servlet-mapping>
    <!--    filter-->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>$Title$</title>
</head>
<body>
<form action="test.do" method="post">
<input type="submit" value="test"/>
</form>
<% System.out.println("view");%>
</body>
</html>
  • Mysql
  • user ipconfig to find ip then use it as the name and address for a connection, set root computer to % then can be used
    在这里插入图片描述
  • use backup to copy table then paste it into another database
    在这里插入图片描述
  • MyBatis : ORM: Object–relational mapping
  • JDBC: Java DataBase Connectivity
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • mybatis structure:
    1. copy jar under lib folder (mybatis, mysql-connector)
    1. create mybatis-config.xml, add sql connection info:
<environments default="development">
    <environment id="mysql">
        <transactionManager type="JDBC"></transactionManager>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://127.0.0.1:3306/abc"/>
            <property name="username" value="root"/>
            <property name="password" value="12345"/>
        </dataSource>
    </environment>
</environments>
    1. create UserInfo class with attributes from sql, then generate get set methods
    1. create userinfo.xml with mappers for sql query
<mapper namespace="com.abc.domain.UserInfo">

create namesapce
edit sql

select * from user_info where user_id=#{userId}

edit resultMap class(attribute) map it onto sql database table

<resultMap type="com.abc.domain.UserInfo" id="userinfo">
    <result column="user_id" property="user_id"/>
    <result column="user_name" property="user_name"/>
    <result column="user_age" property="user_age"/>
    <result column="user_sex" property="sex"/>
    <result column="user_bday" property="user_bday"/>
</resultMap>
    1. sql mapper (userinfo.xml) added to mybatis-config.xml
<mappers>
    <mapper resource="com/abc/domain/userinfo.xml"/>
</mappers>
    1. create test file
InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
SqlSession session = ssf.openSession();
UserInfo user = (UserInfo) session.selectOne("com.abc.domain.UserInfo.queryUser", 3);
System.out.println(user.toString());
  • mybatis01
    在这里插入图片描述
  • UserInfo.java
package com.abc.domain;
import java.util.Date;
public class UserInfo {
    private Integer user_id;
    private String user_name;
    private Integer user_age;
    private String sex;
    private Date user_bday;
    public UserInfo() {}
    public UserInfo(Integer user_id, String user_name, Integer user_age, String sex, Date user_bday) {
        this.user_id = user_id;
        this.user_name = user_name;
        this.user_age = user_age;
        this.sex = sex;
        this.user_bday = user_bday;
    }
    public Integer getUser_id() {
        return user_id;
    }
    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }
    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    public Integer getUser_age() {
        return user_age;
    }
    public void setUser_age(Integer user_age) {
        this.user_age = user_age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getUser_bday() {
        return user_bday;
    }
    public void setUser_bday(Date user_bday) {
        this.user_bday = user_bday;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "user_id=" + user_id +
                ", user_name='" + user_name + '\'' +
                ", user_age=" + user_age +
                ", sex='" + sex + '\'' +
                ", user_bday=" + user_bday +
                '}';
    }
}
  • userinfo.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="com.abc.domain.UserInfo">
    <resultMap type="com.abc.domain.UserInfo" id="userinfo">
        <result column="user_id" property="user_id"/>
        <result column="user_name" property="user_name"/>
        <result column="user_age" property="user_age"/>
        <result column="user_sex" property="sex"/>
        <result column="user_bday" property="user_bday"/>
    </resultMap>
    <select id="queryUser" resultMap="userinfo" parameterType="java.lang.Integer">
        select * from  user_info where user_id=#{user_id}
    </select>
</mapper>
  • mybatis-config.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>
<!--    mysql-->
    <environments default="development">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/abc"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/abc/domain/userinfo.xml"/>
    </mappers>
</configuration>
  • Test.java
package com;
import com.abc.domain.UserInfo;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class Test {
    public static void main(String[] args) throws IOException {
//        create sqlsessionfactory from xml
        InputStream is=Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
        //get session
        SqlSession session = ssf.openSession();
        //get info from userinfo.xml
        UserInfo user = (UserInfo) session.selectOne("com.abc.domain.UserInfo.queryUser", 3);
        System.out.println(user.toString());
    }
}

在这里插入图片描述
在这里插入图片描述

  • mybatis02
  • add log4j.jar file to lib
    在这里插入图片描述
  • UserInfoDAOImpl.java
package com.abc.dao.impl;
import com.abc.dao.UserInfoDAO;
import com.abc.domain.UserInfo;
import com.abc.utils.DBFactory;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
public class UserInfoDAOImpl implements UserInfoDAO {
    @Override
    public int addUser(UserInfo user) {
        //get session
        SqlSession session = null;
        try {
            session = DBFactory.getSession();
            System.out.println("session:" + session);
            System.out.println(user.toString());
            int count = session.insert("com.abc.domain.UserInfo.adduser", user);
            System.out.println("count:" + count);
            //commit
            session.commit();
            return count;
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        } finally {
            session.close();
        }
        return 0;
    }
    @Override
    public int update(UserInfo user) {
        SqlSession session = null;
        try {
            session = DBFactory.getSession();
            int count = session.update("com.abc.domain.UserInfo.updateuser", user);
            session.commit();
            return count;
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        } finally {
            session.close();
        }
        return 0;
    }
    @Override
    public int delete(Integer user) {
        SqlSession session = null;
        try {
            System.out.println("user:" + user);
            session = DBFactory.getSession();
            int count = session.delete("com.abc.domain.UserInfo.deleteuser", user);
            session.commit();
            return count;

        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        } finally {
            session.close();
        }
        return 0;
    }
    @Override
    public UserInfo getUser(Integer userId) {
        SqlSession session = null;
        try {
            session = DBFactory.getSession();
            UserInfo userInfo =(UserInfo)session.selectOne(
                    "com.abc.domain.UserInfo.selectUser",userId);
            session.commit();
            return userInfo;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return null;
    }
    @Override
    public List<UserInfo> getAllUsers() {
        SqlSession session = null;
        try {
            session = DBFactory.getSession();
            List<UserInfo> users = session.selectList("com.abc.domain.UserInfo.selectallUsers");
            session.commit();
            return users;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            session.close();
        }
        return null;
    }
}
  • UserInfoDAO.java
package com.abc.dao;
import com.abc.domain.UserInfo;
import java.util.List;
public interface UserInfoDAO {
    public int addUser(UserInfo user);
    public int update(UserInfo user);
    public int delete(Integer user);
    public UserInfo getUser(Integer userId);
    public List<UserInfo> getAllUsers();
}
  • UserInfo.java
package com.abc.domain;
import java.util.Date;
public class UserInfo {
    private Integer user_id;
    private String user_name;
    private Integer user_age;
    private String sex;
    private Date user_bday;
    public UserInfo() {}
    public UserInfo(Integer user_id, String user_name, Integer user_age, String sex, Date user_bday) {
        this.user_id = user_id;
        this.user_name = user_name;
        this.user_age = user_age;
        this.sex = sex;
        this.user_bday = user_bday;
    }
    public Integer getUser_id() {
        return user_id;
    }
    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    public Integer getUser_age() {
        return user_age;
    }
    public void setUser_age(Integer user_age) {
        this.user_age = user_age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getUser_bday() {
        return user_bday;
    }
    public void setUser_bday(Date user_bday) {
        this.user_bday = user_bday;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "user_id=" + user_id +
                ", user_name='" + user_name + '\'' +
                ", user_age=" + user_age +
                ", sex='" + sex + '\'' +
                ", user_bday=" + user_bday +
                '}';
    }
}
  • userinfo.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="com.abc.domain.UserInfo">
    <resultMap type="userInfo" id="userMap">
        <result column="user_id" property="user_id"/>
        <result column="user_name" property="user_name"/>
        <result column="user_age" property="user_age"/>
        <result column="user_sex" property="sex"/>
        <result column="user_bday" property="user_bday"/>
    </resultMap>
    <insert id="adduser" parameterType="userInfo">
    insert into user_info(user_id,user_name, user_age, user_sex, user_bday)
    values(#{user_id},#{user_name},#{user_age},#{sex},now())
    </insert>
    <update id="updateuser" parameterType="userInfo">
        update user_info set user_name=#{user_name},
        user_age=#{user_age}, user_sex=#{sex}, user_bday=now()
        where user_id=#{user_id}
    </update>
    <delete id="deleteuser" parameterType="java.lang.Integer">
        delete from user_info where user_id=#{user}
    </delete>
    <select id="selectUser" resultMap="userMap" parameterType="java.lang.Integer">
        select * from user_info where user_id=#{userId}
    </select>
    <select id="selectallUsers" resultMap="userMap" parameterType="java.lang.Integer">
        select * from user_info
    </select>
</mapper>
  • DBFactory.java
package com.abc.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
public class DBFactory {
    public static SqlSessionFactory sqlSessionFactory = null;
    static {
            //create sqlsessionfactory from xml
        InputStream resource = null;
        try {
            resource = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("resource:"+resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);
            System.out.println("sqlSessionFactory:"+sqlSessionFactory);

    }
    public static SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
}
  • log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [$t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connector=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
  • mybatis-config.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>
<!--    mysql-->
    <typeAliases>
        <typeAlias type="com.abc.domain.UserInfo" alias="userInfo"/>
    </typeAliases>
    <environments default="mysql">
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/abc"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/abc/domain/userinfo.xml"/>
    </mappers>
</configuration>
  • UserInfoTest.java
package com.abc.dao;
import com.abc.dao.impl.UserInfoDAOImpl;
import com.abc.domain.UserInfo;
import org.junit.Test;
import java.util.List;
public class UserInfoTest {
    @Test
    public void add() {
        UserInfoDAO dao = new UserInfoDAOImpl();
        UserInfo user = new UserInfo();
        user.setUser_name("bob");
        user.setUser_age(33);
        user.setSex("m");
        int i = dao.addUser(user);
        if (i > 0) {
            System.out.println("success");
        } else {
            System.out.println("fail");
        }
    }
    @Test
    public void update() {
        UserInfoDAO dao = new UserInfoDAOImpl();
        UserInfo user = new UserInfo();
        user.setUser_name("sam");
        user.setUser_age(66);
        user.setSex("m");
        int i = dao.update(user);
        if (i > 0) {
            System.out.println("success");
        } else {
            System.out.println("fail");
        }
    }
    @Test
    public void delete() {
        UserInfoDAO dao = new UserInfoDAOImpl();
        int i = dao.delete(8);
        System.out.println(i);
        if (i > 0) {
            System.out.println("success");
        } else {
            System.out.println("fail");
        }
    }
    @Test
    public void select() {
        UserInfoDAO dao = new UserInfoDAOImpl();
        UserInfo u = dao.getUser(9);
        System.out.println(u.toString());
    }
    @Test
    public void selectAll() {
        UserInfoDAO dao = new UserInfoDAOImpl();
        List<UserInfo> listU = dao.getAllUsers();
        for (UserInfo u:listU) {
            System.out.println(u);
        }
    }
}
  • mybatis03
    在这里插入图片描述
  • log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [$t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connector=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
  • mybatis-config.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>
<!--    mysql-->
    <typeAliases>
        <typeAlias type="com.abc.domain.UserInfo" alias="userInfo"/>
    </typeAliases>
    <environments default="mysql">
<!--        id="oracle"-->
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/abc"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/abc/mapper/userinfo.xml"/>
    </mappers>
</configuration>
  • UserInfo.java
package com.abc.domain;
import java.util.Date;
public class UserInfo {
    private Integer user_id;
    private String user_name;
    private Integer user_age;
    private String sex;
    private Date user_bday;
    public UserInfo() {}
    public UserInfo(Integer user_id, String user_name, Integer user_age, String sex, Date user_bday) {
        this.user_id = user_id;
        this.user_name = user_name;
        this.user_age = user_age;
        this.sex = sex;
        this.user_bday = user_bday;
    }
    public Integer getUser_id() {
        return user_id;
    }
    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    public Integer getUser_age() {
        return user_age;
    }
    public void setUser_age(Integer user_age) {
        this.user_age = user_age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getUser_bday() {
        return user_bday;
    }
    public void setUser_bday(Date user_bday) {
        this.user_bday = user_bday;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "user_id=" + user_id +
                ", user_name='" + user_name + '\'' +
                ", user_age=" + user_age +
                ", sex='" + sex + '\'' +
                ", user_bday=" + user_bday +
                '}';
    }
}
  • userinfo.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="com.abc.mapper.UserInfoMapper">
    <!--1. namespace points to Interface
    2. interface methods must have the same name as sql id name-->
    <resultMap type="userInfo" id="userMap">
        <result column="user_id" property="user_id"/>
        <result column="user_name" property="user_name"/>
        <result column="user_age" property="user_age"/>
        <result column="user_sex" property="sex"/>
        <result column="user_bday" property="user_bday"/>
    </resultMap>
    <insert id="addUser" parameterType="userInfo">
    insert into user_info(user_id,user_name, user_age, user_sex, user_bday)
    values(#{user_id},#{user_name},#{user_age},#{sex},now())
    </insert>
    <update id="update" parameterType="userInfo">
        update user_info set user_name=#{user_name},
        user_age=#{user_age}, user_sex=#{sex}, user_bday=now()
        where user_id=#{user_id}
    </update>
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user_info where user_id=#{user}
    </delete>
    <select id="getUser" resultMap="userMap" parameterType="java.lang.Integer">
        select * from user_info where user_id=#{userId}
    </select>
    <select id="getAllUser" resultMap="userMap" parameterType="java.lang.Integer">
        select * from user_info
    </select>
</mapper>
  • UserInfoMapper.java
package com.abc.mapper;
import com.abc.domain.UserInfo;
import java.util.List;
public interface UserInfoMapper {
    //addUser
    public int addUser(UserInfo user);
    //update
    public int update(UserInfo user);
    //delete
    public int delete(Integer userId);
    //query
    public UserInfo getUser(Integer userId);
    //List
    public List<UserInfo> getAllUser();
}
  • DBFactory.java
package com.abc.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class DBFactory {
    public static SqlSessionFactory sqlSessionFactory = null;
    static {
        //create sqlsessionfactory from xml
        InputStream resource = null;
        try {
            resource = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("resource:"+resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);
        System.out.println("sqlSessionFactory:"+sqlSessionFactory);
    }
    public static SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
}
  • UserInfoTest.java
package mybatis03;
import com.abc.domain.UserInfo;
import com.abc.mapper.UserInfoMapper;
import com.abc.utils.DBFactory;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class UserInfoTest {
    //use namespace
    @Test
    public void add1() {
        SqlSession session = DBFactory.getSession();
        UserInfo user = new UserInfo();
        user.setUser_id(30);
        user.setUser_name("bob30");
        int i = session.insert("com.abc.mapper.UserInfoMapper.addUser", user);
        session.commit();
        if (i > 0) {
            System.out.println("success");
        }
        session.close();
    }
    //user interface
    @Test
    public void add2() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        UserInfo user = new UserInfo();
        user.setUser_id(31);
        user.setUser_name("bob31");
        int i = mapper.addUser(user);
        session.commit();

        if (i > 0) {
            System.out.println("success");
        }
        session.close();
    }
    //update
    @Test
    public void update() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        UserInfo user = new UserInfo();
        user.setUser_id(31);
        user.setUser_name("sam31");
        int i = mapper.update(user);
        session.commit();
        if (i > 0) {
            System.out.println("success");
        }
        session.close();
    }
    //delete
    @Test
    public void delete() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        int user_id = 31;
        int i = mapper.delete(user_id);
        session.commit();
        if (i > 0) {
            System.out.println("success");
       }
        session.close();
    }
    //getUser
    @Test
    public void getUser() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        int user_id = 30;
        UserInfo user = mapper.getUser(user_id);
        session.commit();
        System.out.println(user.toString());
        session.close();
    }
    //getAllUser
    @Test
    public void getAllUser() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        int user_id = 30;
        List<UserInfo> list = mapper.getAllUser();
        session.commit();
        for (UserInfo u : list) {
            System.out.println(u);
        }
        session.close();
    }
}
  • mybatis04
    在这里插入图片描述
  • UserInfo.java
package com.abc.domain;
import java.util.Date;
public class UserInfo {
    private Integer user_id;
    private String user_name;
    private Integer user_age;
    private String sex;
    private Date user_bday;
    public UserInfo() {}
    public UserInfo(Integer user_id, String user_name, Integer user_age, String sex, Date user_bday) {
        this.user_id = user_id;
        this.user_name = user_name;
        this.user_age = user_age;
        this.sex = sex;
        this.user_bday = user_bday;
    }
   public Integer getUser_id() {
        return user_id;
    }
    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    public Integer getUser_age() {
        return user_age;
    }
    public void setUser_age(Integer user_age) {
        this.user_age = user_age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getUser_bday() {
        return user_bday;
    }
    public void setUser_bday(Date user_bday) {
        this.user_bday = user_bday;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "user_id=" + user_id +
                ", user_name='" + user_name + '\'' +
                ", user_age=" + user_age +
                ", sex='" + sex + '\'' +
                ", user_bday=" + user_bday +
                '}';
    }
}
  • userinfo.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="com.abc.mapper.UserInfoMapper">
</mapper>
  • UserInfoMapper.java
package com.abc.mapper;
import com.abc.domain.UserInfo;
import org.apache.ibatis.annotations.*;
import java.util.HashMap;
import java.util.List;
public interface UserInfoMapper {
    //addUser
    @Insert("insert into user_info(user_id,user_name, user_age, user_sex, user_bday)" +
            " values(#{user_id},#{user_name},#{user_age},#{sex},now())")
    public int addUser(UserInfo user);
    //update
    @Update("update user_info set user_name=#{user_name},user_age=#{user_age}," +
            " user_sex=#{sex}, user_bday=now() where user_id=#{user_id}")
    public int update(UserInfo user);
    //delete
    @Delete("delete from user_info where user_id=#{user}")
    public int delete(Integer userId);
    //query
    @Select("select * from user_info where user_id=#{userId}")
    @Results(value = {@Result(property = "user_id", column = "user_id"),
            @Result(property = "user_name", column = "user_name"),
            @Result(property = "user_age", column = "user_age"),
            @Result(property = "sex", column = "user_sex"),
            @Result(property = "user_bday", column = "user_bday"),})
    public UserInfo getUser(@Param("userId")Integer userId);
    //List
    @Select("select * from user_info")
    @Results(value = {@Result(property = "user_id", column = "user_id"),
            @Result(property = "user_name", column = "user_name"),
            @Result(property = "user_age", column = "user_age"),
            @Result(property = "sex", column = "user_sex"),
            @Result(property = "user_bday", column = "user_bday"),})
    public List<UserInfo> getAllUser();
    //query return hashmap
    @Select("select * from user_info where user_id=#{userId}")
    public HashMap getUser2(@Param("userId")Integer userId);
    //queryAll return hashmap
    @Select("select * from user_info ")
    public List<HashMap> getAllUser2();
}
  • DBFactory.java
package com.abc.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class DBFactory {
    public static SqlSessionFactory sqlSessionFactory = null;
    static {
        //create sqlsessionfactory from xml
        InputStream resource = null;
        try {
            resource = Resources.getResourceAsStream("config\\mybatis-config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("resource:"+resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);
        System.out.println("sqlSessionFactory:"+sqlSessionFactory);
    }
    public static SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
}
  • mybatis-config.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>
<!--    mysql-->
    <environments default="mysql">
<!--        id="oracle"-->
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/abc"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
<!--        <mapper resource="com/abc/mapper/userinfo.xml"/>-->
        <mapper class="com.abc.mapper.UserInfoMapper"/>
    </mappers>
</configuration>
  • UserInfoTest.java
package test.com;
import com.abc.domain.UserInfo;
import com.abc.mapper.UserInfoMapper;
import com.abc.utils.DBFactory;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
public class UserInfoTest {
    //use namespace
    @Test
    public void add1() {
        SqlSession session = DBFactory.getSession();
        UserInfo user = new UserInfo();
        user.setUser_id(33);
        user.setUser_name("bob30");
        int i = session.insert("com.abc.mapper.UserInfoMapper.addUser", user);
        session.commit();
        if (i > 0) {
            System.out.println("success");
        }
        session.close();
    }
    //user interface
    @Test
    public void add2() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        UserInfo user = new UserInfo();
        user.setUser_id(37);
        user.setUser_name("bob31");
        user.setSex("m");
        int i = mapper.addUser(user);
        session.commit();
        if (i > 0) {
            System.out.println("success");
        }
        session.close();
    }
    //update
    @Test
    public void update() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        UserInfo user = new UserInfo();
        user.setUser_id(33);
        user.setUser_name("sam31");
        int i = mapper.update(user);
        session.commit();
        if (i > 0) {
            System.out.println("success");
        }
        session.close();
    }
    //delete
    @Test
    public void delete() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        int user_id = 33;
        int i = mapper.delete(user_id);
        session.commit();
        if (i > 0) {
            System.out.println("success");
        }
        session.close();
    }
    //getUser
    @Test
    public void getUser() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        int user_id = 37;
        UserInfo user = mapper.getUser(user_id);
        session.commit();
        System.out.println(user.toString());
        session.close();
    }
    //getAllUser
    @Test
    public void getAllUser() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        List<UserInfo> list = mapper.getAllUser();
        session.commit();
        for (UserInfo u : list) {
            System.out.println(u);
        }
        session.close();
    }
    //getUser return hashmap
    @Test
    public void getUser2() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        int user_id = 37;
        HashMap user = mapper.getUser2(user_id);
        session.commit();
        System.out.println(user.get("user_id"));
        System.out.println(user.get("user_name"));
        System.out.println(user.get("user_age"));
        System.out.println(user.get("user_sex"));
        System.out.println(user.get("user_bday"));
        session.close();
    }
    //getAllUser Hashmap
    @Test
    public void getAllUser2() {
        SqlSession session = DBFactory.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        List<HashMap> list = mapper.getAllUser2();
        session.commit();
        for (HashMap user : list) {
            System.out.print(user.get("user_id"));
            System.out.print(user.get("user_name"));
            System.out.print(user.get("user_age"));
            System.out.print(user.get("user_sex"));
            System.out.print(user.get("user_bday"));
            System.out.println();
        }
        session.close();
    }
}
  • log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [$t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connector=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
  • Dynamic SQL (if, choose(when, otherwise), trim (where, set), foreach)
  • mybatis05
    在这里插入图片描述
  • UserInfo.java
package com.abc.domain;
import java.util.Date;
public class UserInfo {
    private Integer user_id;
    private String user_name;
    private Integer user_age;
    private String sex;
    private Date user_bday;
    public UserInfo() {}
    public UserInfo(Integer user_id, String user_name, Integer user_age, String sex, Date user_bday) {
        this.user_id = user_id;
        this.user_name = user_name;
        this.user_age = user_age;
        this.sex = sex;
        this.user_bday = user_bday;
    }
    public Integer getUser_id() {
        return user_id;
    }
    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    public Integer getUser_age() {
        return user_age;
    }
    public void setUser_age(Integer user_age) {
        this.user_age = user_age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getUser_bday() {
        return user_bday;
    }
    public void setUser_bday(Date user_bday) {
        this.user_bday = user_bday;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "user_id=" + user_id +
                ", user_name='" + user_name + '\'' +
                ", user_age=" + user_age +
                ", sex='" + sex + '\'' +
                ", user_bday=" + user_bday +
                '}';
    }
}
  • userinfo.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="com.abc.mapper.UserInfoMapper">
    <resultMap type="userInfo" id="userMap">
        <result column="user_id" property="user_id"/>
        <result column="user_name" property="user_name"/>
        <result column="user_age" property="user_age"/>
        <result column="user_sex" property="sex"/>
        <result column="user_bday" property="user_bday"/>
    </resultMap>
<!---->
    <select id="getAllUser" resultMap="userMap" parameterType="java.lang.String">
        select * from user_info
         <if test="username != null">
         where user_name like #{username}
         </if>
    </select>
<!--    -->
    <select id="getAllUser2" resultMap="userMap" parameterType="userInfo">
        select * from user_info where 1=1
        <if test="user_id != null">
            and user_id=#{user_id}
        </if>
        <if test="user_name != null">
            and user_name like #{user_name}
        </if>
    </select>
<!--    -->
    <select id="getAllUser3" resultMap="userMap" parameterType="userInfo">
        select * from user_info where 1=1
        <choose>
            <when test="user_id != null">
                and user_id=#{user_id}
            </when>
            <when test="user_name != null">
                and user_name like #{user_name}
            </when>
            <otherwise>
                and user_sex='m'
            </otherwise>
        </choose>
    </select>
<!--    -->
    <select id="getAllUser4" resultMap="userMap" parameterType="userInfo">
        select * from user_info
        <where>
        <if test="user_id != null">
            and user_id=#{user_id}
        </if>
        <if test="user_name != null">
            and user_name like #{user_name}
        </if>
        </where>
    </select>
    <!--    -->
    <select id="getAllUser5" resultMap="userMap" parameterType="userInfo">
        select * from user_info
        <trim prefix="where" prefixOverrides="and | or">
            <if test="user_id != null">
                 user_id=#{user_id}
            </if>
            <if test="user_name != null">
                and  user_name like #{user_name}
            </if>
        </trim>
    </select>
<!--    -->
    <update id="updateUser" parameterType="userInfo">
        update user_info
        <set>
            <if test="user_name != null"> user_name = #{user_name},</if>
             <if test="user_age != null">user_age = #{user_age},</if>
        </set>
        where user_id = #{user_id}
    </update>
</mapper>
  • UserInfoMapper.java
package com.abc.mapper;
import com.abc.domain.UserInfo;
import org.apache.ibatis.annotations.*;
import java.util.HashMap;
import java.util.List;
public interface UserInfoMapper {
    //get all users conditional
    public List<UserInfo> getAllUser(@Param("username") String username);
    //
    public List<UserInfo> getAllUser2(UserInfo user);
    //
    public List<UserInfo> getAllUser3(UserInfo user);
    //
    public List<UserInfo> getAllUser4(UserInfo user);
    //
    public List<UserInfo> getAllUser5(UserInfo user);
    //
    public int updateUser(UserInfo user);
}
  • DBFactory.java
package com.abc.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
public class DBFactory {
    public static SqlSessionFactory sqlSessionFactory = null;
    static {
        //create sqlsessionfactory from xml
        InputStream resource = null;
        try {
            resource = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("resource:"+resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(resource);
        System.out.println("sqlSessionFactory:"+sqlSessionFactory);
    }
    public static SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
}
  • QueryUserTest.java
package test.mybatis05;
import com.abc.domain.UserInfo;
import com.abc.mapper.UserInfoMapper;
import com.abc.utils.DBFactory;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.List;
public class QueryUserTest {
    //conditional query
    @Test
    public void query1(){
        SqlSession session= DBFactory.getSession();
        UserInfoMapper mapper=session.getMapper(UserInfoMapper.class);
        List<UserInfo> list=mapper.getAllUser("bob");
//        List<UserInfo> list=mapper.getAllUser(null);
        for(UserInfo u: list){
            System.out.println(u.toString());
        }
    }
    //
    @Test
    public void query2(){
        SqlSession session= DBFactory.getSession();
        UserInfoMapper mapper=session.getMapper(UserInfoMapper.class);
        UserInfo user=new UserInfo();
        user.setUser_id(11);
        user.setUser_name("bob");
        List<UserInfo> list=mapper.getAllUser2(user);
//        List<UserInfo> list=mapper.getAllUser2(null);
        for(UserInfo u: list){
            System.out.println(u.toString());
        }
    }
    //
    @Test
    public void query3(){
        SqlSession session= DBFactory.getSession();
        UserInfoMapper mapper=session.getMapper(UserInfoMapper.class);
        UserInfo user=new UserInfo();
        user.setUser_id(11);
        user.setUser_name("bob");
//        List<UserInfo> list=mapper.getAllUser3(user);
        List<UserInfo> list=mapper.getAllUser3(null);
        for(UserInfo u: list){
            System.out.println(u.toString());
        }
    }
    //
    @Test
    public void query4(){
        SqlSession session= DBFactory.getSession();
        UserInfoMapper mapper=session.getMapper(UserInfoMapper.class);
        UserInfo user=new UserInfo();
        user.setUser_id(11);
        user.setUser_name("bob");
       List<UserInfo> list=mapper.getAllUser4(user);
    //    List<UserInfo> list=mapper.getAllUser4(null);
        for(UserInfo u: list){
            System.out.println(u.toString());
        }
    }
    //
    @Test
    public void query5(){
        SqlSession session= DBFactory.getSession();
        UserInfoMapper mapper=session.getMapper(UserInfoMapper.class);
        UserInfo user=new UserInfo();
        user.setUser_id(11);
        user.setUser_name("bob");
        List<UserInfo> list=mapper.getAllUser5(user);
        //    List<UserInfo> list=mapper.getAllUser4(null);
        for(UserInfo u: list){
            System.out.println(u.toString());
        }
    }
    //
    @Test
    public void update(){
        SqlSession session= DBFactory.getSession();
        UserInfoMapper mapper=session.getMapper(UserInfoMapper.class);
        UserInfo user=new UserInfo();
        user.setUser_id(11);
        user.setUser_name("bob55");
        user.setUser_age(55);
        int ans=mapper.updateUser(user);
        session.commit();
        if(ans>0){
            System.out.println("success");
        }else{
            System.out.println("fail");
        }
        session.close();
    }
}
  • log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [$t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connector=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
  • mybatis-config.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>
<!--    mysql-->
    <typeAliases>
        <typeAlias type="com.abc.domain.UserInfo" alias="userInfo"/>
    </typeAliases>
    <environments default="mysql">
<!--        id="oracle"-->
        <environment id="mysql">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/abc"/>
                <property name="username" value="root"/>
                <property name="password" value="12345"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/abc/mapper/userinfo.xml"/>
    </mappers>
</configuration>
  • SSM Spring SpringMVC Mybatis
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • ERROR: java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransaction.getTimeout()Ljava/lang/Integer;

  • solve: mybatis-spring .jar switch to 1.3 or above

  • solve: mysql-connector switch to higher version

  • ERROR: java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfiguration.(Lorg/springframework/expression/spel/SpelCompilerMode;Ljava/lang/ClassLoader;)V

  • solve:

  • change 在这里插入图片描述

  • to在这里插入图片描述

  • update springframework to 5.3.6

  • ERROR: java.lang.AbstractMethodError: Method org/apache/commons/dbcp/DelegatingResultSet.isClosed()Z is abstract

  • solve: update Commons DBCP to latest version

  • ERROR: java.lang.ClassNotFoundException: org.springframework.web.filter.CharacterEncodingFilter

  • solve: under project structure 在这里插入图片描述

  • ERROR java.lang.ArrayIndexOutOfBoundsException: 57179 at org.springframework.asm.ClassReader.(Unknown Source)

  • solve: update spring xxx.jar from 3 to 4

  • ERROR org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘userInfoServiceImpl’: Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘com.abc.mapper.UserInfoMapper’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup="", name="", description="", authenticationType=CONTAINER, type=java.lang.Object.class, mappedName="")}

  • solve: add: <import resource="classpath:applicationContext.xml " / > to springmvc-servlet.xml

  • delete: < context:component-scan base-package=“com.abc.service”>< /context:component-scan> from applicationContext.xml

  • ERROR: java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
    ; SQL []; Connection is read-only. Queries leading to data modification are not allowed; nested exception is java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed

  • solve: change applicationContext.xml < tx:method name="*" read-only=“false”/>

在这里插入图片描述

  • IntelliJ IDEA Ctrl+Alt+T: Surround With
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • SSM

  • lib list
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • TestController.java
package com.abc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class TestController {
@RequestMapping("/test.do")
    public String test(){
    System.out.println(".!.!.");
    return "index";
}
}
  • UserInfoController.java
package com.abc.controller;
import com.abc.po.UserInfo;
import com.abc.service.UserInfoService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import java.util.List;
@Controller
@RequestMapping("/user")
public class UserInfoController {
    //controllers
    @Resource(name = "userInfoServiceImpl")
    private UserInfoService service;

    @RequestMapping("/list.do")
    public String list(UserInfo user, Model model) {
        List<UserInfo> list = service.getList(user);
        model.addAttribute("list", list);
        System.out.println("list.do"+user);
        System.out.println(".!.!!!.");
        return "userinfo/user_list";
    }
    @RequestMapping("/add.do")
    public String add(UserInfo user, Model model) {
        boolean mark = false;
        try {
            mark = service.addUser(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if (mark) {
            model.addAttribute("info", "success");
            System.out.println("add.do"+user);
        } else {
            model.addAttribute("info", "fail");
        }
        System.out.println(".!.!!!.!.");
        return "userinfo/user_info";
    }
    @RequestMapping("/loadUser.do")
    public String loadUser(Integer userId, Model model) {
        System.out.println("userId: " + userId);
        try {
            UserInfo user = service.getUser(userId);
            model.addAttribute("user", user);
            System.out.println("loadUser.do"+user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(".!.!!!.!.!!!.");
        return "userinfo/user_update";
    }
    @RequestMapping("/update.do")
    public String update(UserInfo user, Model model) {
        System.out.println("update.do"+user);
        boolean mark = false;
        try {
            mark=service.userUpdate(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(mark){
            model.addAttribute("info","success");
        }else{
            model.addAttribute("info","fail");
        }
        System.out.println(".!.!!!.!.!!!.!.");
        return "userinfo/user_info";
    }
    @RequestMapping("/deleteUsers.do")
    public String deleteUser(Integer[] userIds, Model model){
        System.out.println("delete.do"+userIds.length);
        boolean mark = false;
        try {
            mark=service.userDelete(userIds);
        } catch (Exception e) {
            e.printStackTrace();
        }
        if(mark){
            model.addAttribute("info","success");
        }else{
            model.addAttribute("info","fail");
        }
        System.out.println(".!.!!!.!.!!!.!.");
        return "userinfo/user_info";
    }
}
  • userinfo.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="com.abc.mapper.UserInfoMapper">
    <resultMap id="userMap" type="UserInfo">
        <result property="user_id"  column="user_id"/>
        <result property="user_name"  column="user_name"/>
        <result property="user_age"  column="user_age"/>
        <result property="sex"  column="user_sex"/>
        <result property="user_bday"  column="user_bday"/>
    </resultMap>
    <!--add-->
    <insert id="addUser"   parameterType="userInfo">
        insert into user_info (user_id,user_name, user_age, user_sex,user_bday)
        values(#{user_id},#{user_name},#{user_age},#{sex},now())
    </insert>
<!--    get list-->
    <select id="getUserList" parameterType="userInfo" resultMap="userMap">
        select *  from user_info
        <where>
            <if test="user_id!=null and user_id!=''">
                and user_id=#{user_id}
            </if>
            <if test="user_name!=null and user_name!=''">
                and user_name like #{user_name}
            </if>
        </where>
        order by user_id desc
    </select>
<!--    get User-->
    <select id="getUser" parameterType="java.lang.Integer" resultMap="userMap">
        select *  from user_info where user_id=#{userId}
    </select>
<!--    update user-->
    <update id="updateUser" parameterType="userInfo">
        update user_info
        <set>
            <if test="user_name!=null">
                user_name=#{user_name},
            </if>
            <if test="user_age!=null">
                user_age=#{user_age},
            </if>
            <if test="sex!=null">
                user_sex=#{sex},
            </if>
            <if test="user_bday!=null">
                user_bday=#{user_bday},
            </if>
        </set>
        where user_id=#{user_id}
    </update>
    <!--    delete user-->
    <update id="deleteUser" parameterType="java.lang.Integer">
        delete from user_info where user_id=#{user_id}
    </update>
</mapper>
  • UserInfoMapper.java
package com.abc.mapper;
import com.abc.po.UserInfo;
import java.util.List;
public interface UserInfoMapper {
    //add
    public int addUser(UserInfo user);
    //get list
    public List<UserInfo> getUserList(UserInfo user);
    //get user
    public UserInfo getUser(Integer userId);
    //update user
    public int updateUser(UserInfo user);
    //delete
    public int deleteUser(Integer userId);
}
  • UserInfo.java
package com.abc.po;
import java.util.Date;
public class UserInfo {
    private String delId;
    private Integer user_id;
    private String user_name;
    private Integer user_age;
    private String sex;
    private Date user_bday;
    public UserInfo() {}
    public UserInfo(Integer user_id, String user_name, Integer user_age, String sex, Date user_bday) {
        this.user_id = user_id;
        this.user_name = user_name;
        this.user_age = user_age;
        this.sex = sex;
        this.user_bday = user_bday;
    }
    public String getDelId() {
        return "<input type='checkbox' name='userIds' value='"+this.getUser_id()+"'>";

    }
    public void setDelId(String delId) {
        this.delId = delId;
    }
    public Integer getUser_id() {
        return user_id;
    }
    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }
    public String getUser_name() {
        return user_name;
    }
    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }
    public Integer getUser_age() {
        return user_age;
    }
    public void setUser_age(Integer user_age) {
        this.user_age = user_age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Date getUser_bday() {
        return user_bday;
    }
    public void setUser_bday(Date user_bday) {
        this.user_bday = user_bday;
    }
    @Override
    public String toString() {
        return "UserInfo{" +
                "user_id=" + user_id +
                ", user_name='" + user_name + '\'' +
                ", user_age=" + user_age +
                ", sex='" + sex + '\'' +
                ", user_bday=" + user_bday +
                '}';
    }
}
  • UserInfoService.java
package com.abc.service;
import com.abc.po.UserInfo;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
public interface UserInfoService {
    public boolean addUser(UserInfo user) throws Exception;
    public List<UserInfo> getList(UserInfo user);
    public UserInfo getUser(Integer userId) throws Exception;
    public  boolean userUpdate(UserInfo user);
    public  boolean userDelete(Integer[] userIds)throws Exception;
}
  • UserInfoServiceImpl.java
package com.abc.service.impl;
import com.abc.mapper.UserInfoMapper;
import com.abc.po.UserInfo;
import com.abc.service.UserInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
// bean name userInfoServiceImpl
@Service
public class UserInfoServiceImpl implements UserInfoService {
    @Resource(name = "userInfoMapper")
    private UserInfoMapper userInfoMapper;
    @Override
    public boolean addUser(UserInfo user) throws Exception {
        System.out.println("UserInfoServiceImpl.addUser: service layer");
        int c = userInfoMapper.addUser(user);
        if (c > 0) {
            return true;
        }
        return false;
    }
    @Override
    public List<UserInfo> getList(UserInfo user) {
        System.out.println("UserInfoServiceImpl.getList: service");
        if (user != null) {
            if (user.getUser_name() != null && !user.getUser_name().equals("")) {
                user.setUser_name("%" + user.getUser_name() + "%");
            }
        }
        return userInfoMapper.getUserList(user);
    }

    @Override
    public UserInfo getUser(Integer userId) throws Exception {
        System.out.println("UserInfoServiceImpl.getUser: service");
        if (userId != null) {
            return userInfoMapper.getUser(userId);
        }
        return null;
    }
    @Override
    public boolean userUpdate(UserInfo user) {
        System.out.println("UserInfoServiceImpl.updateUser: service layer");
        if(user!=null) {
            System.out.println("userUpdate"+user.toString());
            int c = userInfoMapper.updateUser(user);
            if (c > 0) {
                return true;
            }
        }
        return false;
    }
    @Override
    public boolean userDelete(Integer[] userIds) throws Exception{
        System.out.println("UserInfoServiceImpl.deleteUser: service layer");
        if(userIds!=null && userIds.length>0) {
            System.out.println("userDelete"+userIds.length);
            for(int x: userIds) {
              userInfoMapper.deleteUser(x);
            }
                return true;
        }
        return false;
    }
}
  • UserTest.java
package test.com.test;
import com.abc.po.UserInfo;
import com.abc.service.UserInfoService;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.List;
public class UserTest {
    @Test
    public void addUser() throws Exception{
        //add applicationContext.xml
        ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
        UserInfoService service=(UserInfoService)context.getBean("userInfoServiceImpl");
        UserInfo u=new UserInfo();
        u.setUser_id(59);
        u.setUser_name("sam");
        u.setUser_age(22);
        u.setSex("private");
        System.out.println("UserTest.addUser");
        boolean mark=service.addUser(u);
        if(mark){
            System.out.println("success");
        }else {
            System.out.println("fail");
        }
    }
   @Test
    public void selectUser(){
        ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println(context);
        UserInfoService service=(UserInfoService)context.getBean("userInfoServiceImpl");
        List<UserInfo> list=service.getList(null);
        for (UserInfo ui: list) {
            System.out.println(ui.toString());
        }
    }
    @Test
    public void selectUser2() throws Exception {
        ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println(context);
        UserInfoService service=(UserInfoService)context.getBean("userInfoServiceImpl");
        UserInfo u=service.getUser(1);
        System.out.println(u.toString());
    }
    @Test
    public void updateUser() {
        ApplicationContext context= new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println(context);
        UserInfoService service=(UserInfoService)context.getBean("userInfoServiceImpl");
        UserInfo u = new UserInfo();
        u.setUser_id(1);
        u.setUser_name("new");
        System.out.println(u.toString());
        boolean mark=service.userUpdate(u);
        if(mark){
            System.out.println("success");
        }else {
            System.out.println("fail");
        }
    }
}
  • applicationContexst.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.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">
    <!--    context scan-->
<!--    <context:component-scan base-package="com.abc.service"></context:component-scan>-->
    <!--datasource-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/abc"/>
        <property name="username" value="root"/>
        <property name="password" value="12345"/>
    </bean>
    <!--    sqlSessionFactory-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--dataSource dataStream-->
        <property name="dataSource" ref="dataSource"/>
        <!--        configLocation use mybatis conf location-->
        <property name="configLocation" value="classpath:mybatis.xml"/>
    </bean>
    <!--  basePackage  mapper -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.abc.mapper"></property>
    </bean>
    <!--    transactionManager-->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>
    <!--    transactions-->
    <tx:advice id="txAdvice">
        <tx:attributes>
            <!-- find and get are read only-->
            <tx:method name="find*" read-only="true"/>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="query*" read-only="true"/>
            <tx:method name="add*" read-only="false" propagation="REQUIRED"/>
            <tx:method name="update*" read-only="false" propagation="REQUIRED" />
            <tx:method name="del*" read-only="false" propagation="REQUIRED"/>
            <tx:method name="*" read-only="false"/>
        </tx:attributes>
    </tx:advice>
    <!--    configuration type-->
    <!--    pointcut, execution() common pointcut fields, first * is return type
    com.abc.service.*.*(..) includes all packages under com.abc.service-->
    <aop:config>
        <aop:pointcut id="myPointcut"
                      expression="execution(public * com.abc.service.impl.*.*(..))"/>
        <!--execute at pointcut-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"/>
    </aop:config>
</beans>
  • displaytag.properties
#basic.empty.showtable=false
basic.show.header=true
# page | list : jsp : display: page
sort.amount=page
export.amount=list
export.decorated=true
#paging.banner.group_size=8
#paging.banner.placement=top
css.tr.even=even
css.tr.odd=odd
css.th.sorted=sorted
css.th.ascending=order1
css.th.descending=order2
css.table=
css.th.sortable=sortable
# factory classes for extensions
factory.requestHelper=org.displaytag.util.DefaultRequestHelperFactory
# factory class for decorators
factory.decorator=org.displaytag.decorator.DefaultDecoratorFactory
# locale provider (Jstl provider by default)
locale.provider=org.displaytag.localization.I18nJstlAdapter
# locale.resolver (nothing by default, simply use locale from request)
#locale.resolver=
export.types=csv excel xml pdf
export.csv.class=org.displaytag.export.CsvView
export.excel.class=org.displaytag.export.ExcelView
export.xml.class=org.displaytag.export.XmlView
export.pdf.class=org.displaytag.export.PdfView
#export.***true for export method, false for no
export.csv=true
export.csv.label=<span class="export csv">CSV </span>
export.csv.include_header=false
export.csv.filename=
export.excel=true
export.excel.label=<span class="export excel">Excel </span>
export.excel.include_header=true
export.excel.filename=
export.xml=true
export.xml.label=<span class="export xml">XML </span>
export.xml.filename=
export.pdf=false
export.pdf.label=<span class="export pdf">PDF </span>
export.pdf.include_header=true
export.pdf.filename=
export.rtf=false
export.rtf.label=<span class="export rtf">RTF </span>
export.rtf.include_header=true
export.rtf.filename=
## messages
##
#basic.msg.empty_list=Nothing found to display.
#basic.msg.empty_list_row=<tr class="empty"><td colspan="{0}">Nothing found to display.</td></tr>
#error.msg.invalid_page=invalid page
#
#export.banner=<div class="exportlinks">Export options: {0}</div>
#export.banner.sepchar= |
#
#paging.banner.item_name=item
#paging.banner.items_name=items
#
#paging.banner.no_items_found=<span class="pagebanner">No {0} found.</span>
#paging.banner.one_item_found=<span class="pagebanner">One {0} found.</span>
#paging.banner.all_items_found=<span class="pagebanner">{0} {1} found, displaying all {2}.</span>
#paging.banner.some_items_found=<span class="pagebanner">{0} {1} found, displaying {2} to {3}.</span>
#
#paging.banner.full=<span class="pagelinks">[<a href="{1}">First</a>/<a href="{2}">Prev</a>] {0} [<a href="{3}">Next</a>/<a href="{4}">Last</a>]</span>
#paging.banner.first=<span class="pagelinks">[First/Prev] {0} [<a href="{3}">Next</a>/<a href="{4}">Last</a>]</span>
#paging.banner.last=<span class="pagelinks">[<a href="{1}">First</a>/<a href="{2}">Prev</a>] {0} [Next/Last]</span>
#paging.banner.onepage=<span class="pagelinks">{0}</span>
#
#paging.banner.page.selected=<strong>{0}</strong>
#paging.banner.page.link=<a href="{1}" title="Go to page {0}">{0}</a>
#paging.banner.page.separator=, \
# external sort and pagination
#pagination.sort.param=sort
#pagination.sortdirection.param=dir
#pagination.pagenumber.param=page
#pagination.searchid.param=searchid
#pagination.sort.asc.value=asc
#pagination.sort.desc.value=desc
#pagination.sort.skippagenumber=true
# unused
save.excel.banner=<a href="{0}" rel="external">save ({1} bytes)</a>
save.excel.filename=export.xls
  • log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [$t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connector=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
  • mybatis.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>
    <!--    mysql-->
    <typeAliases>
        <typeAlias type="com.abc.po.UserInfo" alias="userInfo"/>
    </typeAliases>
    <mappers>
        <mapper resource="com/abc/mapper/userinfo.xml"/>
    </mappers>
</configuration>
  • user_add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName()
            + ":" + request.getServerPort() + path + "/";
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Title</title>
</head>
<body>
basepath: <%=basePath%> <br/>
<base href="<%=basePath%>"/>
<div align="center">
    <form action="user/add.do" method="post">
        <h1>Add User Info</h1>
        id: <input type="text" name="user_id"/><br/>
        name: <input type="text" name="user_name"/><br/>
        sex: <input type="radio" name="sex" checked="checked" value="secret"/>secret
        <input type="radio" name="sex"  value="female"/>female
        <input type="radio" name="sex"  value="male"/>male<br/>
        age: <input type="text" name="user_age"/><br/>
        <input type="submit" value="add"/>
    </form>
</div>
</form>
</body>
</html>
  • user_info.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName()
            + ":" + request.getServerPort() + path + "/";
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <base href="<%=basePath%>"/>
    <title>Title</title>
<script type="text/javascript">
    alert('${info}');
    window.location="<%=basePath%>user/list.do"
</script>
</head>
<body>
basepath: <%=basePath%> <br/>
</body>
</html>
  • user_list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName()
            + ":" + request.getServerPort() + path + "/";
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="display" uri="http://displaytag.sf.net" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Title</title>
    <script type="text/javascript">
        function add() {
            window.location = "<%=basePath%>userinfo/user_add.jsp";
        }
        function delUser() {
            var userIds = document.getElementsByName("userIds");
            var mark = false;
            for (var i = 0; i < userIds.length; i++) {
                if (userIds[i].checked) {
                    mark = true;
                    break;
                }
            }
            if (mark && confirm("delete Users?")) {
                var f1 = document.getElementById("f1");

                f1.action = "<%=basePath%>user/deleteUsers.do";
                f1.submit();
            } else {
                alert("select user");
            }
        }
    </script>
    <style type="text/css">
        .tab {
            width: 80%;
            text-align: center;
            background-color: greenyellow;
        }
        .tab tr th{
            background-color: white;
        }
        .tab tr td{
            background-color: white;
        }
    </style>
</head>
<body>
basepath: <%=basePath%> <br/>
<base href="<%=basePath%>"/>
<form action="user/list.do" method="post" id="f1" requestURI="user/list.do">
    <div align="center">
        <h1>User Info</h1>
        id: <input type="text" name="user_id"/>
        name: <input type="text" name="user_name"/>
        <input type="submit" value="query"/>
        <input type="button" value="add" onclick="add()"/>
        <input type="button" value="delete" onclick="delUser()"/>
    </div>
    <%-- model.addAttribute("list", list);--%>
    <display:table class="tab" name="list" export="true" sort="list" pagesize="5" requestURI="user/list.do">
        <display:column property="delId" title="<input type=checkbox>"/>
        <display:column property="user_id" title="USER_ID" sortable="true"/>
        <display:column property="user_name" title="USER_NAME" />
        <display:column property="user_age" title="USER_AGE"/>
        <display:column property="sex" title="USER_SEX"/>
        <display:column property="user_bday" title="USER_BDAY"/>
        <display:column value="12345@abc.com" autolink="true" title="EMAIL"/>
        <display:column value="http://www.bing.com" autolink="true" title="LINK"/>
        <%--          public String loadUser(Integer userId, Model model) --%>
        <display:column href="user/loadUser.do" paramId="userId" paramProperty="user_id" value="edit" title="EDIT"/>
    </display:table>
    <%--    replaced by taglib display--%>
    <%--
    <table bor der="1" align="center" width="80%">
        <tr>
            <th></th>
            <th>id</th>
            <th>name</th>
            <th>age</th>
            <th>sex</th>
            <th>bday</th>
            <th>edit</th>
        </tr>
        <c:forEach items="${list}" var="user">
            <tr align="center">
                <td><input type="checkbox" name="userIds" value="${user.user_id}"/></td>
                <td>${user.user_id}</td>
                <td>${user.user_name}</td>
                <td>${user.user_age}</td>
                <td>${user.sex}</td>
                <td><fmt:formatDate value="${user.user_bday}"
                                    pattern="yyyyMMdd"/></td>
                <td><a href="user/loadUser.do?userId=${user.user_id}">edit</a></td>
            </tr>
        </c:forEach>

    </table>--%>
</form>
</body>
</html>
  • user_update.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName()
            + ":" + request.getServerPort() + path + "/";
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Title</title>
</head>
<body>
basepath: <%=basePath%> <br/>
<base href="<%=basePath%>"/>
<div align="center">
    <form action="user/update.do" method="post">
        <h1>Edit User Info</h1>
        id: <input type="text" name="user_id" value="${user.user_id}"/><br/>
        name: <input type="text" name="user_name" value="${user.user_name}"/><br/>
        sex: <input type="radio" name="sex"
                    checked="checked" ${user.sex=='secret'?'checked':''} value="secret"/>secret
        <input type="radio" name="sex"  ${user.sex=='female'?'checked':''} value="female"/>female
        <input type="radio" name="sex"  ${user.sex=='male'?'checked':''} value="male"/>male<br/>
        age: <input type="text" name="user_age" value="${user.user_age}"/><br/>
        bday: <input type="text" name="user_bday" value="${user.user_bday}"/><br/>
        <input type="submit" value="update"/>
    </form>
</div>
</form>
</body>
</html>
  • springmvc-servlet.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"
       xmlns:p="http://www.springframework.org/schema/p"
       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.xsd">
<!--  scan  -->
    <context:component-scan base-package="com.abc"></context:component-scan>
    <mvc:annotation-driven/>
    <!--   annotation -->
    <bean id="handlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    </bean>
    <bean id="handlerAdapter" class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    </bean>
<!--  view  -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
   <import resource="classpath:applicationContext.xml"/>
</beans>
  • web.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_4_0.xsd"
         version="4.0">
    <!--    spring core controller-->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    <!--    filters-->
    <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>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/</url-pattern>
    </filter-mapping>
</web-app>
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
  <title>$Title$</title>
</head>
<body>
<a href="test.do">test</a>
<a href="user/list.do">query user info</a>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test 1</title>
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="well">
    <h1 class="page-header">Page Header</h1>
</div>
</body>
</html>
  • test2.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test 2-grid</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-xs-4" style="border:10px solid #009;">
            first div
        </div>
        <div class="col-xs-4" style="border:10px solid #009;">
            second div
        </div>
        <div class="col-xs-4" style="border:10px solid #009;">
            third div
        </div>
    </div>
    <div class="row">
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
        <div class="col-xs-1" style="border:2px solid #009;">
            col-xs-1
        </div>
    </div>
    <div class="row">
        <div class="col-md-6" style="border:2px solid #F00;">col-mid-6</div>
        <div class="col-md-6" style="border:2px solid #F00;">col-mid-6</div>
    </div>
    <div class="row">
        <div class="col-md-4" style="border:2px solid #F00;">col-mid-4</div>
        <div class="col-md-6" style="border:2px solid #F00;">col-mid-6</div>
    </div>
    <div class="row">
        <div class="col-md-4" style="border:2px solid #F00;">col-mid-4</div>
    </div>
    <div class="row">
        <div class="col-md-3" style="border:2px solid #F00;">col-mid-3</div>
        <div class="col-md-3" style="border:2px solid #F00;">col-mid-3</div>
        <div class="col-md-3" style="border:2px solid #F00;">col-mid-3</div>
        <div class="col-md-3" style="border:2px solid #F00;">col-mid-3</div>
    </div>
    <div class="row">
        <div class="col-md-3" style="border:2px solid #0F0;">col-mid-3</div>
        <div class="col-md-3 col-md-offset-6" style="border:2px solid #0F0;">col-mid-3</div>
    </div>
    <div class="row">
        <div class="col-xs-9" style="border:2px solid #F00;">
            <div class="row">
                <div class="col-xs-6" style="border:2px solid #0F0;">col-xs-6</div>
                <div class="col-xs-6" style="border:2px solid #0F0;">col-xs-6</div>
            </div>
        </div>
    </div>
    <div class="row">
        <div class="col-md-9 " style="border:2px solid #F00;">
            <div class="col-md-1 col-md-push-1" style="border:2px solid #0F0;">col-mid-3
                col-md-push-1
            </div>
            <div class="col-md-1 col-md-pull-1" style="border:2px solid #0F0;">col-mid-3
                col-md-pull-1
            </div>
        </div>
    </div>
</div>
</body>
</html>
  • test3.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test 3-fonts</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<h1>HEADER1<small>SMALL HEADER</small></h1>
<h2>HEADER2<small>SMALL HEADER</small></h2>
<h3>HEADER3<small>SMALL HEADER</small></h3>
<h4>HEADER4<small>SMALL HEADER</small></h4>
<h5>HEADER5<small>SMALL HEADER</small></h5>
<h6>HEADER6<small>SMALL HEADER</small></h6>
<p><div class="lead">P LEAD</div> 14px font line height 10 px margin</p>
use <mark>mark for highlight</mark>
<p class="text-left">Left</p>
<p class="text-center">center</p>
<p class="text-right">right</p>
<p class="text-justify">justified text</p>
<p class="text-nowrap">noWrap</p>
<p class="text-lowercase">Lowercase</p>
<p class="text-uppercase">Uppercase</p>
<p class="text-capitalize">capitalize</p>
<abbr title="HyperTest Markup Language" class="initialism">HTML</abbr>
</body>
</html>
  • test4.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test 4-table</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<h1>Striped Table</h1>
<table class="table table-striped">
    <thead>
    <tr>
        <th>ID</th>
        <th>NAME</th>
        <th>SEX</th>
        <th>AGE</th>
        <th>ADDRESS</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>1001</td>
        <td>Bob</td>
        <td>male</td>
        <td>44</td>
        <td>Moon</td>
    </tr>
    <tr>
        <td>1002</td>
        <td>Sam</td>
        <td>male</td>
        <td>33</td>
        <td>Mars</td>
    </tr>
    </tbody>
</table>
<h1>Bordered Hover Condensed Table</h1>
<table class="table table-bordered table-hover table-condensed">
    <thead>
    <tr>
        <th>ID</th>
        <th>NAME</th>
        <th>SEX</th>
        <th>AGE</th>
        <th>ADDRESS</th>
    </tr>
    </thead>
    <tbody>
    <tr>
        <td>1001</td>
        <td>Bob</td>
        <td>male</td>
        <td>44</td>
        <td>Moon</td>
    </tr>
    <tr>
        <td>1002</td>
        <td>Sam</td>
        <td>male</td>
        <td>33</td>
        <td>Mars</td>
    </tr>
    </tbody>
</table>
<h1> Status Table</h1>
<table class="table table-bordered table-hover table-condensed">
    <thead>
    <tr class="active">
        <th>ID</th>
        <th>NAME</th>
        <th>SEX</th>
        <th>AGE</th>
        <th>ADDRESS</th>
    </tr>
    </thead>
    <tbody>
    <tr class="success">
        <td>1001</td>
        <td>Bob</td>
        <td>male</td>
        <td>44</td>
        <td>Moon</td>
    </tr>
    <tr class="warning">
        <td>1002</td>
        <td>Sam</td>
        <td>male</td>
        <td>33</td>
        <td>Mars</td>
    </tr>
    <tr class="danger">
        <td>1001</td>
        <td>Bob</td>
        <td>male</td>
        <td>44</td>
        <td>Moon</td>
    </tr>
    <tr class="info">
        <td>1002</td>
        <td>Sam</td>
        <td>male</td>
        <td>33</td>
        <td>Mars</td>
    </tr>
    </tbody>
</table>
</body>
</html>
  • Login
    在这里插入图片描述
  • alert.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>alert</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="alert alert-success" style="width: 50%">success</div>
    <div class="alert alert-info" style="width: 50%">info</div>
    <div class="alert alert-warning" style="width: 50%">warning</div>
    <div class="alert alert-danger alert-dismissable" style="width: 50%">
        <button type="button" class="close" data-dismiss="alert">
            close
        </button>
        danger
    </div>
    <div class="alert alert-danger alert-dismissable" style="width: 50%">
        <button type="button" class="close" data-dismiss="alert">
            <span aria-hidden="true">&times;</span>
        </button>
        danger
        <a href="#" class="alert-link">info</a>
    </div>
</div>
</body>
</body>
</html>
  • buttons.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Buttons</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<input type="button" class="btn btn-default" value="Button1">
<input type="button" class="btn btn-primary" value="Button1">
<input type="button" class="btn btn-success" value="Button1">
<input type="button" class="btn btn-info" value="Button1">
<input type="button" class="btn btn-warning" value="Button1">
<input type="button" class="btn btn-danger" value="Button1">
<input type="button" class="btn btn-link" value="Button1">
<br/>
<button class="btn btn-default" >Button2</button>
<br/>
Size<br/>
<input type="button" class="btn btn-default btn-lg" value="Button1">
<input type="button" class="btn btn-primary btn-sm" value="Button1">
<input type="button" class="btn btn-success btn-xs" value="Button1">
<br/>
Disabled
<br/>
<input type="button" class="btn btn-default " disabled value="Button1">
<input type="button" class="btn btn-default" value="Button1">
<hr/>
href<br/>
<a class="btn btn-primary disabled">Add</a>
<a class="btn btn-success">Edit</a>
<a class="btn btn-info">Delete</a>
<a class="btn btn-danger">Query</a>
<hr/>
Image <br/>
<img src="../img/sun.jpg" width="66" height="33" class="img-rounded">
<img src="../img/sun.jpg" width="132" height="66" class="img-rounded">
<img src="../img/sun.jpg" width="132" height="66" class="img-circle">
<img src="../img/sun.jpg" width="132" height="66" class="img-thumbnail">
<img src="../img/sun.jpg" class="img-thumbnail">
</body>
</html>
  • form.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Form</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <hr/>
    <input type="text" name="" class="form-control" placeholder="Please Enter">
    <hr/>
    <div class="form-group has-success has-feedback">
        <label class="control-label">name:</label>
        <input type="text" name="" class="form-control input-lg" placeholder="Please Enter">
        <span class="glyphicon glyphicon-ok form-control-feedback"></span>
    </div>
    <div class="form-group has-success has-error">
        <label class="control-label">name:</label>
        <input type="text" name="" class="form-control input-sm " placeholder="Please Enter">
        <span class="glyphicon glyphicon-ok form-control-feedback"></span>
    </div>
    <hr/>
    <h3>Text</h3>
    <textarea class="form-control" rows="5"></textarea>
    <h3>Checkbox</h3>
    Multi-select: <br/>
    <div class="checkbox">
        <label>
            <input type="checkbox" value=""/>
            Watch Movies
        </label>
    </div>
    <div class="checkbox">
        <label>
            <input type="checkbox" value=""/>
            Read Books
        </label>
    </div>
    <div class="checkbox">
        <label>
            <input type="checkbox" value=""/>
            Play Games
        </label>
    </div>
    Single-select:<br/>
    <div class="radio-inline">
        <label>
            <input type="radio" name="sex" value="secret"/>Secret
        </label>
    </div>
    <div class="radio-inline">
        <label>
            <input type="radio" name="sex" value="female"/>Female
        </label>
    </div>
    <div class="radio-inline">
        <label>
            <input type="radio" name="sex" value="male"/>Male
        </label>
    </div>
    Dropdown Menu:
    <select class="form-control">
        <option>Select</option>
        <option>Analyst</option>
        <option>Developer</option>
        <option>Researcher</option>
    </select>
</div>
</body>
</html>
  • login1.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-4 col-md-offset-4">
            <h1 class="page-header">User Login</h1>
            <form role="form">
                <div class="form-group">
                    <label for="userId">User Id:</label>
                    <input type="text" class="form-control" placeholder="Enter Account No"
                           id="userId" name="userId"/>
                </div>
                <div class="form-group">
                    <label for="password">User Password:</label>
                    <input type="text" class="form-control" placeholder="Enter Password"
                           id="password" name="password"/>
                </div>
                <div class="checkbox">
                    <label>
                        <input type="checkbox"/>Remember Password
                    </label>
                    <br/>
                    <input type="submit" value="Login" class="btn"/>
                </div>
            </form>
        </div>
    </div>
</div>
</body>
</html>
  • login2.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <h1 class="page-header">User Login</h1>
    <form class="form-inline" role="form">
        <div class="form-group">
            <div class="input-group">
                <div class="input-group-addon">@</div>
                <input type="text" class="form-control" placeholder="Enter Account No"
                       id="userId" name="userId"/>
            </div>
        </div>
        <div class="form-group">
            <label for="password" class="sr-only">User Password:</label>
            <input type="text" class="form-control" placeholder="Enter Password"
                   id="password" name="password"/>
        </div>
        <div class="checkbox">
            <label>
                <input type="checkbox"/> Remember Password
            </label>
            <input type="submit" value="Login" class="btn"/>
        </div>
    </form>
</div>
</body>
</html>
  • login3.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-4">
            <h2>User Login</h2>
            <form class="form-horizontal" role="form">
                <div class="form-group has-success">
                    <label class="col-md-4 control-label" for="userId">User
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Id:</label>
                    <div class="col-md-6">
                        <input type="text" class="form-control" placeholder="Enter User Id"
                               id="userId" name="userId"/>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-md-4 control-label" for="password">Password:</label>
                    <div class="col-md-6">
                        <input type="text" class="form-control" placeholder="Enter Password"
                               id="password" name="password"/>
                    </div>
                </div>
                <div class="form-group ">
                    <div class="col-md-offset-1">
                        <input type="submit" value="Login" class="btn"/>
                        <input type="reset" value="Reset" class="btn"/>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>
</body>
</html>
  • navigate1.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>nagivate</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <ul class="nav nav-tabs">
        <li class="active"><a href="#home" data-toggle="tab">Home</a></li>
        <li><a href="#about" data-toggle="tab">About</a></li>
        <li><a href="#products" data-toggle="tab">Products</a></li>
        <li><a href="#message" data-toggle="tab">Message</a></li>
    </ul>
    <div class="tab-content">
        <div class="tab-pane active" id="home">
            Home Home Home Home
        </div>
        <div class="tab-pane active" id="about">
            About About About About
        </div>
        <div class="tab-pane active" id="products">
            Products Products Products Products
        </div>
        <div class="tab-pane active" id="message">
            Message Message Message Message
        </div>
    </div>
</div>
</body>
</html>
  • navigate2.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>nagivate</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <nav class="navbar navbar-default">
        <div class="container-fluid">
            <div class="navbar-header">
                <a class="navbar-brand">Brand</a>
            </div>
            <div class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <li><a href="#">Company Info</a></li>
                <li><a href="#">Company News</a></li>
                <li><a href="#">Message</a></li>
            </ul>
                <form class="navbar-form navbar-left" role="search">
                    <div class="form-group">
                        <input type="text" class="form-control" placeholder="Search">
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
                </form>
                <ul class="nav navbar-nav navbar-right">
                    <li><a href="#">Company Info</a></li>
                    <li><a href="#">Company News</a></li>
                    <li><a href="#">Message</a></li>
                </ul>
            </div>
        </div>
    </nav>
</div>
</body>
</html>
  • navigate3.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>nagivate</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <nav class="navbar navbar-default navbar-fixed-top">
        <!--<nav class="navbar navbar-default navbar-static-top">-->
        <div class="container-fluid">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed"
                        data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="#">Brand</a>
            </div>
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li><a href="#">Company Info</a></li>
                <li><a href="#">Company News</a></li>
            </ul>
                <form class="navbar-form navbar-left" role="search">
                    <div class="form-group">
                        <input type="text" class="form-control" placeholder="Search">
                    </div>
                    <button type="submit" class="btn btn-default">Submit</button>
                </form>
                <ul class="nav navbar-nav navbar-right">
                    <li><a href="#">Message</a></li>
                </ul>
            </div>
        </div>
    </nav>
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
    <img src="../img/sun.jpg">
</div>
</body>
</html>
  • panel.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Panel</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <hr/>
    <div class="row">
        <div class="col-md-2">
            <div class="panel panel-default">
                <div class="panel-heading">
                    heading
                </div>
                <div class="panel-body">
                    body
                </div>
            </div>
        </div>
        <div class="col-md-2">
            <div class="panel panel-primary">
                <div class="panel-heading">
                    heading
                </div>
                <div class="panel-body">
                    body
                </div>
            </div>
        </div>
        <div class="col-md-2">
            <div class="panel panel-success">
                <div class="panel-heading">
                    heading
                </div>
                <div class="panel-body">
                    body
                </div>
            </div>
        </div>
        <div class="col-md-2">
            <div class="panel panel-info">
                <div class="panel-heading">
                    heading
                </div>
                <div class="panel-body">
                    body
                </div>
            </div>
        </div>
        <div class="col-md-2">
            <div class="panel panel-warning">
                <div class="panel-heading">
                    heading
                </div>
                <div class="panel-body">
                    body
                </div>
            </div>
        </div>
        <div class="col-md-2">
            <div class="panel panel-danger">
                <div class="panel-heading">
                    heading
                </div>
                <div class="panel-body">
                    body
                </div>
            </div>
        </div>
        <div class="col-md-2">
            <div class="panel panel-default">
                <div class="panel-heading">
                    heading
                    <h1 class="panel-title">title</h1>
                </div>
                <div class="panel-body">
                    body
                </div>
                <div class="panel-footer">copyright</div>
            </div>
        </div>
    </div>
</div>
<hr/>
<div class="container">
    <div class="row">
        <div class="col-md-6">
            <div class="panel-info">
                <div class="panel-heading">
                    User Info
                </div>
                <div class="panel-body">
                    <table class="table">
                        <tr>
                            <th>ID</th>
                            <th>NAME</th>
                            <th>SEX</th>
                        </tr>
                        <tr>
                            <th>001</th>
                            <th>Bob</th>
                            <th>M</th>
                        </tr>
                        <tr>
                            <th>001</th>
                            <th>Sam</th>
                            <th>M</th>
                        </tr>
                    </table>
                </div>
            </div>
        </div>
        <div class="col-md-6">
            <div class="panel-info">
                <div class="panel-heading">
                    User Info
                </div>
                <table class="table">
                    <tr>
                        <th>ID</th>
                        <th>NAME</th>
                        <th>SEX</th>
                    </tr>
                    <tr>
                        <th>001</th>
                        <th>Bob</th>
                        <th>M</th>
                    </tr>
                    <tr>
                        <th>001</th>
                        <th>Sam</th>
                        <th>M</th>
                    </tr>
                </table>
            </div>
        </div>
    </div>
</div>
</body>
</html>
  • static.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link type="text/css" href="../css/bootstrap.css" rel="stylesheet">
    <script src="../jquery-1.12.4.min.js"></script>
    <script src="../js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-4">
            <h2>User Login</h2>
            <form class="form-horizontal" role="form">
                <div class="form-group">
                    <label class="col-md-4 control-label" for="userId">User
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Id:</label>
                    <div class="col-md-6">
                        <p class="form-control-static">admin12345</p>
                    </div>
                </div>
                <div class="form-group">
                    <label class="col-md-4 control-label" for="password">Password:</label>
                    <div class="col-md-6">
                        <p class="form-control-static">pword12345</p>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值