首页 > 技术文章 > Spring+MyBatis+SpringMVC整合

easyjie 2019-12-10 20:53 原文

主要的结构

 

 先配置web.xml文件

<!-- 配置初始化参数,用于读取 spring的配置文件 -->   
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener> 
  <!-- 配置 spring mvc 的核心控制器 -->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 配置初始化参数,用于读取 springmvc 的配置文件 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!-- 配置 servlet 的对象的创建时间点:应用加载时创建。取值只能是非 0 正整数,表示启动顺序 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置 springMVC 编码过滤器 -->
<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>
<!-- 启动过滤器 -->
 <init-param>
<param-name>encoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 过滤所有请求 -->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  配置applicationContext.xml文件

<!--开启注解的扫描,希望处理service和dao,controller不需要Spring框架去处理-->
    <context:component-scan base-package="cn.itcast.service,cn.itcast.dao"/>
 
    <!--Spring整合MyBatis框架-->
    <!--配置连接池-->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql:///ssm"/>
        <property name="user" value="root"/>
        <property name="password" value="root"/>
    </bean>

    <!--配置SqlSessionFactory工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="configLocation" value="classpath:SqlMapConfig.xml"></property>
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!--配置AccountDao接口所在包-->
    <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.itcast.dao"/>
    </bean>

  配置springmvc.xml文件

    <!--开启注解扫描,只扫描Controller注解-->
    <context:component-scan base-package="cn.itcast.controller"/>
    <!--开启SpringMVC注解的支持-->
    <mvc:annotation-driven/>

    <!--配置的视图解析器对象-->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

  AccountController.java

@Controller
public class AccountController {
	@Autowired
	private AccountService accountService;

	@RequestMapping("/findAll")
	public String findAll(Model model) {
		System.out.println("表现层:查询所有账户...");
		// 调用service的方法
		List<Account> list = accountService.findAll();
		model.addAttribute("list", list);
		return "list";
	}

	/**
	 * 保存
	 * 
	 * @return
	 */
	@RequestMapping("/save")
	public void save(Account account, HttpServletRequest request, HttpServletResponse response) throws IOException {
		accountService.saveAccount(account);
		response.sendRedirect(request.getContextPath() + "/findAll");
		return;
	}

}

  AccountDao.java

/**
 * 帐户dao接口
 */
@Repository
public interface AccountDao {

	// 查询所有账户
	@Select("select * from account")
	public List<Account> findAll();

	// 保存帐户信息
	@Insert("insert into account (name,money) values (#{name},#{money})")
	public void saveAccount(Account account);

}

  Account.java

package cn.itcast.domain;

import java.io.Serializable;

/**
 * 帐户
 */
public class Account implements Serializable {

	private Integer id;
	private String name;
	private Double money;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Double getMoney() {
		return money;
	}

	public void setMoney(Double money) {
		this.money = money;
	}

	@Override
	public String toString() {
		return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}';
	}
}

  AccountServiceImpl.java

@Service("accountService")
public class AccountServiceImpl implements AccountService {

	@Autowired
	private AccountDao accountDao;

	public List<Account> findAll() {
		System.out.println("业务层:查询所有账户...");
		return accountDao.findAll();
	}

	public void saveAccount(Account account) {
		System.out.println("业务层:保存帐户...");
		accountDao.saveAccount(account);
	}
}

  前端

<a href="findAll">测试查询</a>

    <h3>测试包</h3>

    <form action="save" method="post">
        姓名:<input type="text" name="name" /><br/>
        金额:<input type="text" name="money" /><br/>
        <input type="submit" value="保存"/><br/>
    </form>

  主要是在配置上面多去注意注意,其他的都很简单

推荐阅读