zoukankan      html  css  js  c++  java
  • Mybatis整合Spring

    一.导包

      1.Mybatis的核心包以及依赖包

      2.Spring的jar包(这个可能麻烦点)

      3.mybastis和spring整合包

      4.数据库驱动包

      5.根据自己需求,junit,jstl等jar包导入,下面也将springmvc所需的jar也导入了

    二.设计表,创建表

    三.创建mybatis和spring的主配置文件

      1.书写mybatis配置。由于数据库连接的参数交给spring保管,只配别名和引入映射文件就够了

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

      2.书写spring配置文件。依次配置连接池,session工厂,配置dao(这里采用原先的dao开发方式)

        <!-- 读取数据库信息配置文件 -->
        <context:property-placeholder location="classpath:db.properties"/>
        <!-- 配置连接池 -->                            
        <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property>
            <property name="driverClass" value="${jdbc.driverClass}" ></property>
            <property name="user" value="${jdbc.user}" ></property>
            <property name="password" value="${jdbc.password}" ></property>
        </bean>
    
        <!-- 配置工厂 -->
        <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 连接池 -->
            <property name="dataSource" ref="dataSource"></property>
            <!-- mybatis主配置信息 -->
            <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
        </bean>
        
        <!-- 配置dao -->
        <bean name="userDao" class="cn.itheima.dao.impl.UserDaoImpl">
            <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
        </bean>

      3.创建实体类

    public class User implements Serializable{
        
        private Integer user_id;
        private String user_name;
        
        public Integer getUser_id() {
            return user_id;
        }
        public void setUser_id(Integer user_id) {
            this.user_id = user_id;
        }
        public String getUser_name() {
            return user_name;
        }
        public void setUser_name(String user_name) {
            this.user_name = user_name;
        }
        @Override
        public String toString() {
            return "User [user_id=" + user_id + ", user_name=" + user_name + "]";
        }
    }

      4.创建dao接口和dao实现类

    public interface UserDao {
    
        public List<User> findUserList();
    }
    public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
    
        public List<User> findUserList() {
            //通过继承sqlSessionDaoSupprot,调用getSqlSession获得session
            SqlSession session = super.getSqlSession();
            
            List<User> list = session.selectList("test.findUserList");
            
            return list;
        }
    
        
    }

      5.创建映射文件userMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis/dtd/mybatis-3-mapper.dtd">
    
    <mapper namespace="test">
        <select id="findUserList" resultType="User">
            select * from user2
        </select>
    </mapper>

      6.书写测试类

    public class Junit {
    
        @Test
        public void fun1() {
            ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
            
            UserDao dao = (UserDao) ac.getBean("userDao");
            
            List<User> list = dao.findUserList();
            
            System.out.println(list);
        }
    }

    四.采用动态代理开发dao

      1.创建接口UserMapper,不需书写它的实现类,实现类对象创建交给spring

    public interface UserMapper {
    
        public List<User> findUserList();
    }

      2.配置applicationContext.xml文件,配置连接池,session工厂,还有一个非常重要的mapper工厂,该工厂用于创建接口的代理对象

                                
        <!-- 读取数据库信息配置文件 -->
        <context:property-placeholder location="classpath:db.properties"/>
        <!-- 配置连接池 -->                            
        <bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}" ></property>
            <property name="driverClass" value="${jdbc.driverClass}" ></property>
            <property name="user" value="${jdbc.user}" ></property>
            <property name="password" value="${jdbc.password}" ></property>
        </bean>
    
        <!-- 配置工厂 -->
        <bean name="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 连接池 -->
            <property name="dataSource" ref="dataSource"></property>
            <!-- mybatis主配置信息 -->
            <property name="configLocation" value="classpath:sqlMapConfig.xml"></property>
        </bean>
        
        <!-- 动态代理开发:从mapper工厂获得代理对象 -->                        
        <bean name="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
            <!-- 依赖session工厂 -->
            <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
            <!-- 依赖需要代理的接口 -->
            <property name="mapperInterface" value="cn.itheima.mapper.UserMapper"></property>
        </bean>                        
    </beans>

      3.在调用工厂时创建userMapper即可

      4.上面虽然很好用,不过还是存在弊端的:当需要代理的接口多时,需要书写的<bean>随之增多,为了减少代码量,通常是采用扫描包的形式自动创建多个代理对象

        <!-- 动态代理开发:扫描包下的配置和接口 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 基本包 -->
            <property name="basePackage" value="cn.itheima.mapper"></property>
        </bean>

       这里用到了一个mapperScannerConfigurer类,该类创建后会自动扫描指定包下的接口和配置并生成代理对象,无需我们手动获取mapperScannerConfigurer

        @Test
        public void fun3() {
            ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
            
            UserMapper userMapper = (UserMapper) ac.getBean(UserMapper.class);
            
            List<User> list = userMapper.findUserList();
            
            System.out.println(list);
        }
  • 相关阅读:
    最长公共子序列
    学习MySQL常用操作命令
    using的几种用法
    C++循环的简单使用【闲来写来练练手~】
    使用【数据库收缩功能】实现多个数据文件的合并
    Google的十个核心技术(摘自CSDN)
    OPENGL入门学习
    dive into python 第 5 章 对象和面向对象
    [转]已知两圆圆心坐标及半径求两圆交点 (C语言|参数方程求解)
    The Python Tutorial 4. More Control Flow Tools的一些小记
  • 原文地址:https://www.cnblogs.com/ibcdwx/p/12943537.html
Copyright © 2011-2022 走看看