mybatis与spring、springmvc整合

mybatis与spring、springmvc整合

首先引入jar包:

项目结构:


1、web.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>    
 
  <!-- 指定Spring Bean的配置文件所在目录。默认配置在WEB-INF目录下 -->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:config/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
 
  <listener>
    <listener-class>org.springframework.web.context.ContextCleanupListener</listener-class>
  </listener>
 
 <!-- mvc配置 -->
  <servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>&nbsp; 默认
    </init-param>
    -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
 
 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

WEB-INF目录下创建springmvc配置文件:mvc-dispatcher-servlet.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 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-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
    
    <!-- 设置扫描的包路径 -->
    <context:component-scan base-package="com.yihaomen.mybatis.controller" />
    <!-- 添加注解驱动 -->  
    <mvc:annotation-driven />
   
    <mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>
    <mvc:default-servlet-handler/>
    
     <!-- 对转向页面的路径解析。prefix:前缀, suffix:后缀 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/jsp/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>

</beans>


2、创建与数据库表对应的实体类和映射文件


User.java文件:

package com.yihaomen.mybatis.model;

public class User {
   
    private int id;
    private String userName;
    private String password;
   
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }

}

User.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.yihaomen.mybatis.dao.UserDao"><!-- 命名空间接口方式编程时这里对应dao接口-->
   <!-- 开启二级缓存 -->
    <cache
        eviction="FIFO"
        flushInterval="60000"
        size="512"
        readOnly="true"/>
            
    <select id="selectUserByID" parameterType="int"  resultType="User">
        select * from users where ID=#{id}
    </select>
    
    <!-- 为了返回list 类型而定义的returnMap -->
    <resultMap type="User" id="resultListUser">
        <id column="id" property="id" />
        <result column="userName" property="userName" />
        <result column="password" property="password" />
    </resultMap>
    <!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 '%'||#{userName}||'%' -->
    <select id="selectUsers" parameterType="String" resultMap="resultListUser">
        select * from users where userName like CONCAT(CONCAT('%', #{userName}),'%')
    </select>
    <!-- 直接返回map -->
    <select id="queryUsers" parameterType="java.util.HashMap" resultType="java.util.HashMap">
        select * from users where userName like CONCAT(CONCAT('%', #{userName}),'%')
    </select>
    
    <!--执行增加操作的SQL语句。id和parameterType
       分别与IUserOperation接口中的addUser方法的名字和
       参数类型一致。以#{name}的形式引用Student参数
       的name属性,MyBatis将使用反射读取Student参数
       的此属性。#{name}中name大小写敏感。引用其他
       的gender等属性与此一致。seGeneratedKeys设置
       为"true"表明要MyBatis获取由数据库自动生成的主
       键;keyProperty="id"指定把获取到的主键值注入
       到Student的id属性
       添加前缀:suffix="" 删除后缀:suffixOverrides=","
       -->
    <insert id="addUser" parameterType="User">
        insert into users(
                <trim suffix="" suffixOverrides=",">
                        <if test="userName!=null">
                           userName,
                           </if>
                           <if test="password!=null">
                           password,
                           </if>
                   </trim>
                ) values(
                <trim suffix="" suffixOverrides=",">
                        <if test="userName!=null">
                           #{userName},
                           </if>
                           <if test="password!=null">
                           #{password},
                           </if>
                   </trim>
                )
    </insert>
    
    <update id="updateUser" parameterType="User" >
        update users
              <trim prefix="SET" suffixOverrides=",">  
                       <if test="password and password != ''">  PASSWORD=#{password},</if>
               </trim>
            where id=#{id}
    </update>
    
    <delete id="deleteUser" parameterType="int">
        delete from users where id=#{id}
    </delete>
    
</mapper>


UserDao.java文件:

package com.yihaomen.mybatis.dao;

import java.util.List;
import java.util.Map;
import com.yihaomen.mybatis.model.User;

public interface UserDao {
     //接口方法名对应sql的ID
     public User selectUserByID(int id);
    
     //查询list
     public List<User> selectUsers(String userName);
     //参数和返回都用hashMap形式
     public List<Map> queryUsers(Map map);  
     //插入数据
     public void addUser(User user);
     //更新数据
     public void updateUser(User user);
    
     public void deleteUser(int id);
    
    
}

config目录下创建mybatis.xml和applicationContext.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
          <!-- User.java类取一个别名User -->
        <typeAlias alias="User" type="com.yihaomen.mybatis.model.User"/>
       
    </typeAliases>
   
</configuration>


applicationContext.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">


 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
     <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
     <property name="url" value="jdbc:mysql://127.0.0.1:3306/mydb?characterEncoding=utf8"/>
     <property name="username" value="root"/>
     <property name="password" value="root"/>
  </bean>
 
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource" />
  </bean>
    
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
     <!--dataSource属性指定要用到的连接池-->
     <property name="dataSource" ref="dataSource"/>
     <!--configLocation属性指定mybatis的核心配置文件-->
     <property name="configLocation" value="classpath:config/Configuration.xml" />
     <!-- 所有配置的mapper映射文件 -->
     <property name="mapperLocations" value="classpath*:com/yihaomen/mybatis/model/*.xml" />
  </bean>

  <bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
     <!--sqlSessionFactory属性指定要用到的SqlSessionFactory实例-->
     <property name="sqlSessionFactory" ref="sqlSessionFactory" />
     <!--mapperInterface属性指定映射器接口,用于实现此接口并生成映射器对象-->
     <property name="mapperInterface" value="com.yihaomen.mybatis.dao.UserDao" />
  </bean>


</beans>


action控制层:

package com.yihaomen.mybatis.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;

import com.yihaomen.mybatis.dao.UserDao;
import com.yihaomen.mybatis.model.User;


@Controller
@RequestMapping("/User")
public class UserController {
    @Autowired
    UserDao userDao;

    @RequestMapping("/list")
    public ModelAndView listall(HttpServletRequest request,HttpServletResponse response){
        List<User> userlist=(List<User>) userDao.selectUsers("文");
        ModelAndView mav=new ModelAndView("list");//list等同于 return "list"
        mav.addObject("userlist",userlist);
        return mav;
    }
    
    @RequestMapping("test/login.do")  // 请求url地址映射,类似Struts的action-mapping
    public String testLogin(@RequestParam(value="username")String username, String password, HttpServletRequest request) {
        // @RequestParam是指请求url地址映射中必须含有的参数(除非属性required=false)
        // @RequestParam可简写为:@RequestParam("username")

        if (!"admin".equals(username) || !"admin".equals(password)) {
            return "loginError"; // 跳转页面路径(默认为转发),该路径不需要包含spring-servlet配置文件中配置的前缀和后缀
        }
        return "loginSuccess";
    }

    @RequestMapping("/test/login2.do")
    public ModelAndView testLogin2(String username, String password, int age){
        // request和response不必非要出现在方法中,如果用不上的话可以去掉
        // 参数的名称是与页面控件的name相匹配,参数类型会自动被转换
        
        if (!"admin".equals(username) || !"admin".equals(password) || age < 5) {
            return new ModelAndView("loginError"); // 手动实例化ModelAndView完成跳转页面(转发),效果等同于上面的方法返回字符串
        }
        return new ModelAndView(new RedirectView("../index.jsp"));  // 采用重定向方式跳转页面
        // 重定向还有一种简单写法
        // return new ModelAndView("redirect:../index.jsp");
    }

    @RequestMapping("/test/login3.do")
    public ModelAndView testLogin3(User user) {
        // 同样支持参数为表单对象,类似于Struts的ActionForm,User不需要任何配置,直接写即可
        String username = user.getUserName();
        String password = user.getPassword();
       
        
        if (!"admin".equals(username) || !"admin".equals(password) ) {
            return new ModelAndView("loginError");
        }
        return new ModelAndView("loginSuccess");
    }

   /* @Resource(name = "loginService")  // 获取applicationContext.xml中bean的id为loginService的,并注入
    private LoginService loginService;  //等价于spring传统注入方式写get和set方法,这样的好处是简洁工整,省去了不必要得代码

    @RequestMapping("/test/login4.do")
    public String testLogin4(User user) {
        if (loginService.login(user) == false) {
            return "loginError";
        }
        return "loginSuccess";
    }*/
}

WEB-INF/jsp下建立list.jsp页面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
 
  <body>
 
   ${userlist[0].userName} <br>
   ${userlist[1].userName} <br>
 
  </body>
</html>

项目已经做完部署到tomcat上访问:http://localhost:8080/mybatis_springmvc/list  就能访问到list页面并查处数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值