zoukankan      html  css  js  c++  java
  • Spring集成MyBatis

    Spring集成MyBatis方式一

    1. 导包 spring-webmvc mybatis-spring dbcp ojdbc spring-jdbc

    2. 配置MyBatis: conf/spring-mybatis.xml
      不再需要mybatis配置文件,在spring配置文件中添加SqlSessionfactoryBean来代替

       <!-- 配置 spring-mybatis.xml -->
       <!-- 读取配置文件 -->
       <util:properties id="jdbc" location="classpath:conf/jdbc.properties"/> 
       
       <!-- 配置数据库连接池 -->
       <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
       	<property name="driverClassName" value="#{jdbc.driver}"/>
       	<property name="url" value="#{jdbc.url}"/>
       	<property name="username" value="#{jdbc.user}"/>
       	<property name="password" value="#{jdbc.password}"/>
       	<property name="maxActive" value="#{jdbc.maxActive}"></property>
       </bean>
       
       <!-- 配置MyBatis的 SessionFactory -->
       <!-- 不再需要mybatis配置文件,在spring配置文件中添加SqlSessionfactoryBean来代替-->
       <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
       	<!-- 注入连接池 -->
       	<property name="dataSource" ref="dataSource"/>
       	<!-- 注入映射文件的位置 -->
       	<property name="mapperLocations" value="classpath:mapper/*.xml"/>
      
       </bean>
       <!-- Mapper接口组件扫描 -->
       <!-- 该bean会扫描指定包及其子包下所有的Mapper映射器(即接口),然后调用getMapper方法获得映射器的实现,并将这些对象添加到Spring容器里面(默认的id是首字母小写后的接口名,可以使用@Respository重命名)-->
       <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
       	<!--注入Mapper映射器所在的包名-->
       	<property name="basePackage" value="org.chentging.note.dao"/>
       </bean>
      
    3. 实体类

       实体类的属性名和表的字段名要一样,若不一样,在映射文件中配置ResultMap,大小写可忽略
      

    1. 配置Mapper映射文件:mapper/UserMapper.xml

      <?xml version="1.0" encoding="UTF-8" ?>  
      <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
       "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
      
      <mapper namespace="cn.tedu.note.dao.UserDao">
      	
      	<select id="findUserByName" 
      		parameterType="string"
      		resultType="cn.tedu.note.entity.User">
      		select 
      			cn_user_id as id,
      			cn_user_name as name,
      			cn_user_password as password,
      			cn_user_token as token,
      			cn_user_nick as nick
      		from
      			cn_user		
      		where
      			cn_user_name = #{name}
      	</select>
      	
      </mapper>
      
    2. Mapper映射器:符合映射文件要求的接口(如果符合,MyBatis会生成接口实现类对象)

       a. 映射文件的namespace要与接口的完整名字(带包名)一致
      
       b. 方法名与sql的id一致
      
       c. 方法的参数类型与parameterType一致
      
       d. 方法的返回值与resultType一致
      

      使用:使用SqlSession获取MyBatis自动生成的映射器对象 session.getMapper(映射器类名.class);

       关键代码:
      
       String config = "SqlMapConfig.xml";
       //创建SqlSessionFactoryBuilder对象
       SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
       //创建SqlSessionFactory对象
       SqlSessionFactory ssf = ssfb.build(TestCase.class.getClassLoader().getResourceAsStream(config));
       //获取SqlSession对象
       SqlSession session = ssf.openSession();
       //调用SqlSession对象提供的方法访问数据库
      
       Employee e = new Employee();
       e.setName("king");
       e.setAge(33);
       session.insert("test.save", e);
       //添加,修改,删除都需要提交事务
       session.commit();
       //关闭SqlSession
       session.close();
      
    3. 补充:只扫描带有特定注解的接口

       1:开发一个空白注解
      
       2:将注解添加到需要扫描的接口之上
      
       3:修改MapperScannerConfiurer配置
       	<property name="annotationClass" value="完整包名.注解"/>
      

    Spring集成MyBatis方式二(基本不用)

    1234步骤一样
    5:写DAO接口	接口方法没有特定要求
    6:写一个DAO接口的实现类,注入sqlSessionTemplate
    	<!-- 配置SqlSessionTemplate -->
    	<bean id="sst" class="org.mybatis.spring.SqlSessionTemplate">
    		<constructor-arg index="0" ref="ssfb"/>
    	</bean>
    不用考虑提交事务和关闭sqlSession
    sst.insert("映射文件命名空间.save", e);
    注意没有map映射器,所以需要组件扫描
  • 相关阅读:
    Preliminaries for Benelux Algorithm Programming Contest 2019: I. Inquiry I
    Preliminaries for Benelux Algorithm Programming Contest 2019:A:Architecture
    pta刷题:L1-008 求整数段和 (10分)记录总结
    关系代数复习ing
    操作系统学习笔记:银行家算法浅谈
    mysql学习笔记:复习ing
    mysql学习笔记:集合运算并交差,其他
    JZOJ1900. 【2010集训队出题】矩阵
    【2019暑假】08.14比赛总结
    【2019暑假集训】08.13比赛总结
  • 原文地址:https://www.cnblogs.com/chentging/p/7142071.html
Copyright © 2011-2022 走看看