• spirngmvc整合mybatis实现CRUD


    一、建立一张简单的User表

     1 CREATE TABLE `users` (
     2 `id` int(20) NOT NULL AUTO_INCREMENT,
     3 `name` varchar(20) NOT NULL,
     4 `age` int(20) DEFAULT NULL,
     5 PRIMARY KEY (`id`)
     6 ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;
     7 
     8 -- ----------------------------
     9 -- Records of users
    10 -- ----------------------------
    11 INSERT INTO `users` VALUES ('1', '杜崇', '10');
    12 INSERT INTO `users` VALUES ('2', '黄春宇', '12');
    13 INSERT INTO `users` VALUES ('11', '文杰', '2');
    14 INSERT INTO `users` VALUES ('12', '何亮', '20');
    15 INSERT INTO `users` VALUES ('13', '超哥', '25');
    16 INSERT INTO `users` VALUES ('14', '阿宝', '10');

    二、用myeclipse建立一个web工程ssi

    2.1、jar包

    2.2目录结构

    2.3、springmvc的核心servlet  ssi-servlet.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4 xmlns:context="http://www.springframework.org/schema/context"
     5 xmlns:mvc="http://www.springframework.org/schema/mvc"
     6 xmlns:aop="http://www.springframework.org/schema/aop"
     7 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
     8 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
     9 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
    10 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
    11 
    12 <context:component-scan base-package="org.ssi.controller"/>
    13 <!--自动注册解析器和适配器-->
    14 <mvc:annotation-driven/>
    15 <mvc:default-servlet-handler />
    16 <aop:aspectj-autoproxy proxy-target-class="true" /> 
    17 <!-- 视图解析器的分配器 -->
    18 <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
    19 <!--先检查请求的后缀名,如果没有匹配的,则spring检查请求头里面设置的  ContentType 来找适合的 mediaType来返回一种 mediaType 
    20 mediaTypes这个属性存储了 你请求后缀名 或者 参数 所对应 的mediaType
    21 -->
    22 <property name="mediaTypes">
    23 <map>
    24 <entry key="atom" value="application/atom+xml"/>
    25 <entry key="html" value="text/html"/>
    26 <entry key="json" value="application/json"/>
    27 </map>
    28 </property>
    29 <!--具体的解析器 -->
    30 <property name="viewResolvers">
    31 <list>
    32 <bean class="org.springframework.web.servlet.view.BeanNameViewResolver"/>
    33 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    34 <property name="prefix" value="/jsp/"/>
    35 <property name="suffix" value=".jsp"/>
    36 </bean>
    37 </list>
    38 </property>
    39 </bean>
    40 
    41 </beans>

    2.4、 web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
     3 <display-name></display-name>
     4 <welcome-file-list>
     5 <welcome-file>index.jsp</welcome-file>
     6 </welcome-file-list>
     7 
     8 <servlet>
     9 <servlet-name>ssi</servlet-name>
    10 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    11 <load-on-startup>1</load-on-startup>
    12 </servlet>
    13 
    14 <servlet-mapping>
    15 <servlet-name>ssi</servlet-name>
    16 <url-pattern>/</url-pattern>
    17 </servlet-mapping>
    18 
    19 <filter>
    20 <filter-name>CharacterEncodingFilter</filter-name>
    21 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    22 <init-param>
    23 <param-name>encoding</param-name>
    24 <param-value>utf-8</param-value>
    25 </init-param>
    26 </filter>
    27 
    28 <filter-mapping>
    29 <filter-name>CharacterEncodingFilter</filter-name>
    30 <url-pattern>/*</url-pattern>
    31 </filter-mapping>
    32 
    33 <listener>
    34 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    35 </listener>
    36 
    37 <context-param>
    38 <param-name>contextConfigLocation</param-name>
    39 <param-value>
    40 classpath:applicationContext.xml
    41 </param-value>
    42 </context-param>
    43 
    44 <session-config>
    45 <session-timeout>0</session-timeout>
    46 </session-config>
    47 </web-app>

    2.5、conf.xml 实际上这个文件可以不要

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    3 <configuration>
    4 
    5 <typeAliases>
    6 <typeAlias type="org.ssi.model.User" alias="User"/>
    7 </typeAliases>
    8 </configuration>

    2.6、配置spring容器 applicationContext.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <beans xmlns="http://www.springframework.org/schema/beans"
     3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
     4 xmlns:context="http://www.springframework.org/schema/context"
     5 xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
     7 http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
     8 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
     9 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
    10 ">
    11 <!-- 加载数据库属性配置文件 
    12 <context:property-placeholder location="classpath:db.properties" ignore-unresolvable="true"/>
    13 -->
    14 
    15 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    16 <!--
    17 <property name="driverClassName" value="${jdbc.driver}"></property>
    18 <property name="url" value="${jdbc.url}"></property>
    19 <property name="password" value="${jdbc.password}"></property>
    20 <property name="username" value="${jdbc.username}"></property> 
    21 -->
    22 <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
    23 <property name="url" value="jdbc:mysql://localhost:3306/mybatis"></property>
    24 <property name="username" value="root"></property>
    25 <property name="password" value="root"></property> 
    26 <!--maxActive: 最大连接数量--> 
    27 <property name="maxActive" value="150"/> 
    28 <!--minIdle: 最小空闲连接--> 
    29 <property name="minIdle" value="5"/> 
    30 <!--maxIdle: 最大空闲连接--> 
    31 <property name="maxIdle" value="20"/> 
    32 <!--initialSize: 初始化连接--> 
    33 <property name="initialSize" value="30"/> 
    34 <!-- 连接被泄露时是否打印 --> 
    35 <property name="logAbandoned" value="true"/> 
    36 <!--removeAbandoned: 是否自动回收超时连接--> 
    37 <property name="removeAbandoned" value="true"/> 
    38 <!--removeAbandonedTimeout: 超时时间(以秒数为单位)--> 
    39 <property name="removeAbandonedTimeout" value="10"/> 
    40 <!--maxWait: 超时等待时间以毫秒为单位 1000等于60秒--> 
    41 <property name="maxWait" value="1000"/> 
    42 <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. --> 
    43 <property name="timeBetweenEvictionRunsMillis" value="10000"/> 
    44 <!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 --> 
    45 <property name="numTestsPerEvictionRun" value="10"/> 
    46 <!-- 1000 * 60 * 30 连接在池中保持空闲而不被空闲连接回收器线程--> 
    47 <property name="minEvictableIdleTimeMillis" value="10000"/> 
    48 </bean>
    49 
    50 
    51 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 
    52 <property name="configLocation" value="classpath:conf.xml" /> 
    53 <property name="dataSource" ref="dataSource" />
    54 <property name="mapperLocations" value="classpath:org/ssi/mapper/*.xml" />
    55 </bean>
    56 <!-- 配置扫描器 -->
    57 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    58 <!-- 扫描org.ssi.dao这个包以及它的子包下的所有映射接口类 -->
    59 <property name="basePackage" value="org.ssi.dao" />
    60 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    61 </bean> 
    62 
    63 <!--配置事物 -->
    64 <bean id="txManager"
    65 class="org.springframework.jdbc.datasource.DataSourceTransactionManager ">
    66 <property name="dataSource" ref="dataSource"/>
    67 </bean>
    68 <!-- 注解事务-->
    69 <tx:annotation-driven transaction-manager="txManager" />
    70 <context:annotation-config />
    71 <!-- 
    72 -->
    73 <context:component-scan base-package="org.ssi.service,org.ssi.dao," />
    74 </beans>

    2.7、dao接口,不用提供实现类,实现类有mybatis实现

     1 package org.ssi.dao;
     2 
     3 import java.util.List;
     4 
     5 import org.ssi.model.User;
     6 
     7 
     8 public interface UserMapperI {
     9 /**
    10 * 增
    11 * @param user
    12 */
    13 public void addUser(User user);
    14 /**
    15 * 改
    16 * @param user
    17 */
    18 public void updateUser(User user);
    19 /**
    20 * 删
    21 * @param id
    22 */
    23 public void deleteUser(int id);
    24 /**
    25 * 查
    26 * @param id
    27 * @return
    28 */
    29 public User getUser(int id);
    30 /**
    31 * 查所有
    32 * @return
    33 */
    34 public List<User> getAllUsers();
    35 
    36 }

    与配置文件中的类文件以及路径相对应,

    2.8、pojo类 user.java

     1 package org.ssi.model;
     2 
     3 public class User {
     4 
     5 private int id;
     6 private String name;
     7 private int age;
     8 
     9 public User(int id, String name, int age) {
    10 super();
    11 this.id = id;
    12 this.name = name;
    13 this.age = age;
    14 }
    15 
    16 public User() {
    17 super();
    18 }
    19 
    20 public int getId() {
    21 return id;
    22 }
    23 public void setId(int id) {
    24 this.id = id;
    25 }
    26 public String getName() {
    27 return name;
    28 }
    29 public void setName(String name) {
    30 this.name = name;
    31 }
    32 public int getAge() {
    33 return age;
    34 }
    35 public void setAge(int age) {
    36 this.age = age;
    37 }
    38 
    39 @Override
    40 public String toString() {
    41 return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
    42 }
    43 
    44 }

    2.9、UserMapperI.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 
     3 <!-- 
     4 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
     5 例如namespace="org.ssi.dao.UserMapperI"就是org.ssi.dao(包名)+UserMapperI(userMapperI.xml文件去除后缀)
     6 -->
     7 <mapper namespace="org.ssi.dao.UserMapperI">
     8 <!-- <resultMap>标签用来处理pojo对象的属性与表字段之间的不匹配问题
     9 <resultMap id="userResultMap" type="User">
    10 <id property="id" column="userid" />
    11 <result property="name" column="username" />
    12 <result property="age" column="age" />
    13 </resultMap>
    14 -->
    15 <!-- 
    16 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,
    17 不能够重复 使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
    18 resultType="org.mybatis.model.User"就表示将查询结果封装成一个User类的对象返回
    19 User类就是users表所对应的实体类
    20 -->
    21 <!-- 
    22 根据id查询得到一个user对象
    23 --> 
    24 <select id="getUser" parameterType="int" 
    25 resultType="User">
    26 select * from users where id=#{id}
    27 </select>
    28 
    29 <insert id="addUser" parameterType="User" >
    30 insert into users(name ,age) values(#{name},#{age})
    31 </insert>
    32 
    33 <delete id="deleteUser" parameterType="int">
    34 delete from users where id=#{id}
    35 </delete>
    36 
    37 <update id="updateUser" parameterType="User">
    38 update users set name=#{name},age=#{age} where id=#{id}
    39 </update>
    40 
    41 <select id="getAllUsers" resultType="User">
    42 select * from users
    43 </select>
    44 </mapper>

    该xml文件中的各种操作的id必须要跟dao接口中的方法名字一一对应,否侧会报错。

    按照以上配置,springmvc整合mybatis的整体架构已经完成,

    三、编写代码进行测试

    Controller控制器  SsiController.java

     1 package org.ssi.controller;
     2 
     3 import java.util.List;
     4 
     5 import javax.servlet.http.HttpServletRequest;
     6 
     7 import org.springframework.beans.factory.annotation.Autowired;
     8 import org.springframework.stereotype.Controller;
     9 import org.springframework.web.bind.annotation.PathVariable;
    10 import org.springframework.web.bind.annotation.RequestMapping;
    11 import org.springframework.web.bind.annotation.RequestMethod;
    12 import org.ssi.dao.UserMapperI;
    13 import org.ssi.model.User;
    14 
    15 @Controller
    16 @RequestMapping(value="/controller")
    17 public class SsiController {
    18 
    19 @Autowired
    20 private UserMapperI umi;
    21 private List<User> ulist; 
    22 
    23 @RequestMapping(value="/all",method = RequestMethod.GET)
    24 public String uList(HttpServletRequest request){
    25 
    26 ulist=this.umi.getAllUsers();
    27 for (int i = 0; i < ulist.size(); i++) {
    28 System.out.println(ulist.get(i));
    29 }
    30 request.setAttribute("ulist",ulist);
    31 return "allusers";
    32 
    33 }
    34 
    35 
    36 @RequestMapping(value = "/addu", method = RequestMethod.POST)
    37 public String addU(User u) {
    38 
    39 this.umi.addUser(u);
    40 return "redirect:all";
    41 }
    42 
    43 @RequestMapping(value = "/delete/{id}", method = RequestMethod.GET)
    44 public String deleteU(HttpServletRequest request,@PathVariable Integer id) {
    45 
    46 this.umi.deleteUser(id);
    47 return "redirect:/controller/all";
    48 }
    49 
    50 @RequestMapping(value = "/get/{id}", method = RequestMethod.GET)
    51 public String getUserById(HttpServletRequest request,@PathVariable Integer id) {
    52 
    53 User u=this.umi.getUser(id);
    54 request.setAttribute("user", u);
    55 return "userinfo";
    56 }
    57 
    58 @RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
    59 public String updateU(HttpServletRequest request,@PathVariable Integer id,User u) {
    60 
    61 User uu=this.umi.getUser(id);
    62 uu.setName(u.getName());
    63 uu.setAge(u.getAge());
    64 this.umi.updateUser(uu);
    65 return "redirect:/controller/all";
    66 }
    67 }
    68 
    69  

    3.1、测试新增

    index.jsp

     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9 <head>
    10 <base href="<%=basePath%>">
    11 
    12 <title>Add User</title>
    13 <meta http-equiv="pragma" content="no-cache">
    14 <meta http-equiv="cache-control" content="no-cache">
    15 <meta http-equiv="expires" content="0"> 
    16 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    17 <meta http-equiv="description" content="This is my page">
    18 <!--
    19 <link rel="stylesheet" type="text/css" href="styles.css">
    20 -->
    21 </head>
    22 
    23 <body>
    24 
    25 
    26 <form action="controller/addu" method="post">
    27 name :    <input name="name" type="text"><br>
    28 age :    <input name="age" type="text"><br>
    29 <input type="submit" value="submit">
    30 </form>
    31 <br>
    32 
    33 
    34 </body>
    35 </html>

    添加前:

     

    添加:

    添加后:

     

    点击edit 19 奥巴马

     1 userinfo.jsp
     2 
     3 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
     4 <%
     5 String path = request.getContextPath();
     6 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     7 %>
     8 
     9 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    10 <html>
    11 <head>
    12 <base href="<%=basePath%>">
    13 
    14 <title>UserInfo</title>
    15 
    16 <meta http-equiv="pragma" content="no-cache">
    17 <meta http-equiv="cache-control" content="no-cache">
    18 <meta http-equiv="expires" content="0"> 
    19 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    20 <meta http-equiv="description" content="This is my page">
    21 <!--
    22 <link rel="stylesheet" type="text/css" href="styles.css">
    23 -->
    24 
    25 </head>
    26 
    27 <body>
    28 <p align="center"><font size="20">UserInfo Edit</font></p>
    29 <div align="center">
    30 <form action="controller/update/${user.id}" method="post">
    31 Name :<input type="text" name="name" value="${user.name}"><br>
    32 Age :<input type="text" name="age" value="${user.age }"><br>
    33 <input type="submit" value="Usubmit"> 
    34 </form>
    35 </div>
    36 </body>
    37 </html>

    作者:no-npe
    出处:https://www.cnblogs.com/geekdc
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
    由于作者个人水平有限,如果文中有什么错误,欢迎指出。以免更多的人被误导。

  • 相关阅读:
    0 Explore TreeView
    按钮颜色选择器
    颜色组合框
    Get Files from Directory
    05.0 图片
    WINAPI 变量(2861个)
    为字符串增加50个空格
    让DataGridView显示行号
    相对路径
    SpecialFolder
  • 原文地址:https://www.cnblogs.com/geekdc/p/5174777.html
Copyright © 2020-2023  润新知