堆栈花园的框架学习备忘录——MyBatis

本文深入解析了三层架构的设计理念,包括界面层、业务逻辑层和数据访问层的功能与交互,以及MyBatis框架如何简化数据库操作,提供SQL映射、DAO支持和资源管理等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、三层架构

  1. 界面层:和用户打交道的,接受用户的请求参数,显示处理结果。(jsp,html,servlet)
  2. 业务逻辑层:接受界面层的数据,计算罗技,调用数据库,获得数据。
  3. 数据访问层:访问数据库,对数据CRUD。
  • 三层架构对应的package:
    界面层:controller(Servlet类)
    业务逻辑层:service(XXXService类)
    数据访问层:dao(XXXDao类)
  • 三层架构的交互:
    (用户使用)界面层——》业务逻辑层——》数据访问层(持久层)——》数据库(MySQL)
  • 三层架构对应的框架
    界面层——servlet类——springmvc(框架)
    业务逻辑层——service类——spring(框架)
    数据访问层——dao类——mybatis(框架)

二、框架

  1. 框架是一个舞台,是一个模板。
    (1)框架中定义好了一些功能,这些功能可以供开发人员使用。
    (2)可以加入自己的功能,这些功能同样也可以利用框架中写好的功能。
  2. 框架的特点:
    (1)框架是一个软件。
    (2)框架一般不是全能的,不能做所有事情。
    (3)框架是针对某一个领域的,特长在某一个方面。

三、mybatis框架

1. Mybatis的功能:
(1)sql mapper(sql映射):
        可以把数据库表中的一行数据,映射为一个java对象。操作这个对象就是操作数据库表中对应的数据。
(2)Data Access Objects(Daos):
        对数据访问,进行CRUD。
(3)提供了创建Connection,Statement,ResultSet的能力,不用开发人员创建这些对象。
(4)提供了执行SQL语句的能力。
(5)提供了循环SQL查询结果的能力,将众多结果转换为一个个java对象并放入集合中。
(6)提供了关闭资源的能力,不用开发人员去调用close方法。
2. 总结:
    mybatis是一个sql映射框架,提供数据库的操作能力,是一个增强的JDBC。使用mybatis,开发人员只要集中精力写sql语句就可以了,不用关心各种资源的创建和关闭以及sql的执行。

四、mybatis中的主要类

  1. Resources:mybatis中的一个类,负责读取主配置文件。
InputStream is = Resources.getResourceAsStream(config);
  1. SqlSessionFactoryBuilder:创建SqlSessionFactory对象。
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(is);
  1. SqlSessionFactory:获取SqlSession对象。重量级对象,程序创建这个对象比较耗时,需要资源比较多。在项目中,创建一次就够了。
SqlSession sqlSession = factory.openSession();
/*
openSession():无参的,获取是非自动提交事务的SqlSession对象。
openSession(true):获取是自动提交事务的SqlSession对象。
openSession(false):获取是非自动提交事务的SqlSession对象。
*/
  1. 【重要】 SqlSession:定义了操作数据库的方法。
    例如:
    selectOne(),selectList(),insert(),update(),delete(),commit(),rollback()
    使用要求:SqlSession对象不是线程安全的,需要在方法内部使用,在执行sql语句之前,先获取这个对象,在执行完sql语句后,需要关闭它,执行SqlSession.close(),这样才能保证他是线程安全的。

五、mybatis使用动态代理

  1. 动态代理:使用SqlSession.getMapper(dao接口.class)获得dao接口的实现类对象。
  2. 传参:从java代码中把数据传到mapper标签的sql语句中。
    (1)parameterType:写在mapper标签中的属性。表示dao接口中方法形参的数据类型。(parameterType不是强制的,mybatis通过反射机制,可以知道接口参数的数据类型。)
    (2)一个简单类型的参数:
    简单类型:mybatis中把java的基本数据类型,和String都叫做简单类型。在mapper标签中,获取一个简单类型的参数值使用,#{任意字符串}。
    (3)多个参数,使用@Param命名参数
    接口 :
public List<Emp> selectEmps(@Param("myname") String ename,@Param("mysal") Float salary)

mapper标签:

<select>
	select * from emp where ename = #{myname} and sal = #{mysal}
</select>

六、动态SQL

  • 动态sql:sql的内容是变化的,可以根据条件的不同,执行不同的sql语句。主要是where部分发生变化。
  • 动态sql的实现,使用的是mybatis提供的标签:< if >,< where >,< foreach >
  1. < if >是判断条件的。
    语法:< if test = “判断java对象的属性值” >sql语句< /if >
  2. < where >是用来包含多个< if >,只要有一个if成立,就会自动加一个where关键字,并且会去掉多余的and或者or。
  3. < foreach >循环java中的数组或者集合。主要用在sql的in语句中。
    语法:
<foreach collection="" item="" open="" close="" separator="">
<!--
collection:表示接口中方法参数的类型,如果是数组就是array,如果是list集合就是list。
iteam:自定义的,表示数组和集合的成员的变量。
open:循环开始的字符。
close:循环结束时的字符。
separator:成员的分隔符。
-->
</foreach>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值