前面我写过ssh:ssh(Spring+Spring mvc+hibernate)简单增删改查案例 和ssm:ssm(Spring+Spring mvc+mybatis)的案例,需要了解的可以去看看,今天我写了一下ssm(spring+springmvc+mybatis)全注解的方式又重新写了一遍两表增删改查的案例,其中别的地方都一样,就是有几个文件不一样,
1.其中:
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> <settings> <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING" /> </settings> <typeAliases> <typeAlias alias="Emp" type="org.entity.Emp"/> <typeAlias alias="Dept" type="org.entity.Dept"/> </typeAliases> <mappers> <mapper class="org.dao.IEmpMapper"/> <mapper class="org.dao.IDeptMapper"/> </mappers> </configuration>
注意看, ,mapper后面是class,不是resource,一定要注意
2.还有:我们不需要EmpMapper.xml和DeptMapper.xml文件,直接删掉就可以了
3.修改我们的IEmpMapper接口为:
package org.dao; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.entity.Emp; public interface IEmpMapper { //根据编号删除. @Delete("delete from emp where eid = #{eid} ") int deleteByPrimaryKey(Integer eid); //添加 @Insert("insert into emp (eid, ename, eage, edate, did) " + "values (#{eid,jdbcType=INTEGER}," + " #{ename,jdbcType=VARCHAR}, " + "#{eage,jdbcType=INTEGER}, " + "#{edate,jdbcType=TIMESTAMP}," + " #{did,jdbcType=INTEGER})") int insert(Emp record); //根据编号查询 @Select("select * from emp where eid = #{eid}") @Results({ @Result(id=true,property="eid",column="eid"), @Result(property="ename",column="ename"), @Result(property="eage",column="eage"), @Result(property="dept",column="did",javaType=org.entity.Dept.class, one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey")) }) Emp selectByPrimaryKey(Integer eid); //修改 @Update("pdate emp " + " set ename = #{ename,jdbcType=VARCHAR}, " + " eage = #{eage,jdbcType=INTEGER}, " + " edate = #{edate,jdbcType=TIMESTAMP}, " + " did = #{did,jdbcType=INTEGER} " + "where eid = #{eid,jdbcType=INTEGER}") int updateByPrimaryKey(Emp record); //查询全部 @Select("select * from emp") @Results({ @Result(id=true,property="eid",column="eid"), @Result(property="ename",column="ename"), @Result(property="eage",column="eage"), @Result(property="dept",column="did",javaType=org.entity.Dept.class, one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey")) }) List<Emp> findEmpAll(); //根据部门编号查询员工信息 @Select("select * from emp where did = #{dids}") @Results({ @Result(id=true,property="eid",column="eid"), @Result(property="ename",column="ename"), @Result(property="eage",column="eage"), @Result(property="dept",column="did",javaType=org.entity.Dept.class, one=@One(select="org.dao.IDeptMapper.selectByPrimaryKey")) }) List<Emp> findEmpByDept(int did); }
4.修改我们的IDeptMapper接口为:
package org.dao; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Many; import org.apache.ibatis.annotations.Result; import org.apache.ibatis.annotations.Results; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import org.entity.Dept; public interface IDeptMapper { @Delete("delete from dept where id = #{id}") int deleteByPrimaryKey(Integer id); @Insert("insert into dept (id, name, loc )" + " values (#{id,jdbcType=INTEGER}, " + "#{name,jdbcType=VARCHAR}, " + "#{loc,jdbcType=VARCHAR})") int insert(Dept record); @Select("select * from dept where id = #{id}") @Results({ @Result(id=true,property="id",column="id"), @Result(property="name",column="name"), @Result(property="loc",column="loc"), @Result(property="empList",column="id",javaType=List.class, many=@Many(select="org.dao.IEmpMapper.findEmpByDept")) }) Dept selectByPrimaryKey(Integer id); @Update("update dept " + "set name = #{name,jdbcType=VARCHAR}, " + " loc = #{loc,jdbcType=VARCHAR} " + "where id = #{id,jdbcType=INTEGER}") int updateByPrimaryKey(Dept record); @Select("select * from dept") List<Dept> findDeptAll(); }
然后就可以正常的主外键关联,包括查询显示,如图:
需要注意的是主外键映射,我总结了以下的方法,大家可以进行看一下:
一: @Select("select * from dept where id = #{id}") @Results({ @Result(id=true,property="id",column="id"), @Result(property="name",column="name"), @Result(property="loc",column="loc"), @Result(property="实体类里面的属性", column="id",javaType=List.class, many=@Many(select="多方的接口.根据一方的编号查询多方的集合")) }) Dept selectByPrimaryKey(Integer id); 多: //根据编号查询 @Select("select * from emp where eid = #{eid}") @Results({ @Result(id=true,property="eid",column="eid"), @Result(property="ename",column="ename"), @Result(property="eage",column="eage"), @Result(property="实体中的对象",column="外键列",javaType=一方类.class, one=@One(select="一方接口.根据一方编号查询信息")) }) Emp selectByPrimaryKey(Integer eid); //查询全部 @Select("select * from emp") @Results({ @Result(id=true,property="eid",column="eid"), @Result(property="ename",column="ename"), @Result(property="eage",column="eage"), @Result(property="实体中的对象",column="外键列",javaType=一方类.class, one=@One(select="一方接口.根据一方编号查询信息")) }) List<Emp> findEmpAll(); //根据部门编号查询员工信息 @Select("select * from emp where did = #{dids}") @Results({ @Result(id=true,property="eid",column="eid"), @Result(property="ename",column="ename"), @Result(property="eage",column="eage"), @Result(property="实体中的对象",column="外键列",javaType=一方类.class, one=@One(select="一方接口.根据一方编号查询信息")) }) List<Emp> findEmpByDept(int did);
按照这个方法配置保证阿弥陀佛了!!!
下面就是源码:
控制器:
Dao层:
DaoImpl层:
实体类层:
Service层:
ServiceImpl层:
配置文件:
applicationContext-servlet.xml
前台页面: