JAVA EE项目:(3)Mybatis映射器

目录

一、映射器:

二、实现方式:

三、注解实现映射器

①创建与表对应的实体类

②生成公共访问方法

③创建java接口文件

 ④生成并编写测试类

 四、XML文件实现映射器

①实体类与注解映射器一样(不过目录名从entity改为po)

②java接口文件中不需要写注解,只需要写方法(多了@Repository)

③创建xml文件目录并配置路径

 ④编写xml文件

五、DTO

六、动态SQL

七、关联映射

八、MybatisX(下载方法自查)

 九、分页插件


一、映射器:

        Mybatis的核心组件,在其中可以配置各类SQL语句和动态SQL、缓存、级联等内容

二、实现方式:

        ①java接口(interface)+注解(简单SQL)

        ②java接口(interface)+XML文件(简单和复杂SQL都可)

        推荐使用java接口+xml文件方式实现映射器

三、注解实现映射器

①创建与表对应的实体类

        src→java→com.xxx下创建文件类entity,在entity中创建java类

规则:

        1)实体类名对应表名

        2)类中的属性名与表中的列一致

        3)属性数据类型与列的数据类型匹配

注:使用idea数据库链接工具来生成实体类

        idea右侧选中数据库,在弹出的工具栏中,新建→数据源→MYSQL→设置驱动程序、host、port、用户名、密码、数据库名→测试连接→成功后点击应用并确认(设置完数据源后,如果找不到想要的数据库,点击旁边的1of10添加

    

        在数据库工具栏中选中想要生成的表→右键→脚本扩展→转到脚本目录→左侧项目结构中找到Generate POJOs grovy→将G。。文件中的packageName属性值改为实体类文件的目录的路径→回到脚本扩展中选择Generate POJOs groovy→选中实体类目录→确认

②生成公共访问方法

        右键→Generate→Getter and Setter→选中要生成方法的属性

        作用:因为数据库结构要保密,对应的实体类属性为私有属性无法直接访问,所以要提供公共的访问方式。通过公共访问方法可以设置或者获取pojo中的值,比如使用mapper方法从数据库取出News实体类的pojo对象然后使用getTitle()或者getDate()方法获取值或者像下面的test类那样创建News实体对象然后使用setTitle()和getDate()方法设置对象的值。

package com.example.demo3.entity;


public class News {
    private String title;
    private String date;
    private String content;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

}

③创建java接口文件

        在entity同级目录下创建mapper,并在mapper中新建接口类(interface),添加方法和注解

 ④生成并编写测试类

        方法:在mapper接口文件中用鼠标选中目标方法,按下ctrl+shift+T或者选中public interface xxx然后在左侧的黄灯泡中选择创建测试→选择你想要生成测试的方法

注:

        ①生成的文件在src→test→java→com.xxx→mapper下

        ②不能在src目录中使用@Test来创建test类

         生成后,编写测试类,并运行方法(save())

        运行结果:

 

 四、XML文件实现映射器

注意:mapper是接口文件,xml放在resources中,application.properties中设置映射文件目录

①实体类与注解映射器一样(不过目录名从entity改为po

②java接口文件中不需要写注解,只需要写方法(多了@Repository)

package com.example.demo3.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Repository  //将数据访问层(DAO)层的类标识为 Spring Bean,
            // 如果在mybatis-config的xml文件中配置过base-package 了就可以不写这个
@Mapper
public interface NewsMapper {
    String getnews(String title);
}

③创建xml文件目录并配置路径

在resources中创建mappers文件夹→在application.properties中设置映射文件目录

 ④编写xml文件

 1)先添加规范(固定内容)

<?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">

2)接口中方法的具体实现(举例)

- <mapper>标签

        ①namespace:写要绑定的mapper接口的全路径名称,这样mybatis会自动将你的mapper接口文件和xml文件连起来

        ②在<mapper>标签中写接口文件中的方法的具体实现

- 常见标签

        <select>、<updata>、<delete>、<insert>

        标签中可以直接使用SQL语句(因此可以先在数据库可视化软件中编写可执行的SQL语句,然后直接复制到标签中)

注:在MyBatis中insert、update、delete语句的返回值可以是Integer、Long和Boolean。是在接口文件中写,不要再xml中写

- 常见属性

        ①id:此段SQL执行语句对应的接口方法名称

        ②parameterType:接口方法传入的参数类型

        ③resultType:接口方法定义的返回值参数类型

        注:parameterType和resultType的参数类型:

        ⑴基本类型:int、Integer、double、String等

        ⑵pojo对象(实体类对象):例如:para...="com.xxx.entity.News"

        ⑶Map类型

        (4)数据有很多条时。比如:从数据库中提取很多条数据,返回的结果是list类型时,此时resultType(parameterType)的值仍然写成resu....="com.xxx.entity.News",而不是写成resu...="java.util.List",对应接口方法类型List<News>。因为resultType(parameterType)是集合中的元素类型,而不是集合本身

        (5)多个不同的参数:mybatis parametertype 多个参数

 - #{}和${}:

        相同:都可以接收ParameterType传入的值。例title=#{title},第一个是数据库中的属性,第二个title是传入的参数

        不同:#{}是预编译处理,给传入的数据加个“”

                   ${}是直接替换

                  例:value=001    #{value}="001"   ${value}=001

        注:①${}不能防止sql注入,而#{}能。

                例:select * from user where id = ${value} 若用户传的value是001;drop table user,这

                样就直接把表删了

                ②${}可以用在模糊查询中

                        id like '%${value}%'(%是任意字符,_是一个任意字符)

  - 注:使用mapper接口方式必须满足:
        1.映射文件的namespace的值必须是接口的全路径名称
             比如:com.sxt.dao.UserMapper
        2.接口中的方法名在映射文件中必须有一个和id值对应
        3.映射文件的名称必须与接口的名称一致

五、DTO

①作用:对页面和数据库间传输的数据进行封装,提供定制化服务

②原理:一张表有很多属性,而客户端只对部分属性有要求,因此将数据全部来回传输,即浪费时间和带宽又会暴露表的结构和重要数据(密码等)。而创造一个类(DTO,与PO类似)只封装客户端需要的属性,就可以避免这种问题。

注:

1)每个操作都应该有个DTO,但这样DTO就会爆炸增长,因此开发者一般复用冗余数据可以接受的DTO,而不是建很多DTO。

2)DTO的内容可以和PO相同,但不可以继承PO,他们应该独立

3)PO不可以用来传输,应该建立一个和PO内容相同的DTO

不是严格的企业开发的话,可以降低上述要求,甚至不使用DTO

六、动态SQL

①作用:使用jdbc时,会遇到多条件的情况,比如:查询人可用姓名、id、备注等,当id为空时使用姓名作为查询条件。若使用拼接的SQL语句会非常复杂,因此mybatis提供了动态SQL。

②常用标签(写在<insert>等标签里的标签):

        <if>、<where>、<trim>、<set>、<foreach>、<choose>

具体写法自查

③注:

        1)在xml中,<用&lt;表示,其他不变(>、=)

        2)test=“xxx”中的属性可以直接取值,不需要#{}

        3)判断属性值为空:test="xxx !=null and xxx != ''(双单引号无空格)"

七、关联映射

①作用:用于SQL表中的连接查询

②步骤:(一对一映射,以dept(ename,...,deptno)和emp(deptno,dname,...)为例)

        1)编写表连接的SQL语句

select e.name, d,name
from emp e, dept d
where e.deptno = d.deptno

        2)在DTO中添加关联表的映射对象(从表类创建主表类的对象,外键引用的是主表)

public class Emp{
    emp的属性

    private Dept dept;

    emp的getter and setter
}

        3)xml中编写映射关系,配置列与类中的属性的对应关系,使用<resultMap>标签

<resultMap id="empMap" type="com.xxx.Dto.Emp">
    <id column="empno" property="empno"/>(主键)
    <result column="..." property="..."/>
    ....................

    <!--其他类的属性和列-->
    <association property="dept" javaType="com.xxx.Dto.Dept/">
        <id.....>
        <result...>
    </association>
</resultMap>

        4)编写select节点

<select id="..." resultMap="empMap" para.....>
    ....
</select>

③以上是一对一,一对多类似(类中多加个对象、xml中多写个<asso...>)

八、MybatisX(下载方法自查)

作用:基于 IDEA 的快速开发插件,用于快速制作Mapper映射器。

功能:java接口和xml之间跳转、自动生成xml、检查错误

 九、分页插件

mybatis的插件,使用pom添加依赖

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值