mybatis使用全注解的方式案例(包含一对多关系映射)

简介: mybatis使用全注解的方式案例(包含一对多关系映射)

前面我写过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);

按照这个方法配置保证阿弥陀佛了!!!

下面就是源码:

控制器:

DeptController

EmpController

Dao层:

IDeptMapper

IEmpMapper

DaoImpl层:

DeptMapperImpl

EmpMapperImpl

实体类层:

Dept

Emp

Service层:

IDeptService

IEmpService

ServiceImpl层:

DeptServiceImpl

EmpServiceImpl

配置文件:

applicationContext-servlet.xml

applicationContext.xml

mybatis-config.xml

web.xml

前台页面:

index.jsp

saveDept.jsp

saveEmp.jsp

showDept.jsp

showEmp.jsp

updateDept.jsp

updateEmp.jsp


目录
相关文章
|
11天前
|
SQL XML Java
【mybatis】第二篇:@Select注解中加入字段判断
【mybatis】第二篇:@Select注解中加入字段判断
|
11天前
|
SQL 缓存 Java
mybatis 一对多查询
mybatis 一对多查询
28 0
|
11天前
|
Java 数据库连接 mybatis
mybatis的一对多
mybatis的一对多
|
11天前
|
存储 关系型数据库 MySQL
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
【mybatis-plus】Springboot+AOP+自定义注解实现多数据源操作(数据源信息存在数据库)
|
11天前
|
存储 XML Java
mybatis使用内部类处理一对多类型数据2
mybatis使用内部类处理一对多类型数据2
16 0
|
11天前
|
Java 数据库连接 mybatis
mybatis plus字段为null或空字符串把原来的数据也更新了,只需要注解
mybatis plus字段为null或空字符串把原来的数据也更新了,只需要注解
26 0
|
11天前
|
XML SQL Java
mybatis的一对多,多对一,以及多对对的配置和使用
mybatis的一对多,多对一,以及多对对的配置和使用
18 2
|
11天前
|
SQL Java 数据库连接
挺详细的spring+springmvc+mybatis配置整合|含源代码
挺详细的spring+springmvc+mybatis配置整合|含源代码
109 1
|
9天前
|
算法 Java 数据库连接
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
Spring+MySQL+数据结构+集合,Alibaba珍藏版mybatis手写文档
|
1天前
|
Java 关系型数据库 数据库连接
MyBatis-Plus介绍及Spring Boot 3集成指南
MyBatis-Plus是一个MyBatis扩展工具,旨在简化Java开发中的CRUD操作。它具有无侵入性、低损耗、强大的CRUD功能、Lambda表达式支持、主键自动生成、ActiveRecord模式、全局操作和内置代码生成器等特点。在Spring Boot 3中集成MyBatis-Plus,需在pom.xml添加依赖,排除特定版本的mybatis-spring,并用@MapperScan注解指定Mapper接口路径。此外,还介绍了如何使用MyBatis-Plus代码生成器自动生成Mapper、Model、Service和Controller层代码,以加速开发。
34 2
MyBatis-Plus介绍及Spring Boot 3集成指南