mybatis 高级映射和spring整合之与Spring整合(6)
mybatis 高级映射和spring整合之mybatis与Spring整合
3.0 mybatis和spring整合(掌握)
    3.1 整合思路
    需求spring通过单例方式管理SqlSessionFactory。
    spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成)
    持久层的mapper都需要有spring进行管理。 
    3.2 整合环境
    创建一个新的java工程(接近实际开发的工程结构)
    jar包:
    mybatis3.2.7的jar包
    spring3.2.0的jar包
    mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供的,mybatis和spring整合由mybatis提供。
    3.3 sqlSessionFactory
        在applicationContext.xml配置sqlSession 和 数据源
        sqlSessionFactory在mybatis 和spring的整合包下
        applicationContext.xml
        <!-- 加载配置文件 -->
        <context:property-placeholder location="classpath:db.properties">
        <!-- 数据源,使用dbcp -->
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destory-method="close">
            <property name="driverClassName" value="${jdbc.driver}"/>
            <property name="url" value="${jdbc.driver}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
            <property name="maxActive" value="10"/>
            <property name="maxIdle" value="5"/>
        </bean>
        <!-- sqlSessionFactory -->
        <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 加载mybatis的配置文件 -->
            <property name="configLocation" value="mybatis/SqlMapConfig.xml"/>
            <!-- 数据源 -->
            <property name="dataSource" ref="dataSource">
            </property>
        </bean>
    3.4 原始dao开发(和spring整合后)
        3.4.1 User.xml (mapper映射文件)
        User.xml
        <mapper namespace="test">
            <select id="findUserById" parameterType="int" resultType="com.demo.mybatis.ssm.po.User">
                SELECT * FROM USER WHERE id=#{value}
            </select>
        </mapper>
        在SqlMapconfig.xml中加载User.xml
            <!-- 加载映射文件 -->
            <mapper>
                <mapper resource="sqlmap/User.xml">
        3.4.2 dao(实现类继承SqlSessionDaoSupport)
        public interface UserDao {
            //根据id查询用户信息
            public User findUserById(int id) throws Exception;
        }
        dao接口实现类需要注入SqlSessionFactory,通过spring进行注入。
        这里使用spring的声明配置方式,配置dao的bean
        让UserDaoImpl实现类继承SqlSessionDaoSupport
            UserDaoImpl.java
            public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{
                //继承 SqlSessionDaoSupport,通过 this.getSqlSession()得到sqlSession
                SqlSession sqlSession = this.getSqlSession)();
                User user = sqlSession.select("test.findUserById",id);
                return user;
            }
        3.4.3 配置dao
        在applicationContext.xml中配置dao。
             applicationContext.xml
            <!-- 原始的dao接口-->
            <bean id="userDao" class="com.demo.ssm.dao.UserDaoImpl">
                <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
            </bean>
        3.4.4 测试程序
            package com.demo.ssm.dao;
            public class UserDaoImplTest{
                //private ApplicationContext applicationContext;
                //在setUp这个方法得到spring容器
                @Before
                public void setUp() throws Exception{
                    applicationContext =  new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml")
                }
                @Test
                public void testFindUserByID(){
                    UserDao userDao = applicationContext.getBean("userDao");
                    //调用userDao的方法
                    User user = userDao.findUserById(1);
                    System.out.println(user);
                }
            }
        3.5 mapper代理开发
            3.5.1 mapper.xml和mapper.java
            3.5.2 spring通过MapperFactoryBean来创建代理对象
            <!-- mapper配置
                mapperFactoryBean:根据mapper接口生成代理对象
            -->
            <bean id="userMapper" class="org.mybatis.spring.MapperFactoryBean">
                <!-- mapperInterface指定mapper接口 -->
                <property name="mapperInterface" value="com.demo.ssm.mapper.UserMapper"/>
                <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
            </bean>
            此方法问题:
            需要针对每个mapper进行配置,麻烦。
            所以 解决办法3.5.3(屏蔽3.5.2)
            3.5.3 通过MapperScannerConfigurer进行mapper扫描(建议使用)
            <!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册
            遵循规范:将mapper.java 和 mapper.xml 映射文件名称保持一致,且在一个目录中。
            自动扫描出来的mapper的bean的id为mapper类名(首字母小写)
            -->
            <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                <!-- 指定扫描的包名
                    如果扫描多个包,每个包中间使用半角逗号分隔
                -->
                <property name="basePackage" value="com.demo.ssm.mapper"/>
                <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
            </bean>
            3.5.4 测试代码
            @Test
            public void testFindUserByID() throws Exception{
                UserMapper userMapper = (UserMapper) applicationContext.getBean("userBean");
                System.out.println(user);
            }
