Spring+SpringMVC+Mybatis配置记录

本文详细介绍SpringMVC、MyBatis(SSM)框架的配置步骤与实战应用,涵盖Web.xml、DispatcherServlet、Spring配置文件、MyBatis配置、Mapper接口及XML映射文件的设置,同时提供Controller示例,展示如何集成数据库操作与视图呈现。

1.在eclipse中配置好“新建动态WEB”,准备好SPRINGMVC/Mybatis相关Jar。

主要代码:

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_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>springmvcmybatis</display-name>
  <servlet>
		<servlet-name>springmvcmybatis</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvcmybatis</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:springmvcmybatis-config.xml</param-value>
	</context-param> 
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
</web-app>

springmvcmybatis-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/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd
    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">
	<context:component-scan base-package="com.springmvcmybatis.controller"></context:component-scan>
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean> 
</beans>

springmvcmybatis-config.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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-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">
	 <context:component-scan base-package="com.springmvcmybatis.po"></context:component-scan>
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName"
			value="com.mysql.cj.jdbc.Driver" />
	 <property name="url"
			value="jdbc:mysql://localhost:3306/javadb?serverTimezone=UTC&amp;useSSL=false&amp;allowPublicKeyRetrieval=true" />
		<property name="username" value="root" />
		<property name="password" value="xxxxxxxxxxx" /> 
		 
	</bean>
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource" />
	</bean>
	<tx:annotation-driven
		transaction-manager="transactionManager" />
	<bean id="sqlSessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation"
			value="classpath:mybatis-config.xml" />
	</bean>
	<bean id="customerMapper"
		class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface"
			value="com.springmvcmybatis.mapper.CustomerMapper"></property>
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean> 
	<bean name="/home" class="com.springmvcmybatis.controller.HomeController"></bean>
</beans>

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>
    <!--配置别名 -->
    <typeAliases>
        <package name="com.springmvcmybatis.po" />
    </typeAliases>
    <!--配置Mapper的位置 -->
	<mappers> 
   <!--     <mapper resource="com/springmvcmybatis/po/CustomerMapper.xml" />
       -->
	  <mapper resource="com/springmvcmybatis/mapper/CustomerMapper.xml" /> 
       
	</mappers>
</configuration>

 com.springmvcmybatis.mapper/CustomerMapper.java

package com.springmvcmybatis.mapper;

import com.springmvcmybatis.po.Customer;

public interface CustomerMapper {
 
Customer findCustomerById(int id);
} 

 com.springmvcmybatis.mapper/CustomerMapper.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.springmvcmybatis.mapper.CustomerMapper">
	<!--根据id查询客户信息 -->
	<select id="findCustomerById" parameterType="Integer"
		     resultType="customer">
		select * from t_customer where id = #{id}
	</select>
</mapper>

CUSTOMER.java

package com.springmvcmybatis.po;
/**
 *  
 */
public class Customer {
	private Integer id;        
	private String username;  
	private String jobs;      
	private String phone;     
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getJobs() {
		return jobs;
	}
	public void setJobs(String jobs) {
		this.jobs = jobs;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	@Override
	public String toString() {
		return "Customer [id=" + id + ", username=" + username + 
				       ", jobs=" + jobs + ", phone=" + phone + "]";
	}
}

 com.springmvcmybatis.controller/HomeController.java

package com.springmvcmybatis.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.springmvcmybatis.mapper.CustomerMapper;
import com.springmvcmybatis.po.Customer;

@Controller
public class HomeController { 
	@RequestMapping("/home")
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
	
		
		ApplicationContext ac = new ClassPathXmlApplicationContext("springmvcmybatis-config.xml");
		CustomerMapper cm = (CustomerMapper)ac.getBean(CustomerMapper.class);
		Customer c = cm.findCustomerById(1);
		System.out.println(c.getUsername());
		
		mv.addObject("msg","Hi,我是Home的变量。"+c.getUsername()); 
		return mv;
	}
}

WEB-INF/jsp/home.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert title here</title>
</head>
<body>
hello ,I am home.${msg}
</body>
</html>

