mybatis(6)spring + mybatis整合

一直说mybatis和spring整合,那么到底是整合了什么呢。

既然是整合,肯定要对比整合之前,和整合之后

目录

1. mybatis单独使用

2. spring + mybatis的整合

3. 整合一下吧


1. mybatis单独使用

需要的组件

mybatis-config.xml,mybatis的核心配置,可以配置下面的属性,能够扫描sql映射文件

        1. properties 属性
        2. settings 设置
        3. typeAliases 类型别名
        4. typeHandlers 类型处理器
        5. objectFactory 对象工厂
        6. plugins 插件
        7. environments 环境配置
               environment 环境变量
                    transactionManager 事务管理器
                    dataSource 数据源
        8. databaseidProvider 数据库厂商标识
        9. mappers 映射器

mapper.xml文件,sql映射文件

mapper接口,一个接口对应一个sql映射文件

创建SqlSession工厂。读取mybatis-config.xml文件,

1. SqlSessionFactoryBuilder.build()方法将xml文件读取到一个Configuration对象中,然后将Configuration封装到SqlSessionFactory对象中。

2. SqlSessionFactory.openSession()方法将将Configurtion中的属性取出来包装到Session对象中

3. 通过Session对象,Session通过反射和动态代理获取真正的mapper接口。调用mapper接口中的方法。

 

  • mapper接口,不需要实现类
package com.hww.dao;

import com.hww.bean.Client;

import java.util.List;

public interface ClientDao {

    //增加客户
    public int addClient(Client client);
    //更新客户
    public int updClient(Client client);
    //查询客户
    public Client selectClientById(int clientId);
    //删除客户
    public int delClientById(int ClientId);
}
  • mybatis配置,mybatis-config.xml
<?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>
    <!--
        1. properties 属性
        2. settings 设置
        3. typeAliases 类型别名
        4. typeHandlers 类型处理器
        5. objectFactory 对象工厂
        6. plugins 插件
        7. environments 环境配置
               environment 环境变量
                    transactionManager 事务管理器
                    dataSource 数据源
        8. databaseidProvider 数据库厂商标识
        9. mappers 映射器
    -->
    <settings>
        <!--设置列名映射的时候是否是驼峰标识-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!--配置数据库连接-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--引入每一个接口对应点xml文件-->
    <mappers>
        <mapper resource="ClientDao.xml"/>
    </mappers>

</configuration>
  • mapper映射文件
