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

JAVA EE项目:(2)Mybatis映射器,第1张

JAVA EE项目:(2)Mybatis映射器 一、映射器:

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

二、实现方式:

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

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

三、注解实现映射器 ①创建与表对应的实体类

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

规则:

        1)实体类名对应表名

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

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

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

        idea右侧选中数据库,在d出的工具栏中,新建→数据源→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()方法设置对象的值。

③创建java接口文件

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

 ④生成并编写测试类

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

注:

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

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

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

        运行结果:

 

 四、XML文件实现映射器 ①实体类与注解映射器一样(不过目录名从entity改为po) ②java接口文件中不需要写注解,只需要写方法(多了@Repository)

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

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

 ④编写xml文件

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


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

- 标签

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

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

- 常见标签

        (后面3个没有resultType属性)

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

- 常见属性

        ①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。因为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。

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

        

具体写法自查

③注:

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

        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中编写映射关系,配置列与类中的属性的对应关系,使用标签


    (主键)
    
    ....................

    
    
        
        
    

        4)编写select节点

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

八、MybatisX(下载方法自查)

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

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

 九、分页插件

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5686024.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存