Jars 列表: 

注意:

1.阿里云服务器 MySql8远程功能启用:在mysql的cmd模式下:新建用户并授权,代码:

 mysql> CREATE USER 'root1'@'%' IDENTIFIED BY 'password'; (您可以创建一个root1)

 mysql> grant all privileges on *.* to 'root1'@'%';

程序连接串需要为:jdbc:mysql://1.2.3.4:3306/javadb?serverTimezone=UTC&useSSL=false&allowPublicKeyRetrieval=true

2.在测试类中一般这样写:

ApplicationContext ac = new ClassPathXmlApplicationContext("springmvcmybatis-config.xml");
		CustomerMapper cm = (CustomerMapper)ac.getBean(CustomerMapper.class);
		Customer c = cm.findCustomerById(1);

以获得数据库数据,但正式中应这样:先写一个Util,再在config.xml中配置一下即可。

package com.springmvcmybatis.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
//import org.springframework.stereotype.Component;

//@Component
public class SpringContextUtil implements ApplicationContextAware {
	private static ApplicationContext applicationContext;

	public ApplicationContext getApplicationContext() {
		return applicationContext;
	}

	public void setApplicationContext(ApplicationContext applicationContext) {
		SpringContextUtil.applicationContext = applicationContext;
	}

	@SuppressWarnings("unchecked")
	public static <T> T getBean(String name) throws BeansException {
		return (T) applicationContext.getBean(name);
	}
}

 配置:<bean id="springContextUtil" class="com.springmvcmybatis.SpringContextUtil" scope="singleton"></bean> 

最后在Controller中使用时:

	CustomerMapper cm = SpringContextUtil.getBean("CustomerMapper");
		Customer c = cm.findCustomerById(1);

3.在name-config.xml中写上 <context:component-scan base-package="com.springmvcmybatis"></context:component-scan>

后,即不用再单个写有注解的Controller的bean,会自动识别。 

4.SSM中css , js 等静态文件配置方法:

    a)将css   , js等文件夹放到WebContent目录下。

    b)在name-servlet.xml中配置:

    <mvc:annotation-driven />
    <mvc:resources location="/WEB-INF/demo/" mapping="/demo/**"></mvc:resources>
     <mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
    <mvc:resources location="/js/" mapping="/js/**"></mvc:resources>      

5. jsp包含文件中数据传递方法:在包含文件中写:

  <jsp:include page="/WEB-INF/jsp/control/header.jsp" flush="true">
  <jsp:param value="0" name="id"/>
  </jsp:include>

被包含文件中取值方法  : ${param.id}    或  <% String id = request.getParameter("id")%>
 

6.使用 mybatis pagehelper插件做分页:参考:PageHelper实现Mybatis的插件分页(SSM+maven+jsp)_m0_38105115的博客-CSDN博客

  先下载:https://github.com/pagehelper/Mybatis-PageHelper

和 jsqlparser 放到libs下。

然后在  edu-config.xml中的<bean id="sqlSessionFactory" > 中加入:

      
    <property name="plugins">
        <array>
            <bean class="com.github.pagehelper.PageInterceptor"> 
            </bean>
        </array>
    </property>

然后是代码


public interface RoleMapper {
    Role getById(int id);
    Page<Role> getList();
}
<select id="getList" resultType="role">
        select * from role
    </select> 

SERVICE:


public interface RoleService {
    Role getById(int id);
    Page<Role> getList(int page,int size);
}


@Service("roleService")
class RoleServiceImpl implements RoleService {
    RoleMapper rm ;
    @Override
    public Role getById(int id) { 
        rm = SpringContextUtil.getBean("roleMapper"); 
        Role r = rm.getById(id);
        return r;
    } 
    @Override
    public Page<Role> getList(int page,int size){
        rm = SpringContextUtil.getBean("roleMapper"); 
         PageHelper.startPage(page, size); 
         return rm.getList();
    }
}
Controller:

