基于注解配置简单的SpringMVC+Mybatis

SpringMVC+Mybatis框架配置过好几次了,现在貌似终于对这些东西有些了解,自己草草的总结一下,也是再学习的一个过程大笑


首先,准备jar包,这个就不在赘述了。

然后就来肉戏了大笑,以下只是我的理解,不足之处请指出,轻喷。

web.xml是一个web程序的入口,当web程序启动时,首先找web.xml。先把web.xml所有配置先贴出来。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>SpringMVC</display-name>
	<!-- 项目默认页面 -->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
	
	<!-- 配置文件位置 -->  
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext.xml</param-value>
	</context-param>
	
	<!-- 上下文Spring监听器 -->  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>

	<!-- 字符集过滤器 -->  
	<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>
	
	
    
    <!-- servlet控制跳转 -->  
    <servlet>  
        <servlet-name>spring</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <!-- 配置文件 -->  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:springMVC/context-dispatcher.xml</param-value>  
        </init-param>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>spring</servlet-name>  
        <url-pattern>*.do</url-pattern>  
    </servlet-mapping>  
</web-app>

这两项,不用说了吧。

<span style="white-space:pre">	</span><display-name>SpringMVC</display-name>
	<!-- 项目默认页面 -->
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
web.xml读到这个位置,就去找这个位置下的配置文件了,这个文件是spring容器的配置,监听器不用多说。

<!-- 配置文件位置 -->  
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext.xml</param-value>
	</context-param>
	
	<!-- 上下文Spring监听器 -->  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>
配置spring的文件
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="  
    http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    http://www.springframework.org/schema/context   
    http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<context:component-scan base-package="com.test" />

	<bean
		class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

	<!--创建jdbc数据源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
		<property name="username" value="scott" />
		<property name="password" value="tiger" />
	</bean>

	<!-- 创建SqlSessionFactory,同时指定数据源 -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
	</bean>
	
	<bean id="sqlTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg index="0" ref="sqlSessionFactory" />
	</bean> 
</beans>  

很简单,配置一个扫描包,就是扫描这个包下面的所有java类,如果需要spring来动态生成这个类,就给class加一个标签,这个后面会贴出来。再配置一个自动注解。数据源不用多说,配置持久化工厂,就是告诉spring要用哪种持久化方式,这里配置的是mybatis。最底下配置一个mybatis的sqlTemplate,用来进行持久化操作。这就是spring中所有的东西。因为是基于注解的,所以不用一个一个地配置bean,是不是很简单?

我们现在看看mybatis的配置:

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<typeAliases>
		<typeAlias type="com.test.vo.EmpVo" alias="EmpVo" />
	</typeAliases>
	<mappers>
		<mapper resource="mybatis/mapper/empMapper.xml" />
	</mappers>
</configuration>
这个是mybatis的总配置,配置对应VO类的别名,还有具体mapper文件存放的位置。我们看看empMapper.xml


