mybatis 刚开始是用最原始的方法开发了一个入门程序,(没有dao)
1、将数据源配置在SqlMapConfig.xml
2、写一个po类 和映射文件User.xml(中的namespace=“名字随意”,
Mapper开发中是需要等于mapper接口地址的)
3、在sqlMapConfig.xml中加载User.xml:就准备可以操作数据了
4、直接读取sqlMapConfig.xml获得sqlSessionFactory,再得到SqlSession
5、SqlSession.selectOne("test.findUserById",1),传statement 的 id 即可;
这种方式最低级,最不可取
DAO方式:(和上面差不多,没有什么改进,只是多了个dao层次而已,然并卵)
1、定义Dao接口,和dao实现类(构造方法传一个SqlSessionFactory进去作为全局变量)
2、测试时;UserDao userDao = new UserDaoImpl(sqlSessionFactory);
User user = userDao.findUserById(1);
dao实现类中 User user = sqlSession.selectOne("test.findUserById", id);
整个下来只是代码写好了一点,更有面向对象的思想了而已;还是这种低级的实现方式; Mapper代理的方法:(不需要特殊配置,只要遵循下面的开发规范即可)
开发规范:
1、在mapper.xml中namespace等于mapper接口地址
2、mapper.java接口中的方法名和mapper.xml中statement的id一致
3、mapper.java接口中的方法输入参数类型和mapper.xml中statement的parameterType指定的类型一致。
4、mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型一致。
步骤:1、主要写 userMapper.java和 userMapper.xml,教程中是写成同名的并到mapper后缀,实际项目中同名即可(最好带Dao结尾);
2、在SqlMapConfig.xml中加载mapper.xml(开发中会用包扫描方式)
3、应用:获得sqlSessionFactory,获得sqlSession,获得UserMapper对象(此对象是自动生成的)
代码如下:
// 得到配置文件流
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
// 创建会话工厂,传入mybatis的配置文件信息
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//创建UserMapper对象,mybatis自动生成mapper代理对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserById(1);调用
两者区别:1、不用写DAO的实现类, 2、看不到sqlSession.selectOne("test.findUserById", id);这样的语句。
后续主要练习 一对一,一对多,多对多的查询,pojo和mapper的写法;resultMap,和加载延迟,缓存;
二级缓存参数配置,和分布式缓存ehcache,redis,mamcached;逆向工程的配置生成代码
spring和mybatis整合:
在applicationContext.xml配置sqlSessionFactory和数据源,数据源原来在SqlMapConfig.xml中的
很多bean也通过spring管理, Dao开发:
1、写好dao 和 dao实现类(不需要传入SqlSessionFactory进去,要继承于SqlSessionDaoSupport)
2、applicationContext.xml中配好 dao实现类的bean并ref传入sqlSessionFactory对象;
3、应用:applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
User user = userDao.findUserById(1);
第3步中可见,多了spring特有的applicationContext,加载bean的方式也不一样了。其他基本和未整合前的dao大同小异 mapper代理开发:和整合前区别主要是bean在
1、写好符合mapper代理的 **dao.java 和**dao.xml
2、mapper配置
MapperFactoryBean:根据mapper接口生成代理对象
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
mapperInterface指定mapper接口
<property name="mapperInterface" value="cn.itcast.ssm.mapper.UserMapper"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
此方法问题:
需要针对每个mapper进行配置,麻烦。(后续批量扫描,甚至也许注解?)
3、调用:applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
User user = userMapper.findUserById(1);
问题: 此时看起来:就是少了bean管理,但是配置工作量很繁重,以下解决;
<!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册
遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录 中
自动扫描出来的mapper的bean的id为mapper类名(首字母小写)
-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 指定扫描的包名 如果扫描多个包,每个包中间使用半角逗号分隔 -->
<property name="basePackage" value="cn.itcast.ssm.mapper"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>//这里有个坑要注意
</bean> 到此感觉到的改善:
1、只需在applicationContext.xml配置sqlSessionFactory和数据源
2、在批量扫描中对每个bean注入sqlSessionFactory,不用一个个传入
3、不用写DAO的实现类
4、调用时,bea创建的方式不一样了,从spring容器中加载出来
 mapper批量扫描时:
配置里面的 sqlSessionFactory 属性时要注意:不可以写成
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>;如果这样写,会造成上方的

<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:db.properties" /> 这句语句不起作用,最终导致链接不上数据库。 老师是这么说的,没有测试。