<?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">
<!--namespace:编写接口的全类名,就是告诉要实现该配置文件是哪个接口的具体实现-->
<mapper namespace="com.hww.dao.ClientDao">
    <!--
    select:表示这个操作是一个查询操作
    id表示的是要匹配的方法的名称
    resultType:表示返回值的类型,查询操作必须要包含返回值的类型
    #{属性名}:表示要传递的参数的名称
    -->
    <select id="selectClientById" resultType="com.hww.bean.Client">
        select * from client where client_id = #{empno}
    </select>

    <insert id="addClient">
        insert into client (client_name,client_name_en) values (#{clientName},#{clientNameEn})
    </insert>

    <update id="updClient">
        update client set
        client_id=#{clientId},
        client_name=#{clientName},
        client_name_en=#{clientNameEn}
        where client_id=#{clientId}
    </update>

    <delete id="delClientById">
        delete from client where client_id=#{clientId}
    </delete>
</mapper>
  • 测试:

1. 获取sqlSession会话

String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        // 获取数据库的会话
        sqlSession = sqlSessionFactory.openSession();

2. 通过sqlSession获取mapper接口,并调用接口方法,实现查询

    @Test
    public void testSelectClientById(){
        ClientDao mapper = sqlSession.getMapper(ClientDao.class);
        Client client = mapper.selectClientById(1);
        System.out.println(client.toString());
        sqlSession.close();
    }

2. spring + mybatis的整合

需要依赖包

        <!--mybatis-spring 整合包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.4</version>
        </dependency>

1. 整合数据源,数据源从mybatis-config.xml中移除,放在spring.xml文件中

2. 事务交给spring事务控制管理器

3. 引用mybatis-spring整合包中的SqlSessionFactoryBean的类,将原来配置在mybatis-config.xml文件中的配置项,直接配置到SqlSessionFactoryBean的bean下,可以直接使用,不用再去读取mybatis-config.xml。

当然整合并不会破坏原有的mybatis中配置,mybatis-config.xml文件中还是可以做配置,同时可以整合也可以读取mybatis-config.xml中的配置。

但是大部分的组件都能够直接配置在SqlSessionFactoryBean对象中。例如plugins,typeHandlers,Properties,typeAliases,databaseIdProvider,cache这些其实就是原来配置在mybatis-config.xml中的组件。

private static final Logger LOGGER = LoggerFactory.getLogger(SqlSessionFactoryBean.class);
private static final ResourcePatternResolver RESOURCE_PATTERN_RESOLVER = new PathMatchingResourcePatternResolver();
private static final MetadataReaderFactory METADATA_READER_FACTORY = new CachingMetadataReaderFactory();
private Resource configLocation;
private Configuration configuration;
private Resource[] mapperLocations;
private DataSource dataSource;
private TransactionFactory transactionFactory;
private Properties configurationProperties;
private SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
private SqlSessionFactory sqlSessionFactory;
private String environment = SqlSessionFactoryBean.class.getSimpleName();
private boolean failFast;
private Interceptor[] plugins;
private TypeHandler<?>[] typeHandlers;
private String typeHandlersPackage;
private Class<?>[] typeAliases;
private String typeAliasesPackage;
private Class<?> typeAliasesSuperType;
private LanguageDriver[] scriptingLanguageDrivers;
private Class<? extends LanguageDriver> defaultScriptingLanguageDriver;
private DatabaseIdProvider databaseIdProvider;
private Class<? extends VFS> vfs;
private Cache cache;
private ObjectFactory objectFactory;
private ObjectWrapperFactory objectWrapperFactory;

4. mapper扫描,MapperScannerConfigurer

既然把所有的配置都配置到SqlSessionFactoryBean中了,那么怎么使用呢。使用时,都是将Mapper接口注入到service等,然后直接调用方法。那mapper接口是怎么实例化的呢

我们猜测一下,就是在mapper扫描器去扫描接口,然后个利用反射,生成一个代理类,在spring启动的时候,将这些代理类实例化。

所以MapperScannerConfigurer的对用就是生成代理类并实例化。所以需要将mapper的接口指定到basePackage中,同时将SqlSessionFactoryBean也注入到扫描器中。同时SqlSessionFactoryBean对象中包含了sql映射文件。这样就能找到这些sql映射文件。

5. 既然mybatis-config中的配置可以整合到spring中,但是发现原来mybatis-config中的settings全局配置并不能配置spring中,所以还是需要配置到mybatis-config.xml中,在spring中引入这个文件即可。

   <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:com/hww/dao/*.xml"></property>
    </bean>

<?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"
       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/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--spring扫描注解,排除@Controller注解-->
    <context:component-scan base-package="com.hww" use-default-filters="false">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
    </context:component-scan>

    <!--加载properties文件-->
    <context:property-placeholder location="classpath:config.properties"></context:property-placeholder>

    <!--数据源
        有三种方式:
        1. 从JNDI获得DataSource,JndiObjectFactoryBean
        2. 使用DriverManagerDataSource获得DataSource,DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用
        3. 从第三方连接池中获取DataSource
            Apache的DBCP
            C3P0
            ali的 com.alibaba.druid.pool.DruidDataSource
    -->
   <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${username}"></property>
        <property name="password" value="${password}"></property>
    </bean>-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${db.driver}"></property>
        <property name="url" value="${db.url}"></property>
        <property name="username" value="${db.username}"></property>
        <property name="password" value="${db.password}"></property>
    </bean>

    <!--spring 事务管理器-->
    <bean id="transaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--spring 事务管理器,开启注解-->
    <tx:annotation-driven transaction-manager="transaction"></tx:annotation-driven>

    <!--sqlSession
        这里面整合了原先的mybatis配置,可以将原来在mybatis中的配置,都配置在sqlSessionFactoryBean中
    -->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:com/hww/dao/*.xml"></property>
    </bean>
    <!--mapper扫描器
    2.1如果Mapper.xml与Mapper.class在同一个包下且同名,spring 中MapperScannerConfigurer 扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配到Mapper.class。
    2.2如果Mapper.xml与Mapper.class不在同一个包下或者不同名,就必须使用配置mapperLocations指定mapper.xml的位置。(如idea中 maven 默认不打包java文件夹下的xml文件,未在pom.xml中配置resource的情况下)
    此时spring是通过识别mapper.xml中的
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.hww.dao"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
    </bean>

</beans>

 

总结:整合了什么

1. 就是将mybatis-config.xml中的配置交给spring去管理。

2. 但是settings配置还可以配置在mybatis中,然后spring引用该文件配置。

 

3. 整合一下吧

springmvc+spring+mybatis

  • 依赖包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.hww</groupId>
    <artifactId>ssm</artifactId>
    <version>1.0-SNAPSHOT</version>


    <!--
        ssm整合,spring mvc + spring +mybatis
    -->
    <dependencies>
        <!--============================spring mvc相关的包=====================================-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
     <!--   <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.10.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.10.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.10.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!--============================spring相关的包=====================================-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <!--spring aop 相关-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

        <!--spring jdbc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.21</version>
        </dependency>
        <!--============================mybatis 相关的包=====================================-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.4</version>
        </dependency>
        <!--mysql连接-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!--mybatis-spring 整合包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.4</version>
        </dependency>
        <!--mybatis 逆向工程的包-->
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.4.0</version>
        </dependency>

        <!--日志包-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--mybatis 第三方缓存包 以及 日志包-->
        <dependency>
            <groupId>org.ehcache</groupId>
            <artifactId>ehcache</artifactId>
            <version>3.8.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.caches</groupId>
            <artifactId>mybatis-ehcache</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.0-alpha1</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>2.0.0-alpha1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>


    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
            </resource>
        </resources>
    </build>
</project>
  • web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--spring上下文配置-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring.xml</param-value>
    </context-param>

    <!--监听器 ServletContext-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--servlet上下文配置-->
    <servlet>
        <servlet-name>myServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>myServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <!--filter配置-->
    <!--encoding filter-->
    <filter>
        <filter-name>encodeFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodeFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!--Rest风格filter-->
    <filter>
        <filter-name>rest</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>rest</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

spring-mvc.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"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--只扫描@Controller注解,其他的Spring注解不扫描-->
    <context:component-scan base-package="com.hww" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:include-filter>
    </context:component-scan>

    <!--静态资源文件扫描,由于servlet覆盖了tomcat的default Servlet,所以这里要开启default-->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>
    <!--mvc驱动,动态资源的扫描-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

spring.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" xmlns:tx="http://www.springframework.org/schema/tx"
       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/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <!--spring扫描注解,排除@Controller注解-->
    <context:component-scan base-package="com.hww" use-default-filters="false">
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"></context:exclude-filter>
    </context:component-scan>

    <!--加载properties文件-->
    <context:property-placeholder location="classpath:config.properties"></context:property-placeholder>

    <!--数据源
        有三种方式:
        1. 从JNDI获得DataSource,JndiObjectFactoryBean
        2. 使用DriverManagerDataSource获得DataSource,DriverManagerDataSource建立连接是只要有连接就新建一个connection,根本没有连接池的作用
        3. 从第三方连接池中获取DataSource
            Apache的DBCP
            C3P0
            ali的 com.alibaba.druid.pool.DruidDataSource
    -->
   <!-- <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${username}"></property>
        <property name="password" value="${password}"></property>
    </bean>-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${db.driver}"></property>
        <property name="url" value="${db.url}"></property>
        <property name="username" value="${db.username}"></property>
        <property name="password" value="${db.password}"></property>
    </bean>

    <!--spring 事务管理器-->
    <bean id="transaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!--spring 事务管理器,开启注解-->
    <tx:annotation-driven transaction-manager="transaction"></tx:annotation-driven>

    <!--sqlSession
        这里面整合了原先的mybatis配置,可以将原来在mybatis中的配置,都配置在sqlSessionFactoryBean中
    -->
    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:mybatis-config.xml"></property>
        <property name="mapperLocations" value="classpath:com/hww/dao/*.xml"></property>
    </bean>
    <!--mapper扫描器
    2.1如果Mapper.xml与Mapper.class在同一个包下且同名,spring 中MapperScannerConfigurer 扫描Mapper.class的同时会自动扫描同名的Mapper.xml并装配到Mapper.class。
    2.2如果Mapper.xml与Mapper.class不在同一个包下或者不同名,就必须使用配置mapperLocations指定mapper.xml的位置。(如idea中 maven 默认不打包java文件夹下的xml文件,未在pom.xml中配置resource的情况下)
    此时spring是通过识别mapper.xml中的
    -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.hww.dao"></property>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean"></property>
    </bean>

</beans>
  • mybatis-config.xml
<?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>
    <!--
        1. properties 属性
        2. settings 设置
        3. typeAliases 类型别名
        4. typeHandlers 类型处理器
        5. objectFactory 对象工厂
        6. plugins 插件
        7. environments 环境配置
               environment 环境变量
                    transactionManager 事务管理器
                    dataSource 数据源
        8. databaseidProvider 数据库厂商标识
        9. mappers 映射器
    -->

    <!--
        settings :它们会改变 MyBatis 的运行时行为,自己选择使用
        这里使用了mapUnderscoreToCamelCase,驼峰标识
        用来数据库字段下划线 可以映射到标准的驼峰表示字段上
    -->
    <settings>
        <!--设置列名映射的时候是否是驼峰标识-->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="lazyLoadingEnabled" value="true"></setting>
        <setting name="cacheEnabled" value="true"/>
         <setting name="logImpl" value="LOG4J"/>
    </settings>



</configuration>
  • 实体bean ,mapper接口,mapper.xml ,controller

 

controller

package com.hww.controller;

import com.hww.bean.Student;
import com.hww.dao.TeacherDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller
public class HelloController {

    @Autowired
    public TeacherDao teacherDao;

    @GetMapping("/hello")
    public String hello(){

        List<Student> allStu = teacherDao.getAllStu(1);
        System.out.println(allStu.toString());
        return "success";
    }

}

dao(mapper接口)

package com.hww.dao;

import com.hww.bean.Address;
import com.hww.bean.Student;
import com.hww.bean.Teacher;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface TeacherDao {


    public List<Student> getAllStu(Integer id);


}

sql映射文件

<?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">
<!--namespace:编写接口的全类名,就是告诉要实现该配置文件是哪个接口的具体实现-->
<mapper namespace="com.hww.dao.TeacherDao">


    <select id="getAllStu" resultType="com.hww.bean.Student" >
        select * from student where student_id =#{id}
    </select>

    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
</mapper>

日志配置,在mybatis-config.xml文件中settings属性下指定

# 全局日志配置
log4j.rootLogger=ERROR, stdout
# MyBatis 日志配置
log4j.logger.com.hww=TRACE
# 控制台输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

目录结构

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值