zoukankan      html  css  js  c++  java
  • mybatis基础(下)

    • mybatis和spring整合
      • 需要spring通过单例方式管理SqlSessionFactory
      • spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession
      • 持久层的mapper都需要由spring进行管理
      • 需要导入的jar包
      • 需要建立的文件
      • 需要建立的包
      • 在applicationContext.xml配置sqlSessionFactory
        • 创建applicationContext.xml
        • 配置applicationContext.xml
          • <?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"
                   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">
            
                <!-- 加载配置文件 -->
                <context:property-placeholder location="classpath:db.properties"/>
                <!-- 数据源,使用dbcp -->
                <!--
                    driverClassName:
                    url:
                    username:
                    password:
                    maxActive:
                    maxIdle:
                -->
                <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
                    <property name="driverClassName" value="${jdbc.driver}"/>
                    <property name="url" value="${jdbc.url}"/>
                    <property name="username" value="${jdbc.username}"/>
                    <property name="password" value="${jdbc.password}"/>
                    <!--<property name="maxActive" value="10"/>-->
                    <property name="maxIdle" value="5"/>
                </bean>
                <!-- 配置SqlSessionFactory -->
                <!--
                    class:设置为mybatis-spring.jar中的类
                    id:唯一表示标识
                -->
                <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                    <!-- 加载mybatis的配置文件 -->
                    <property name="configLocation" value="mybatis/SqlMapConfig.xml"/>
                    <!-- 加载数据源 -->
                    <property name="dataSource" ref="dataSource"/>
            
                </bean>
            </beans>
      •  整合代码及其bug
        • 若报找不到org.springframework.dao.support.DaoSupport的类文件
          • 导入spring-tx-4.3.5.RELEASE.jar
        • 若报java.lang.ClassNotFoundException: org.apache.commons.pool2.PooledObjectFactory

          • 导入commons-pool2-2.6.1.jar
        • 若报java.lang.NoClassDefFoundError: org/springframework/aop/support/AopUtils

          • 导入spring-aop-4.3.5.RELEASE.jar
        • 若报nested exception is java.lang.NoClassDefFoundError: org/springframework/jdbc/datasource/TransactionAwareDataSourceProxy
          • 导入spring-jdbc-4.3.5.RELEASE.jar
          •   原生dao
            /**
             * dao接口实现类需要注入SqlSessionFactory,通过spring进行注入
             * 这里通过spring声明配置方式,配置dao的bean
             */
            public interface UserDao {
            
            
                public abstract List<User> selectAllUser();
            
            }
            
            /**
             * UserDao的实现类
             */
            public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {
            
            
                @Override
                public List<User> selectAllUser() {
                    //继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSession
                    SqlSession connection = this.getSqlSession();
                    List<User> users = connection.selectList("user.selectAllUser");
            
                    //方法结束就自动关闭,所以不需要close();
                    //connection.close();
                    return users;
                }
            }
            
            
            <!-- 在applicationContext.xml配置 -->
            
                <?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"
                       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">
            
                    <!-- 加载配置文件 -->
                        <context:property-placeholder location="classpath:db.properties"/>
                    <!-- 数据源,使用dbcp -->
                    <!--
                        driverClassName:
                        url:
                        username:
                        password:
                        maxActive:
                        maxIdle:
                    -->
                    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
                        <property name="driverClassName" value="${jdbc.driver}"/>
                        <property name="url" value="${jdbc.url}"/>
                        <property name="username" value="${jdbc.username}"/>
                        <property name="password" value="${jdbc.password}"/>
                        <!--<property name="maxActive" value="10"/>-->
                        <property name="maxIdle" value="5"/>
                    </bean>
                    <!-- 配置SqlSessionFactory -->
                    <!--
                    class:设置为mybatis-spring.jar中的类
                    id:唯一表示标识
                    -->
                    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                        <!-- 加载mybatis的配置文件 -->
                        <property name="configLocation" value="mybatis/SqlMapConfig.xml"/>
                        <!-- 加载数据源 -->
                        <property name="dataSource" ref="dataSource"/>
            
                    </bean>
            
            
                    <!-- 原始dao接口 -->
                    <bean id="userDao" class="cn.muriel.ssm.dao.impl.UserDaoImpl">
                        <property name="sqlSessionFactory" ref="SqlSessionFactory"/>
                    </bean>
            
                </beans>
            
            
            
            
            
            <!-- 在userMapper.xml配置 -->
            
            
              <?xml version="1.0" encoding="UTF-8" ?>
              <!-- 此时您可能想知道SqlSession或Mapper类究竟执行了什么。
                  MyBatis提供的全套功能可以通过使用多年来MyBatis流行的基于XML的映射语言来实现。
                  如果您以前使用过MyBatis,那么您将很熟悉这个概念,但是对XML映射文档进行了大量改进,以后会很清楚。 -->
              <!DOCTYPE mapper
                    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
              <!-- namespace命名空间。作用对sql进行分类化管理,理解sql隔离
                 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
                <mapper namespace="cn.muriel.ssm.dao.UserDao">
            
            
                    <select id="selectAllUser" resultType="cn.muriel.mybatis.po.User">
            
                            select * from user
            
                  </select>
              </mapper>
            
            
            
            
            
            <!-- 测试 -->
                public class TestUtil {
            
                    private static ApplicationContext applicationContext;
            
                    //在setUp这个方法得到spring容器
                    public static void main(String[] args) {
            
                        applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
            
                        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
                    
                        JSONArray sendJson = JSONArray.fromObject(userDao.selectAllUser());
                        System.out.println(sendJson + "");
                    
            
                }
            }
            
                        
                 
                    
          • 代理mapper
            /**
             * dao接口实现类需要注入SqlSessionFactory,通过spring进行注入
             * 这里通过spring声明配置方式,配置dao的bean
             */
            public interface UserMapper {
            
            
                public abstract List<User> selectAllUser();
            
            }
            
            /**
             * UserDao的实现类
             */
            public class UserDaoImpl extends SqlSessionDaoSupport implements UserMapper {
            
            
                @Override
                public List<User> selectAllUser() {
                    //继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSession
                    SqlSession connection = this.getSqlSession();
                    List<User> users = connection.selectList("user.selectAllUser");
            
                    //方法结束就自动关闭,所以不需要close();
                    //connection.close();
                    return users;
                }
            }
            
            
            <!-- 在applicationContext.xml配置 -->
            
                <?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"
                       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">
            
                    <!-- 加载配置文件 -->
                        <context:property-placeholder location="classpath:db.properties"/>
                    <!-- 数据源,使用dbcp -->
                    <!--
                        driverClassName:
                        url:
                        username:
                        password:
                        maxActive:
                        maxIdle:
                    -->
                    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
                        <property name="driverClassName" value="${jdbc.driver}"/>
                        <property name="url" value="${jdbc.url}"/>
                        <property name="username" value="${jdbc.username}"/>
                        <property name="password" value="${jdbc.password}"/>
                        <!--<property name="maxActive" value="10"/>-->
                        <property name="maxIdle" value="5"/>
                    </bean>
                    <!-- 配置SqlSessionFactory -->
                    <!--
                    class:设置为mybatis-spring.jar中的类
                    id:唯一表示标识
                    -->
                    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                        <!-- 加载mybatis的配置文件 -->
                        <property name="configLocation" value="mybatis/SqlMapConfig.xml"/>
                        <!-- 加载数据源 -->
                        <property name="dataSource" ref="dataSource"/>
            
                    </bean>
            
            
               
                
                   <!-- mapper配置 -->
                    <!--
                        class为mybatis-spring.jar下的类
                        MapperFactoryBean:根据mapper接口生成代理对象
                    -->
                     <!-- UserMapper.java和userMapper.xml在同一个包下 -->
                    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
                        <property name="mapperInterface" value="cn.muriel.ssm.mapper.UserMapper"/>
                <!-- 若ref改为value,则报ConversionNotSupportedException -->
                        <property name="sqlSessionFactory" rel="SqlSessionFactory"/>
                    </bean>
            
                </beans>
            
            
            
            
            
            <!-- 在userMapper.xml配置 -->
            
            
              <?xml version="1.0" encoding="UTF-8" ?>
              <!-- 此时您可能想知道SqlSession或Mapper类究竟执行了什么。
                  MyBatis提供的全套功能可以通过使用多年来MyBatis流行的基于XML的映射语言来实现。
                  如果您以前使用过MyBatis,那么您将很熟悉这个概念,但是对XML映射文档进行了大量改进,以后会很清楚。 -->
              <!DOCTYPE mapper
                    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
              <!-- namespace命名空间。作用对sql进行分类化管理,理解sql隔离
                 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
                <mapper namespace="cn.muriel.ssm.mapper.UserMapper">
            
            
                    <select id="selectAllUser" resultType="cn.muriel.mybatis.po.User">
            
                            select * from user
            
                  </select>
              </mapper>
            
            
            
            
            
            <!-- 测试 -->
                public class TestUtil {
            
                    private static ApplicationContext applicationContext;
            
                    //在setUp这个方法得到spring容器
                    public static void main(String[] args) {
            
                        applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
            
                        UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
                    
                        JSONArray sendJson = JSONArray.fromObject(userMapper.selectAllUser());
                        System.out.println(sendJson + "");
                    
            
                }
            }
            
                        
                 
                    
          • mapper的扫描配置
            /**
             * dao接口实现类需要注入SqlSessionFactory,通过spring进行注入
             * 这里通过spring声明配置方式,配置dao的bean
             */
            public interface UserMapper {
            
            
                public abstract List<User> selectAllUser();
            
            }
            
            /**
             * UserDao的实现类
             */
            public class UserDaoImpl extends SqlSessionDaoSupport implements UserMapper {
            
            
                @Override
                public List<User> selectAllUser() {
                    //继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSession
                    SqlSession connection = this.getSqlSession();
                    List<User> users = connection.selectList("user.selectAllUser");
            
                    //方法结束就自动关闭,所以不需要close();
                    //connection.close();
                    return users;
                }
            }
            
            
            <!-- 在applicationContext.xml配置 -->
            
                <?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"
                       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">
            
                    <!-- 加载配置文件 -->
                        <context:property-placeholder location="classpath:db.properties"/>
                    <!-- 数据源,使用dbcp -->
                    <!--
                        driverClassName:
                        url:
                        username:
                        password:
                        maxActive:
                        maxIdle:
                    -->
                    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
                        <property name="driverClassName" value="${jdbc.driver}"/>
                        <property name="url" value="${jdbc.url}"/>
                        <property name="username" value="${jdbc.username}"/>
                        <property name="password" value="${jdbc.password}"/>
                        <!--<property name="maxActive" value="10"/>-->
                        <property name="maxIdle" value="5"/>
                    </bean>
                    <!-- 配置SqlSessionFactory -->
                    <!--
                    class:设置为mybatis-spring.jar中的类
                    id:唯一表示标识
                    -->
                    <bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
                        <!-- 加载mybatis的配置文件 -->
                        <property name="configLocation" value="mybatis/SqlMapConfig.xml"/>
                        <!-- 加载数据源 -->
                        <property name="dataSource" ref="dataSource"/>
            
                    </bean>
            
            
               
                
                    <!-- mapper批量扫描,从mapper包中扫描出mapper接口,自动创    建代理对象并且在spring容器中注册 -->
                        <!-- 自动扫描出来的mapper的bean的id为mapper类名(首字母小写) -->
                        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
                           <!--
                             指定扫描的包名
                             指定mapper接口的包名,mybatis自动扫描包下边所以mapper接口进行加载
                             遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录中
                             如果扫描多个包,每个包中间使用逗号分隔
                           -->
                           <property name="basePackage" value="cn.muriel.ssm.mapper"/>
                           <!-- 数据源 -->
                            <property name="sqlSessionFactoryBeanName" value="SqlSessionFactory"/>
                        </bean>
            
                </beans>
            
            
            
            
            <!-- 在userMapper.xml配置 -->
            
            
              <?xml version="1.0" encoding="UTF-8" ?>
              <!-- 此时您可能想知道SqlSession或Mapper类究竟执行了什么。
                  MyBatis提供的全套功能可以通过使用多年来MyBatis流行的基于XML的映射语言来实现。
                  如果您以前使用过MyBatis,那么您将很熟悉这个概念,但是对XML映射文档进行了大量改进,以后会很清楚。 -->
              <!DOCTYPE mapper
                    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
              <!-- namespace命名空间。作用对sql进行分类化管理,理解sql隔离
                 注意:使用mapper代理方法开发,namespace有特殊重要的作用 -->
                <mapper namespace="cn.muriel.ssm.mapper.UserMapper">
            
            
                    <select id="selectAllUser" resultType="cn.muriel.mybatis.po.User">
            
                            select * from user
            
                  </select>
              </mapper>
            
            
            
            
            
            <!-- 测试 -->
                public class TestUtil {
            
                    private static ApplicationContext applicationContext;
            
                    //在setUp这个方法得到spring容器
                    public static void main(String[] args) {
            
                        applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext.xml");
            
                        UserMapper userMapper = (UserMapper) applicationContext.getBean("userMapper");
                    
                        JSONArray sendJson = JSONArray.fromObject(userMapper.selectAllUser());
                        System.out.println(sendJson + "");
                    
            
                }
            }
            
                        
                                     

        

  • 相关阅读:
    stdin stdout stderr
    stat
    ssh-keyscan
    START TRANSACTION
    ssh-keygen
    ssh-agent
    ssh-add
    虚拟化之lxc
    Web 在线文件管理器学习笔记与总结(1)初始文件以及获取首层目录信息
    Java实现 LeetCode 97 交错字符串
  • 原文地址:https://www.cnblogs.com/fatRabbit-/p/10542030.html
Copyright © 2011-2022 走看看