map比vo效率 mybatis_mybatis框架

本文介绍了Mybatis框架的三层架构,包括视图层、业务逻辑层和数据访问层,以及各层对应的包和处理框架。重点解析了Mybatis作为SQL映射框架的角色,如何简化数据库操作,如自动处理Connection、Statement和ResultSet,以及动态代理和参数传递方式。同时,对比了#和$占位符的使用区别,讨论了返回结果类型,包括resultType和resultMap的配置。
摘要由CSDN通过智能技术生成

1.三层架构:

1.视图层:主要功能是接受用户的数据,显示请求的处理结果,使用web页面和用户交互;可以理解为(JSP,HTML,servlet等等...)

2.业务逻辑层:接收表示传递过来的数据,进行业务逻辑,调用数据访问层获取数据

3.数据访问层:就是访问数据库

2.三层对应的包

1.视图层:controller(servlet)

2.业务逻辑层:service包(XXXService类)

3.数据访问层:dao包(XXXDao类)

3.三层中类的交互

用户使用界面层--》业务逻辑层--》数据访问层--》数据库(MySQL)

4.三层对应的处理框架

界面层--servlet--springmvc(框架)

业务逻辑层--service列--spring(框架)

数据访问层--dao类--mybatis(框架)

5.框架

1.框架是一个舞台,一个模板,规定了一些条款和内容,可以加入自己的东西

2.框架是一个半成品的软件,定义好了一些基础功能,需要加入你的功能才完整,基础功能是可重复利用的,可升级的

3.特点;1)框架一般不是全能的,不能做所有事情 2)是针对某一个领域,特长是在某一个方面,比如mybatis做数据库操作厉害,但是不能做其他的; 3)是一个软件

6.mybatis的定义:

一个框架,早期叫ibatis,代码在GitHub,mybatis是mybatis SQL Framework forJava(sql映射框架)

1)sql mapper:sql映射--》可以把数据库表中一行数据,映射为一个Java对象,一行数据可以看作是一个Java对象,操作这个对象,就相当于操作表中的数据

2)data Access Object(数据访问)--》对数据库执行增删改查

7.mybatis提供的功能;

1.提供了创建Connection,Statement,ResultSet的能力,不用开发人员创建

2.提供了执行sql语句的能力,不用你执行

3.提供了循环sql,把sql的结果转为Java对象,list集合的能力

4.提供了关闭资源的能力

8.开发人员做的事情;提供sql语句

最后是:开发人员提供sql语句--》mybatis处理sql--.开发人员得到list集合或Java对象(表中的数据)

9.总结:mybatis是一个sql映射框架,提供的数据库的操作能力,增强的jdbc,使用mybatis让开发人员集中精力写sql就行,不必关心connection,statement...等等的创建,烧毁等等;

10.动态代理:使用SqlSession.getMapper(dao接口.class)获取这个接口的对象

11.传入参数;从Java代码中传入到mapper文件的sql语句中。

1.parameterType;写在mapper文件中的一个属性,表示dao接口中方法的参数的数据类型

例如;StudentDao接口中;

public Student selectStudentById(Integer id)

12.在mybatis中获取简单类型的参数的值:#{占位字符}

简单类型:mybatis把Java的基本数据类型和String都叫做简单类型;

例如:在接口中;public Student selectStudentById(Integer id);

在mapper中;select id,name,email,age from student where id=#{id}

原理;使用#{占位字符}后,mybatis使用sql是使用jdbc中的PreparedStatement对象

1.mybatis创建connection对象,PreparedStatement对象

String sql=........;

PreparedStatement pst=conn.PreparedStatement();....

执行sql封装成resultType="com.bjpowernode.entity.Student"指定的类型;

13.多个参数的传递方法一;

在dao接口中 public List selectMultipleParam(@Param("myname")String name, @Param("myage")Integer age);

在mapper文件中  select id,name,email,age from student where name=#{myname} or age=#{myage}

多个参数传递方法二;使用Java对象 语法;#{参数名,javaType=全限定名称,jdbcType=全限定名称}  或者#{参数名}

1.创建一个存储数据的类,

2.类中的属性名和我们要传递的参数名对应

3.在dao接口中只要传递这个类的对象

4.在mapper文件中,参数名对应这个类的属性名;

多个参数传递方法三;使用参数的位置   语法:在mybatis3.4之前,使用#{0},#{1}和表示第一个和第二个参数

在mybatis3.4以后,使用#{arg0},#{arg1}表示;

在接口中;public List selectMultiplePosition(String name,Integer age);

在mapper中; select id,name,email,age from student where name=#{0} or age=#{1}

14.包的区别

vo;value object,放一些存储数据的类,比如说:提交请求参数,name,age,现在想把name,age传给一个service类。

projo:普通的有set  get方法的Java类,普通的Java对象

entity(domain);实体类,和数据库中的表对应的类;

15.占位符的区别

#;告诉mybatis使用实际的参数值代替,并使用preparedStatement执行sql语句,#{...}代替的是sql的?

优点是避免了sql注入,安全,效率高;

select id,name,email,age from student where name=#{0} or age=#{1}

执行后的代码:select id,name,email,age from student where name=? or age=?

$;可以替换表名或者列名,确认数据是安全,可以使用$,不使用占位符,是字符串连接的方式;使用的是Statement对象执行sql,效率比上面低,安全性不高;

select id,name,email,age from student where id=${id}

执行后的代码;select id,name,email,age from student where id=1002

16.mybatis的输出结果:mybatis执行sql语句得到的Java对象

1.resultType结果类型:只sql语句执行完后,数据转为的Java对象

处理方式;1.mybatis执行完sql语句,然后mybatis调用类的无参构造方法创建对象

2.mybatis会把resultSet指定列值赋给同名属性

3.resultType中填写mybatis执行sql返回的类型,可以是全限定名称(最好用,建议用),还可以是别名

例如:resultType("java.lang.Ingeter") 或者resultType("int")

17.设置自定义类型的别名;

方式一:在mybatis的主配置文件中,

方式二:

  意思为在这个包下所有类的别名都是类名;

18.返回map类型

1.列名是map的key,列值是map的value

2.只能返回一行数据,否则报错

例如:在mapper文件中   select id,name,email,age from student where id=#{id}

执行结果  map==={name=lisi, id=1001, [email protected], age=20}

resultMap:结果映射  指定列名和Java对象的属性对应关系

1.你自定义列值赋值给哪个属性

2.当你的列名和属性名不一样时,一定要使用resultMap来指定

3.resultType和resultMap不要一起用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值