SSM中Spring和MyBatis的整合

新人笔记,大佬勿喷

 

整合思路

  SSM中Spring和MyBatis的整合

整合过程

   

1. 导包

Spring的包 

SSM中Spring和MyBatis的整合

 mybatis

SSM中Spring和MyBatis的整合

 再导入一个结合的包

 SSM中Spring和MyBatis的整合

2. 搭建项目结构

 SSM中Spring和MyBatis的整合

3. 整合mybatis  原始整合

     SSM中Spring和MyBatis的整合

mapper 整合

  不管那种方式   都依赖于sqlSessionFactory  它需要依赖于mybatis核心配置文件中的信息。这三个分成三层:

1. 别名等属性设置

2. 数据库连接信息

3. 读取映射文件

其中的第二层可以使用连接池来取代

 

实际上 sqlSessionFactory 需要依赖于两个一个是dataSource还有一个是 核心配置文件

 

详细步骤:

    先书写spring核心配置文件,得到c3p0数据库连接池 填写配置信息根据扫描文件。在获得sqlsessionfactory工厂 得到这个工厂对象 配置数据库连接池 然后配置引入 mybatis的核心配置文件 (这个核心配置文件中有要扫描的包 即输出映射 和映射的配置文件(文件中要书写sql语句和调用路径和方法名)。) 配置dao的配置信息  由于dao实现接口类中继承了SqlSessionDaoSupport 因为它需要sqlSessionFactory 来得到sqlSession 所以需要配置引用sqlsessionfactory工厂 在测试类中开启单元测试并引入接口dao 并调用它的实现的接口类中的方法即可。接受返回值。

 spring 的核心配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx.xsd">
        <!--扫描配置文件-->
        <context:property-placeholder location="classpath:db.properties"></context:property-placeholder>
        <!--c3p0数据库连接池-->
        <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
               <property name="driverClass" value="${jdbc.driver}"></property>
               <property name="jdbcUrl" value="${jdbc.url}"></property>
               <property name="user" value="${jdbc.username}"></property>
               <property name="password" value="${jdbc.password}"></property>
       </bean>
        <!--获得sqlSessionFactory工厂 得到sqlSessionFactory -->
        <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                <property name="dataSource" ref="dataSource"></property>
                <property name="configLocation" value="classpath:resources/mybatis/sqlMapConfig.xml"></property>
        </bean>

        <bean name="userDao" class="cn.hd.dao.impl.UserDaoImpl">
                <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
        </bean>

         <!--第一种-->
        <!--<bean name="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">-->
            <!--<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>-->
            <!--<property name="mapperInterface" value="cn.hd.mapper.UserMapper"></property>-->
        <!--</bean>-->
         <!--第二种-->
         <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
             <property name="basePackage" value="cn.hd.mapper"></property>
         </bean>
</beans>

 

    mybatis的核心配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!--配置-->
    <typeAliases>
        <package name="cn.hd.entity"></package>
    </typeAliases>
      <mappers>
         <mapper resource="cn/hd/mapper/UserMapper.xml"></mapper>
     </mappers>
</configuration>

mybatis的映射配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="test">
           <select id="findUserById" parameterType="int" resultType="user">
               SELECT * FROM t_user WHERE id= #{id}
           </select>
</mapper>
测试用到的接口Dao 
public interface UserDao {
    User findUserById(Integer id);
}

   实现Dao接口

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
    @Override
    public User findUserById(Integer id) {
        User user = getSqlSession().selectOne("test.findUserById", id);
        return user;
    }
}
userMapper 接口  接口中的方法名需和mybatis的映射配置文件中sql语句的id相同 否则无法映射
public interface UserMapper {
   User findUserById(Integer id);
}

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:resources/spring/applicationContext.xml")
public class Demo {
    @Resource(name = "userDao")
    private UserDao userDao;

    @Test
    public void fun(){
        User userById = userDao.findUserById(10);
        System.out.println(userById);
    }

Mapper开发

   Spring配置bean -> mapperFactoryBean类(需要起名字)

依赖于两个  1 SQL Session Factory 和 接口的位置

<bean name="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
    <property name="mapperInterface" value="cn.hd.mapper.UserMapper"></property>
</bean>

直接进入到测试

这种方式也需要写很多mapper mybatis提供了升级版

 

配置一个扫描类,自动扫描某个位置下所有的mapper 并起名为对应的小写

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="cn.hd.entity"></property>

</bean>


有些东西没讲的太详细 因为我之前的文章都提到过 可以去看看。谢谢