Mybatis--课程中循序渐进的体会 《黑马程序员_Springmvc+Mybatis由浅入深全套视频教程video》的更多相关文章

  1. 课程4:黑马程序员_spring2.5视频教程--视频列表

    \黑马程序员_spring2.5视频教程\01Struts相关基础理论介绍.mp4; \黑马程序员_spring2.5视频教程\02搭建struts开发环境.mp4; \黑马程序员_spring2.5 ...

  2. 课程10:《黑马程序员_Hibernate开发资料》视频目录--没有细看

    老师很厉害,讲得蛮详细的 \Hibernate视频教程\01_黑马程序员_Hibernate教程__Hibernate入门基础.avi; \Hibernate视频教程\02_黑马程序员_Hiberna ...

  3. 2019年最新超级有趣好玩的html+css网页布局课程,前端入门基础,html5+css3零基础入门课程-黑马程序员pink老师精心录制

    大家好,我是黑马程序员pink老师!! 本次视频是前端零基础入门的课程,pink老师采取有趣好玩讲法,带你快乐的学习枯燥的html+css知识,学完之后让你能快速布局pc端页面.代码也可以讲的好玩有趣 ...

  4. 【黑马18期Java毕业生】黑马程序员Java全套资料+视频+工具

        Java学习路线图引言:        黑马程序员:深知广大爱好Java的人学习是多么困难,没视频没资源,上网花钱还老被骗. 为此我们历时一个月整理这套Java学习路线图,不管你是不懂电脑的小 ...

  5. 黑马程序员:3分钟带你读懂C/C++学习路线

    随着互联网及互联网+深入蓬勃的发展,经过40余年的时间洗礼,C/C++俨然已成为一门贵族语言,出色的性能使之成为高级语言中的性能王者.而在今天,它又扮演着什么样重要的角色呢?请往下看: 后端服务器,移 ...

  6. 【黑马程序员C++ STL】学习记录

    黑马程序员 2017 C++ STL 教程(STL 部分已完结) 基于黑马STL课程整理:黑马程序员2017C++STL教程 视频链接 专栏:本STL专栏目录 文章目录 黑马程序员 2017 C++ ...

  7. 黑马程序员——【Java高新技术】——代理

    ---------- android培训.java培训.期待与您交流! ---------- 一.“代理概述”及“AOP概念” (一)代理概述 1.问题:要为已存在的多个具有相同接口的目标类的各个方法 ...

  8. 黑马程序员+SQL基础(上)

    黑马程序员+SQL基础 ---------------<a href="http://edu.csdn.net"target="blank">ASP ...

  9. 黑马程序员+Winform基础(上)

    黑马程序员+Winform基础 ---------------<a href="http://edu.csdn.net"target="blank"> ...

随机推荐

  1. Spring3 (事务管理)

    简介: 1.事务管理.2.整合Junit.3.整和Web 1       事务管理 1.1   回顾事务 l  事务:一组业务操作ABCD,要么全部成功,要么全部不成功. l  特性:ACID 原子性 ...

  2. Python基础语法总结

    1.Python标识符 在 Python 里,标识符有字母.数字.下划线组成. 在 Python 中,所有标识符可以包括英文.数字以及下划线(_),但不能以数字开头. Python 中的标识符是区分大 ...

  3. Python加载声音

    对于音频的操作可以使用pygame包中的sound 和 music对象进行音乐播放. Sound对象适合处理较短的音乐,如OGG和WAV格式的音频文件. Music对象出来可以播放OGG.WAV音频外 ...

  4. tput

    tput : 改变终端显示特性,常见用法如下: tput lines : 显示终端的行数 tput cols : 显示终端的列数 tput cup line_number collum_number ...

  5. Luogu P2575 高手过招

    题目链接 \(Click\) \(Here\) 关键在于转换成阶梯\(Nim\)的模型.最开始把题目看错了,理解正确后发现棋子可以向后跳不止一位,那么就比较简单了. 这里把空格看做阶梯,棋子看做硬币, ...

  6. (DIjsktra算法) nyoj1401-一场说走就走的旅行

    题目描述: 有一天,孩子回来对我说:“妈妈,听说马尔代夫很不错,放假了我想去玩.”马尔代夫?我也想去!没有人不向往一场说走就走的旅行!“其实我想去的地方很多,呼伦贝尔大草原.玉龙雪山.布达拉宫.艾菲尔 ...

  7. .gitignore无效的原因

    有时候,我们编写gitinore后发现文件还是没有被忽略,这是什么原因呢? 熟知git的老鸟们可能已经知道,因为这个文件在之前已经被追踪了,如果想忽略已经被追踪的文件我们需要把这个追踪去除. 对所有文 ...

  8. thinkpad yoga 12 / thinkpad s1 yoga / WS860

    s 序号 IP地址 MAC地址 主机名 设备商 1 192.168.3.6 34-02-86-29-46-8B Intel(R) Dual Band Wireless-AC 7265 Intel公司/ ...

  9. dependencies和devDependencies两者区别

    在npm生成的package.json文件中,有devDependencies和dependencies两个环境 devDependencies 用于开发环境(本地) dependencies 用于生 ...

  10. 转换流InputStreamReader & OutputStreamWriter

    转换流InputStreamReader & OutputStreamWriter 比如当使用FileReader读取文件时,可以读取IDE默认的UTF-8编码的文件,但是当有一个文件是GBK ...