使用Mybatis 在IDEA中的操作

15 篇文章 0 订阅
2 篇文章 0 订阅

1.常用快捷键

2.IDEA连接数据库

在这里插入图片描述

jdbc:mysql://localhost:3306/yang?serverTimezone=GMT

3. Free-MyBatis-plugin

**Dao.java 上写新的方法后,Ctrl + 点击可以直接跳转到 **Dao.xml 中,并生成对应的代码

4.EasyCode

下载相应的插件,然后在对应的右键 -> Easy Code -> Generate Code, 可直接生成 entity,dao, service和controller层对应代码

在这里插入图片描述

5. 自动生成数据库表对应的实体类以及配置文件

首先需要已经连接数据库,
然后在对应的右键 -> mybatis-generator,
选择对应实体类、Dao.java 和 Dao.xml 的路径
在这里插入图片描述
在这里插入图片描述

6. 导入lombok jar包,在实体类使用@Data,从而取消get,set,toString方法

pom.xml

 <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
        </dependency>

实体类

@Data
public class Dept implements Serializable {
    private Integer deptno;

    private String dname;

    private String loc;

    private static final long serialVersionUID = 1L;
}

7. 自动生成测试类

光标移动到 **Dao.java 类名上,
然后 右键 -> generater -> Test

选择需要进行测试的方法

在这里插入图片描述
在这里插入图片描述

8. 多个条件查询

  1. 使用注解的方式(推荐使用)

**Dao.java

List<Dept> findByDeptNameAndLoc(@Param("name") String name, @Param("loc") String loc);

****Dao.xml

<select id="findByDeptNameAndLoc" resultType="com.zzu.entity.Dept">
        select * from dept where dname=#{name} and loc=#{loc}
  </select>
  1. 使用内置变量 param1,param2的方式

  2. 使用内置变量 arg0, arg1的方式

  3. 使用Map封装变量

9. resultType与resultMap

 <resultMap id="BaseResultMap" type="com.zzu.entity.Dept">
    <id column="deptno" jdbcType="INTEGER" property="deptno" />
    <result column="dname" jdbcType="VARCHAR" property="dname" />
    <result column="loc" jdbcType="VARCHAR" property="loc" />
  </resultMap>

10. 一对一,一对多

1. 一对一,assocation

	<!--一个emp对应一个dept-->
  <resultMap id="EmpDeptMap" type="com.zzu.entity.Emp" autoMapping="true">
  	 <!--emp的主键-->
    <id property="empno" column="empno"/>
    <!--emp的外键,需要再resultMap中进行映射说明, 不然的话即使autoMapping="true"(自动映射为true),仍然会查不到该外键-->
    <result property="deptno" column="deptno"/> 

	<!--dept: Emp.java中的dept, deptno:emp的外键,dept的主键-->
    <association property="dept" javaType="com.zzu.entity.Dept" column="deptno" autoMapping="true">
    <!--映射内容最好写全-->
      <id column="deptno" property="deptno"/>
      <result column="dname" property="dname"/>
      <result column="loc" property="loc"/>
    </association>
  </resultMap>
  <select id="findAllEmp" resultMap="EmpDeptMap">
    select e.*, d.*
    from emp e left join dept d on e.deptno = d.deptno
  </select>
  <select id="findAllEmp2" resultMap="EmpDeptMap">
    select e.*, d.*
    from emp e, dept d 
    where e.deptno = d.deptno
  </select>

2. 一对多,collection

	
	<!--一个dept对应多个emp-->
  <resultMap id="deptEmpMap" type="com.zzu.entity.Dept" autoMapping="true">
    <id property="deptno" column="deptno"></id>
    
    <collection property="emps" ofType="com.zzu.entity.Emp" autoMapping="true">
      <id property="empno" column="empno"/>
    </collection>
  </resultMap>
  
  <select id="findAllDeptEmp" resultMap="deptEmpMap">
    select d.*, e.*
    from dept d inner join emp e on d.deptno = e.deptno
  </select>

11. 动态查询

1. <if>

<select id="findByDeptNameAndLoc" resultMap="BaseResultMap">
        select *
        from dept
        where 1=1
        <!--name 为 java方法中的参数 (@Param String name)-->
        <if test="name!='' and name!=null">
          and dname=#{name}
        </if>

        <if test="loc!='' and loc!=null">
          and loc=#{loc}
        </if>

  </select>

2. <when> <otherwise>

对应java中的 switch

3. <where>

12. 批量操作

for each 批量操作

**Dao.java

 int addDeptBatch(@Param("depts") List<Dept> depts);

 int deleteDeptBatch(@Param("ids") List<Integer> ids);

**Dao.xml

  <!--批量删除-->
  <delete id="deleteDeptBatch">
    delete from dept where deptno in
    <foreach collection="ids" separator="," open="(" close=")" item="id">
        #{id}
    </foreach>
  </delete>
  <!--批量添加-->
    <insert id="addDeptBatch" keyProperty="deptno" useGeneratedKeys="true">
    insert into dept(dname, loc) values
    <foreach collection="depts" item="dept" separator=",">
      (#{dept.dname}, #{dept.loc})
    </foreach>

  </insert>

对应查询语句:
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值