mybatis学习笔记

一、框架概述
1、三层架构
第一层:界面层,和用户打交道,接收用户的请求参数,显示处理结果的(jsp, html, servlet)
第二层:业务逻辑层,接收了界面层传递的数据,计算逻辑,调用数据库,获取数据。
第三层:数据访问层,就是访问数据库,执行对数据的查询,修改,删除等等的。
三层对应的包:第一层,controller包(servlet)
第二层:service包(XXXService类)
第三层:dao包(XXXDao类)
三层中类的交互:用户使用界面层—>业务逻辑层---->数据访问层(持久层)---->数据库(MySQL)
三层对应的处理框架:
界面层:springMVC(框架)
业务逻辑层:spring
数据访问层:mybatis
2、框架概念
框架是一个模板,
①框架中定义好了一些功能,这些功能是可用的。
②可以加入项目中自己的功能,这些功能可以利用框架中写好的功能
框架是一个软件,半成品软件,定义好了一些基础功能,需要加入拟的功能才是完善的。这些基础功能是可以重复使用的,是可升级的。
框架的特点:
①框架一般不是全能的,不能做全部事情。
②框架是针对某一个领域有效,特长在某一个方面,比如mybatis在做数据库操作强,但是它不能做其他的。
③框架是一个软件。
3、jdbc的缺陷
代码多,效率低,重复代码较多,业务代码会和数据库操作代码混合在一起。
4、mybatis能做什么
是一个sql映射框架。
①sql mapper:sql映射。
可以把数据库表中的一行数据映射为一个java对象。
一行数据可以看作是一个java对象。
操作这个对象就相当于操作表中的数据。
②data access object :数据访问。
对数据库执行增删改查。

mybatis提供的功能:
①提供了创建connection , statement , resultset 的能力,不用开发人员创建这些对象了。
②提供了执行sql语句的能力,不用你执行sql。
③提供了循环sql,把sql的结果转为java对象,List集合的能力。
④提供了关闭资源的能力,不用你关闭connection , statement , resultset。
开发人员要做的是:
①提供sql语句。
最后是开发人员提供sql语句,mybatis执行,开发人员得到list集合或者java对象(是表中数据)。
总结:mybatis是一个sql映射框架,提供的数据库操作能力,是增强版JDBC。使用mybatis让开发人员集中精神写sql语句就可以,不必关心connection , statement , resultset 的创建和关闭。

二、mybatis
1、主要类的介绍
1)resources:mybatis中的一个类,负责读取主配置文件。
InputStream in = Resources.getResourceAsSteam(“mybatis.xml”)
2)SqlSessionFactoryBuilder:创建SqlSessionFactory对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
3)SqlSessionFactory:重量级对象,程序创建一个这种对象耗时长,使用资源多。在整个项目中,有一个就够用了。
SqlSessionFactory是一个接口,接口实现类:DefaultSqlSessionFactory
SqlSessionFactory作用:获取SqlSession对象。
4)SqlSession:是个接口,定义了操作数据库的方法,例如selectOne().insert(),commit()
SqlSession接口实现类:DefaultSqlSession()
使用要求:SqlSession对象不是线程安全的,需要在方法内部使用,在执行sql语句之前,使用openSession()获取SqlSession,在执行完sql语句后,需要关闭它,执行SqlSession.close(),这样能保证他的使用是线程安全的。
三、
1.动态代理:使用SqlSession。getMapper(dao接口.class) 获取这个dao接口的对象
2、传入参数:从java代码中把数据传入到mapper文件的sql语句中。
1)、parameterType:写在mapper文件中的一个属性,表示dao接口中方法的参数的数据类型。
例如studentDao接口
public Student selectStudentById (Integer id)
2)、一个简单类型的参数:
简单类型:mybatis把java的基本数据类型和string都叫简单类型。在mapper文件获取简单类型的一个参数的值,使用#{任意字符}
3)、多个参数,使用@param命名参数。
接口public List selectMulitParam(@param (“myname”) String name,@param (“myage”) , Integer age)
使用 @param (“参数名”) String name
4)、多个参数,使用java对象
语法#{属性名}
vo:value object ,放一些存储数据的类,比如说 提交请求参数,name,age,现在想把name,age 传给一个service类
vo: view object 从servlet把数据返回给浏览器使用的类,表示显示结果的类。
pojo:普通的有set,get方法的java类。普通的java对象
servlet-----StudentService(addStudent(Myparam param) )
entity(domain域):实体类,和数据库中的表对应的类。
5)、#,$,
#的结果:select id ,name ,email ,age from student where id = ?
的 结 果 : s e l e c t , i d , n a m e , e m a i l , a g e f r o m s t u d e n t w h e r e i d = 1001 尽 量 不 用 的结果:select,id,name ,email ,age from student where id = 1001 尽量不用 select,id,name,email,agefromstudentwhereid=1001,用#。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mingshengda

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值