SringMVC Mybatis结合例子

通过SpringMVC和Mybatis的入门简单学习,我们可以自然而然的想到既然SpringMVC控制页面显示和控制流程,Mybatis可以存取数据库的数据,那么为什么不把两者结合各司其职。只要通过简单的堆积把业务接口方法的调用放在controller方法中,并且将获得的数据显示到相应的jsp上,不就能轻易实现两者的结合而不会产生功能的累余或者冲突吗。

下面就设置一个合适需求:通过界面的学号输入返回该生所有信息

实现思路:简单的jsp表单界面获得学号,controller获得学号后调用mapper接口通过sql映射获得学生信息之后在界面中显示

1、新建web项目,首先完成springMVC的搭建。主要有controller类的编写、web.xml、[servlet-name]-servlet.xml的配置和jsp界面,当然还有spring的支持jar包,也可以直接部署spring完成导包。

controller:

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.mapper.InterStudentMapper;
import com.mapper.StudentMapperImpl;
import com.model.Student;

@Controller
//@RequestMapping("/jsp")
public class ServiceController {
	
	@RequestMapping(value="/index",method=RequestMethod.GET)
	public String showIndex(){
		return "index";
	}
	
	@RequestMapping(value="/show",method=RequestMethod.POST)
	public String getOneStudent(@RequestParam("sno")int sno){
		System.out.println(sno);
		return "show";
		
	}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>spingMVC_mybatis</display-name>
 
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- <load-on-startup>1</load-on-startup> -->
		<init-param>
  			<param-name>contextConfigLocation</param-name>
  			<param-value>/WEB-INF/spring-servlet.xml</param-value>
  		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
</web-app>

spring-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"
    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-4.1.xsd
    http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">  

   
   <context:component-scan base-package="com.controller"/>
   
   
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   		<property name="prefix" value="/jsp/"/>
   		<property name="suffix" value=".jsp"/>
   </bean>
    
</beans>

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'index.jsp' starting page</title>

  </head>
  
  <body>
    <form:form action="/springMVC_mybatis/show" method="post">
    	<label>请输入学号</label>
    	<input name="sno"/>
    	<input type="submit" value="submit"/>
    </form:form>
  </body>
</html>

到这里就可以输入http://localhost:8080/项目名/index测试一下springMVC是否部署正确

show.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    
    <title>My JSP 'index.jsp' starting page</title>

  </head>
  
  <body>
    <table>
    	<h3>Student info</h3>
    	<tr>
    		<td>sno:</td><td>${sno}</td>
    	</tr>
    	<tr>
    		<td>sname:</td><td>${sname}</td>
    	</tr>
    	<tr>
    		<td>score:</td><td>${score}</td>
    	</tr>
    </table>
  </body>
</html>

springMVC到此编写完成

2、在此基础上完成Mybatis的添加。这里需要注意的是不同于单独的mybatis工程,web项目lib目录下需要把mybatis、jdbc包导入不然会报错。完整的项目结构如下:

Student实体类

package com.model;

public class Student {
	
	private int sno;
	private String sname;
	private double score;
	public int getSno() {
		return sno;
	}
	public void setSno(int sno) {
		this.sno = sno;
	}
	public String getSname() {
		return sname;
	}
	public void setSname(String sname) {
		this.sname = sname;
	}
	public double getScore() {
		return score;
	}
	public void setScore(double score) {
		this.score = score;
	}
	@Override
	public String toString() {
		return "Student [sno=" + sno + ", sname=" + sname + ", score=" + score + "]";
	}
	
}

mybatis.cfg.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>

	<properties resource="mysql.properties"/>
	
	<environments default="devel">
		<environment id="devel">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="${driver}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${user}"/>
				<property name="password" value="${password}"/>
			</dataSource>
		</environment>
	</environments>
	
	<mappers>
		<mapper resource="com/mapper/StudentMapper.xml"/>
	</mappers>
	
</configuration>

mapper接口方法类、实现类、StudentMapper.xml配置

package com.mapper;

import com.model.Student;

public interface InterStudentMapper {

	public Student getStudentBySno(int sno);
}
package com.mapper;

import org.apache.ibatis.session.SqlSession;

import com.model.Student;
import com.tool.DBtool;

public class StudentMapperImpl implements InterStudentMapper {

	@Override
	public Student getStudentBySno(int sno) {
		SqlSession sqlSession=DBtool.getSqlSession();
		InterStudentMapper mapper=sqlSession.getMapper(InterStudentMapper.class);
		Student stu=mapper.getStudentBySno(sno);
		sqlSession.commit();
		sqlSession.close();
		return stu;
	}

}
<?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.mapper.InterStudentMapper">
	
	<select id="getStudentBySno" parameterType="int" resultType="com.model.Student">
		select * from student where sno=#{sno}
	</select>
	
</mapper>

数据库连接的工具类

package com.tool;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class DBtool {

	private static SqlSessionFactory sqlSessionFactoty;
	
	static{
		try {
			Reader reader=Resources.getResourceAsReader("mybatis.cfg.xml");
			sqlSessionFactoty=new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public static SqlSession getSqlSession(){
		return sqlSessionFactoty.openSession();
	}
	
}

完整的controller类

package com.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.mapper.InterStudentMapper;
import com.mapper.StudentMapperImpl;
import com.model.Student;

@Controller
//@RequestMapping("/jsp")
public class ServiceController {
	
	@RequestMapping(value="/index",method=RequestMethod.GET)
	public String showIndex(){
		return "index";
	}
	
	@RequestMapping(value="/show",method=RequestMethod.POST,params="sno")
	public String getOneStudent(@RequestParam("sno")int sno,Model model){
		//System.out.println(sno);
		InterStudentMapper interStudentMapper=new StudentMapperImpl();
		Student stu=interStudentMapper.getStudentBySno(sno);
		System.out.println(stu);
		model.addAttribute("sno",stu.getSno());
		model.addAttribute("sname",stu.getSname());
		model.addAttribute("score",stu.getScore());
		return "show";
		
	}
}

结果测试

猜你喜欢

转载自blog.csdn.net/zero_130/article/details/81452105