<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="EmpVo">
	<select id="getEmpList" resultType="EmpVo">
		select empNo,eName,job from
		Emp2
	</select>
	
	<insert id="addEmp" parameterType="EmpVo">
	 insert into emp2 values(#{empNo},#{eName},#{job})
	</insert>
	
	<delete id="delEmpById" parameterType="EmpVo">
	delete from emp2 where empNo=#{empNo}
	</delete>
</mapper>

呵呵,SQL语句,这里注意id是唯一的,resultType是具体类,就是说查出来的字段应该和你的VO一一对应,当然也可以是系统类,int,string,都可以。但是这样不能满足复杂的查询,所以更多情况下我们使用resultMap,resultMap具体配置可以自行google或度娘 奋斗


整个spring和持久化层的东西就搞完了,我们现在继续回到web.xml。

<!-- 字符集过滤器 -->  
	<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>
这个是过滤器,和springMVC没什么关系,主要功能是将所有请求的编码格式改成UTF-8格式。


继续往下看:

<!-- servlet控制跳转 -->  
    <servlet>  
        <servlet-name>spring</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <!-- 配置文件 -->  
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:springMVC/context-dispatcher.xml</param-value>  
        </init-param>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>spring</servlet-name>  
        <url-pattern>*.do</url-pattern>  
    </servlet-mapping>
这是配置MVC的部分,其实无论是SpringMVC还是structs,其实都是把servlet封装了,所以这里其实就是配置servlet。将带有后缀名为.do的http请求拦截(dispatch),然后根据配置去解析相应的请求。我们看看这个文件:
<beans default-lazy-init="true"  
    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-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/context  
       http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
  
    <!-- 通过注解,把URL映射到Controller上,该标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->  
    <mvc:annotation-driven />  
    <!-- 使用注解的包,包括子集 -->  
    <context:component-scan base-package="com.samsung.controller" />  
    <!-- 视图解析器 -->  
    <bean id="viewResolver"  
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="viewClass"  
            value="org.springframework.web.servlet.view.JstlView" />  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp"></property>  
    </bean>  
</beans> 
同样也是简单到爆啊有木有,加注解,加扫包,配置视图解析,视图解析的作用就是加前后缀,直接读文件。

整个springMVC的框架就搭好了,不到100行的Xml。当然,事务处理神马的没有加,最基本的东西已经配置好了,就可以用了。
总结一下:

web.xml是web程序入口,关于SpringMVC需要配置的有:配置Spring的文件位置,Spring监听器,MVC也就是servlet的配置;

spring文件中需要配置的有:扫包,自动注解,数据源,数据源工厂(在这里配置你的持久化方式),还有进行持久化操作的sqlTemplate;

mybatis配置的有:别名,mapper文件存放的位置,mapper文件配置具体的sql语句;

mvc的配置有:扫包,自动注解,视图解析。

下面附上代码结构和代码:

Controller

@Controller
public class TestController {

	@Autowired
	private ITestSVC testSVC;

	@RequestMapping(value = "/list.do")
	public String select(HttpServletRequest request, Model model) {
		List<EmpVo> emps = testSVC.findAll();
		model.addAttribute("emps", emps);
		System.out.println(emps.size());
		return "list";
	}
	
	@RequestMapping(value = "/toAdd.do")
		public String toAdd(HttpServletRequest request, Model model) {
			return "add";

		}
	@RequestMapping(value = "/add.do")
	public String add(HttpServletRequest request, Model model) {
		EmpVo empVo = new EmpVo();
		empVo.setEmpNo(request.getParameter("empNo"));
		empVo.seteName(request.getParameter("eName"));
		empVo.setJob(request.getParameter("job"));
		testSVC.add(empVo);
		return "redirect:/list.do";

	}
	
	@RequestMapping(value = "/del.do")
	public String delEmp(HttpServletRequest request, Model model) {
		EmpVo empVo = new EmpVo();
		empVo.setEmpNo(request.getParameter("empNo"));
		testSVC.delete(empVo);
		return "redirect:/list.do";

	}
	
}

ITestDao
public interface ITestDao {

	public void add(EmpVo emp);

	public void delete(EmpVo emp);

	public List<EmpVo> findAll();

	public void update(EmpVo emp);

	public EmpVo findOne(String id);
}

TestDaoImpl

@Repository
public class TestDao implements ITestDao {

	@Autowired
	private SqlSessionTemplate sqlTemplate;

	@Override
	public void add(EmpVo emp) {
		sqlTemplate.insert("addEmp", emp);
	}

	@Override
	public void delete(EmpVo emp) {
		sqlTemplate.delete("delEmpById", emp);
	}

	@Override
	public List<EmpVo> findAll() {
		List<EmpVo> list = new ArrayList<EmpVo>();
		list = sqlTemplate.selectList("getEmpList");

		return list;
	}

	@Override
	public void update(EmpVo emp) {

	}

	@Override
	public EmpVo findOne(String id) {
		return null;
	}

ITestSVC

public interface ITestSVC {
	public void add(EmpVo emp);

	public void delete(EmpVo emp);

	public List<EmpVo> findAll();

	public void update(EmpVo emp);

}


TestSVCImpl

@Repository
public class TestSVCImpl implements ITestSVC {
	
	@Autowired
	private ITestDao testDao;

	@Override
	public void add(EmpVo emp) {
		testDao.add(emp);

	}

	@Override
	public void delete(EmpVo emp) {
		testDao.delete(emp);
	}

	@Override
	public List<EmpVo> findAll() {
		return testDao.findAll();
	}

	@Override
	public void update(EmpVo emp) {
		testDao.update(emp);
	}

}

EmpVo

public class EmpVo {

	private String empNo;
	private String eName;
	private String job;

	public EmpVo() {

	}

	public EmpVo(String empNo, String eName, String job) {
		super();
		this.empNo = empNo;
		this.eName = eName;
		this.job = job;
	}


	public String getEmpNo() {
		return empNo;
	}

	public void setEmpNo(String empNo) {
		this.empNo = empNo;
	}

	public String geteName() {
		return eName;
	}

	public void seteName(String eName) {
		this.eName = eName;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}
}



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值