当尝试使用Spring+SpingMVC+MyBatis框架实现三层架构,出现了一些没有预想到的异常,所幸最终完美解决。
一、这是我所使用的文件结构:
具体的三层架构解释及理解可以参考这篇博客:点击跳转。理解为主,我没有完全按照他的写法来设计结构。
二、各个类的主要代码:
1.model:Menu.java
package com.diecolor.model;
public class Menu {
private Integer id;
private String name;
private Integer pre_level_id;
private String url;
private String tab_name;
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 == null ? null : name.trim();
}
public Integer getPre_level_id() {
return pre_level_id;
}
public void setPre_level_id(Integer pre_level_id) {
this.pre_level_id = pre_level_id;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url == null ? null : url.trim();
}
public String getTab_name() {
return tab_name;
}
public void setTab_name(String tab_name) {
this.tab_name = tab_name == null ? null : tab_name.trim();
}
}
2.mapper(dao):MenuMapper.xml+MenuMapper.java(我把这两个放到了一个package下)
<?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.diecolor.mapper.MenuMapper" >
<resultMap id="BaseResultMap" type="com.diecolor.model.Menu" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="pre_level_id" property="pre_level_id" jdbcType="INTEGER" />
<result column="url" property="url" jdbcType="VARCHAR" />
<result column="tab_name" property="tab_name" jdbcType="VARCHAR" />
<result column="level" property="level" jdbcType="INTEGER" />
</resultMap>
<sql id="Base_Column_List" >
id, name, pre_level_id, url, tab_name,level
</sql>
<select id="selectAllLevel" resultType="java.util.Map" >
SELECT
m.id,
m. name,
m.pre_level_id,
(SELECT name FROM menu WHERE m.pre_level_id=id) pre_level_name,
m.url,
m.tab_name,
m.level
FROM
menu m
</select>
<select id="selectByPreLevelId" resultType="java.util.Map" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from menu
where pre_level_id = #{pre_level_id,jdbcType=INTEGER}
</select>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from menu
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPreLevelId" parameterType="java.lang.Integer" >
delete from menu
where pre_level_id = #{pre_level_id,jdbcType=INTEGER}
</delete>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
delete from menu
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" parameterType="com.diecolor.model.Menu" >
insert into menu (id, name, pre_level_id,
url, tab_name)
values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{pre_level_id,jdbcType=INTEGER},
#{url,jdbcType=VARCHAR}, #{tab_name,jdbcType=VARCHAR})
</insert>
<insert id="insertSelective" parameterType="com.diecolor.model.Menu" >
insert into menu
<trim prefix="(" suffix=")" suffixOverrides="," >
<if test="id != null" >
id,
</if>
<if test="name != null" >
name,
</if>
<