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. 第十三节,使用带有全局平均池化层的CNN对CIFAR10数据集分类

    这里使用的数据集仍然是CIFAR-10,由于之前写过一篇使用AlexNet对CIFAR数据集进行分类的文章,已经详细介绍了这个数据集,当时我们是直接把这些图片的数据文件下载下来,然后使用pickle进 ...

  2. nginx搭建分布式简单配置

    1.下载安装nginx 2.编辑nginx.conf文件 upstream 172.100.10.52 { ip_hash; #保证每一个用户访问同一个网站 server 172.100.10.21: ...

  3. Jqgrid pager 关于“local” dataType 动态加载数据分页的研究(没好用的研究结果)

    系列索引 Web jquery表格组件 JQGrid 的使用 - 从入门到精通 开篇及索引 Web jquery表格组件 JQGrid 的使用 - 4.JQGrid参数.ColModel API.事件 ...

  4. DB2常用命令整理

    1.基本命令 查看命令选项list command options信息帮助SQL statement例子:statement =30081SQL30081启动当前的DB2数据库管理实例db2start ...

  5. 时间偏移sql

    mysql:select date_sub(str_to_date('2018/8/21','%Y/%m/%d') ,interval 90 day) ; oracle:select to_date( ...

  6. 关于vue的小实例

    学习网址:http://www.runoob.com/vue2/vue-tutorial.html 下面是我在上面学着写的两个小例子, 1. 实现点击全选,下面的均被选中,再点击一下,下面的均取消选择 ...

  7. 使用CMD 命令创建指定大小的文件

    在做资源更新的时候要做 磁盘空间不足的测试,于是想创建一个文件塞满硬盘,搜索到可以用命令来创建. fsutil file createnew null.zip 524288000

  8. bootstrap 在线设计工具layout IT

    Layoutit! bootstrap 可视化布局BETA

  9. python 有趣的库练习

    这里会将看到别人玩过有趣的实践并记录下来,会是一个长期更新的过程... 以下大部分均非原创变化自网络,只是觉得有趣便记录下来了,如有侵权,请告知删除... 自动化脚本... 20个必不可少的Pytho ...

  10. 解决centos7命令行中文乱码

    -------------centos7解决中文乱码问题[root@localhost ~]# cat /etc/locale.conf LANG=en_US.UTF-8[root@localhost ...