public String list(int page,int size,ModelMap model) {     
      
            Page<Role> roleInfo = rs.getList(page, size);
            List<Role> roleList = roleInfo.getResult();
            long count = roleInfo.getTotal();
            
            for(Role r:roleList) {
                System.out.println("R:"+r.getName());
            }

7.Restful风格地址配置:

1).加入jackson相关的配置:jackson-annotations-2.11.0.jar  jackson-core-2.11.0.jar  jackson-databind-2.11.0

2).在Controller中这样写即可:

@RequestMapping("/get/{id}")
    public String get(@PathVariable("id")int id,ModelMap model) {         
//        User u = us.getById(id); 
//        model.addAttribute("user", u);  
        return "course/get";
    }

8.Eclipse中SSM+Freemarker使用方法(非Boot架构):

1.在SSM-servlet.xml中配置两个BEAN:

  <!--freemarker视图解析器配置-->
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <!--视图解析器类-->
        <property name="viewClass" value="org.springframework.web.servlet.view.freemarker.FreeMarkerView" />
        <!--后缀配置-->
        <property name="suffix" value=".ftl"/>
        <!--设置各种属性覆盖-->
        <!--允许重写Request属性-->
        <property name="allowRequestOverride" value="true"/>
        <!--允许重写Session属性-->
        <property name="allowSessionOverride" value="true"/>
        <!--设置request Attribute添加到模型-->
        <property name="exposeRequestAttributes" value="true"/>
        <!--设置session Attribute添加到模型-->
        <property name="exposeSessionAttributes" value="true"/>
        <!--页面内容类型-->
        <property name="contentType" value="text/html;charset=utf-8"/>
    </bean>
    <bean id="freemarkerConfig"
        class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/ftl/" />
        <property name="defaultEncoding" value="UTF-8" />
    </bean> 

     2.在/WEB-INF/ftl/下加文件index.ftl,在lib下放入freemarker.jar即可。 

9.去掉EClipse项目中路径中的项目名的方法:

打开eclipse->Servers->server.xml中,找到 <Context docBase="cms" path="/" reloadable="true",中的path改为: "/"即可。 

10.在SSM+jsp模板中使用JSTL,除了jstl.jar和standard.jar还要加入下面这个JAR:

XercesImpl.jar下载地址: http://www.apache.org/dist/xerces/j/

xalan.jar下载地址: http://xml.apache.org/xalan-j/index.html

11.在SSM中集成Log4J的步骤:

    1.新建一个名为:log4j.properties 放到项目java根下,内容:

      log4j.rootLogger=DEBUG,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.org.apache.ibatis=INFO 
log4j.logger.com.name=DEBUG

    2.在mybatis-config里的第二个位置加入配置:

      <settings>
        <!-- 输出日志配置 -->
        <setting name="logImpl" value="LOG4J" />
        <!-- 这个配置使全局的映射器启用或者禁用二级缓存 -->
        <setting name="cacheEnabled" value="true" />
        <!-- 全局启用或者禁用延迟加载。当禁用时,所有关联对象都会及时加载 。 -->
        <setting name="lazyLoadingEnabled" value="true" />
        <!-- 指定mybatis 如何自动映射列到属性: PARTIAL 只会自动映射简单,没有嵌套的结果。 FILL 会自动映射任意复杂的结果(嵌套的或者其他情况) -->
        <setting name="autoMappingBehavior" value="PARTIAL" />
        <!-- 设置超时时间,它决定驱动等待一个数据库相应的时间 -->
        <setting name="defaultStatementTimeout" value="25" />
        <!--是否开启自动驼峰命名规则,即从经典数据库列名A-COlUMN 到经典java属性名 aColumn的类似映射。 默认为false -->
        <setting name="mapUnderscoreToCamelCase" value="false" />
    </settings>

  3.将jar包放到lib下刷新,即可在控制台输出sql. 

12.注解方式写mapper,报错Controller无法注入,原因: 把@Resource 改为@Autowired:

@Autowired
BookMapper bookMapper;

13.纯注解方式:SSM 整合详细步骤与配置(纯注解)_李巴巴的博客-CSDN博客_ssm整合配置详解

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值