mybatis 高级映射和spring整合之与Spring整合(6)的更多相关文章
- mybatis 高级映射和spring整合之逆向工程(7)
		
mybatis 高级映射和spring整合之逆向工程(7) 4.0 逆向工程 4.1 mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行 ...
 - mybatis 高级映射和spring整合之查询缓存(5)
		
mybatis 高级映射和spring整合之查询缓存(5) 2.0 查询缓存 2.0.1 什么是查询缓存 mybatis提供缓存,用于减轻数据压力,提高数据库性能. mybatis提供一级缓存和二级缓 ...
 - mybatis 高级映射和spring整合之高级映射(4)
		
mybatis 高级映射和spring整合之高级映射 ----------------学习结构-------------------- 0.0 对订单商品数据模型进行分析 1.0 高级映射 1.1 一 ...
 - mybatis高级映射(一对一,一对多)
		
mybatis高级映射 一对一关联映射 需求:查询订单信息,关联查询用户信息(一个订单对应一个用户) (1)通过resultType实现 sql语句: select orders.* , USER.u ...
 - 【Mybatis高级映射】一对一映射、一对多映射、多对多映射
		
前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...
 - 高级映射,查询缓存和与spring整合
		
一.高级映射 -------一对一 这里以订单查询为例,其中有一个外键为user_id,通过这个关联用户表.这里要实现的功能是这个两个表关联查询,得到订单的信息和部分user的信息.order表结构如 ...
 - 六 mybatis高级映射(一对一,一对多,多对多)
		
1 订单商品数据模型 以订单商品数据为模型,来对mybaits高级关系映射进行学习.
 - MyBatis高级映射查询(3)
		
一.数据库数据和项目搭建过程 1.主要要四张表,分别为user用户信息表.items商品表.orderdetail订单明细表.orders订单表.表的结构和数据如下: 表结构 CREATE DATAB ...
 - (转)Mybatis高级映射、动态SQL及获得自增主键
		
原文:http://www.cnblogs.com/edwinchen/p/4105278.html?utm_source=tuicool&utm_medium=referral 一.动态SQ ...
 
随机推荐
- day009 文件操作
			
文件操作 文件路径 d:\test.txt 编码方式 utf-8 gbk... 操作方式 操作方式:只读,只写,追加,读写,写读..... 以什么编码方式储存的文件,就以什么编码打开进行操作. 只读: ...
 - C#调用存储过程中事务级临时表返回DataTable列乱序解决办法
			
string result = strSqlResult.Substring(3).Trim().Replace("\n", "").Replace(" ...
 - 设计模式 第一天 UML图,设计模式原则:开闭原则、依赖倒转原则、接口隔离原则、合成复用原则、迪米特法则,简单工厂模式
			
1 课程大纲 2 UML的概述 总结: UML unified model language 统一建模语言 一共有十种图: 类图 用例图 时序图 * 对象图 包图 组件图 部署图 协作图 状态图 (最 ...
 - Java核心技术读书笔记01
			
Volume I Chapter 1 An Introduction to Java • 1.1 Java as a Programming Platform• 1.2 The Java ‘Whi ...
 - Golang - 处理json
			
目录 Golang - 处理json 1. 编码json 2. 解码json Golang - 处理json 1. 编码json 使用json.Marshal()函数可以对一组数据进行JSON格式的编 ...
 - phpstrom 汉化
			
-- ---------- _--------------------------------------------------- ------------------- ----- ------- ...
 - 阶梯博弈&POJ 1704
			
阶梯博弈: 先借用别人的一幅图片.(1阶梯之前还有一个0阶梯未画出) 阶梯博弈的最初定义是这样的:每一个阶梯只能向它的前一个阶梯移动本阶梯的点,直至最后无法移动的为输. 那么,利用NIM,只计算奇数级 ...
 - 外网联接内网mssql
			
參考地址:http://www.nat123.com/Pages_8_266.jsp 方法例如以下: 1.注冊一个账号,同一时候进入nat123官网加入dns域名解析 点击确认保存,刚刚加入的域名解析 ...
 - Unity 使用C/C++ 跨平台终极解决方式(PC,iOS,Android,以及支持C/C++的平台)
			
PC的事实上根本不用说,毕竟C#和C++交互的文章已经够多了,当然我自觉得经过几次折腾后.差点儿全部游戏须要到的操作我都掌握了(各种传參方法,各种坑,不懂的能够留言问.尽管基本上没人看.哈哈) 废话不 ...
 - 面向对象的三大特性之二——继承(含super的使用)
			
1.继承的语法:class 子类 extends 父类 例1: class Person { int age; String name; public void print1() { System.o ...