zoukankan      html  css  js  c++  java
  • MyBatis之Spring整合

    MyBatis之Spring整合

    前言

    Spring、SpringMVC和MyBatis是目前企业开发的三大框架。本章我们将学习将Spring和MyBatis整合到一起,成为我们项目开发的技术骨架。

    引入依赖

    首先我们需要在Maven项目中添加依赖,Spring框架和MyBatis框架需要的依赖有:

    mybatis                                       MyBatis

    mybatis-spring                           MyBatis的Spring兼容包,用于整合MyBatis

    spring-jdbc                                 Spring的JDBC包,配置数据源时需要

    spring-test                                  Spring单元测试

    spring-context                            Spring上下文,提供IOC和AOP服务

    Junit                                            单元测试框架

    mysql-connector-java                   MySQL数据库驱动

    c3p0                                             连接池

    添加配置文件

    首先我们用properties文件配置JDBC的参数:

    示例代码:jdbc.properties

    driver=com.mysql.cj.jdbc.Driver

    url=jdbc:mysql://localhost/java1903?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false

    user=root

    password=123456

    接下来在Spring配置文件中整合MyBatis

    <!--1 引入属性文件,在配置中占位使用 -->

    <context:property-placeholder location="classpath:jdbc.properties" />

    <!--2 配置C3P0数据源 -->

    <bean id="datasource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

    <!--驱动类名 -->

    <property name="driverClass" value="${driver}" />

    <!-- url -->

    <property name="jdbcUrl" value="${url}" />

    <!-- 用户名 -->

    <property name="user" value="${user}" />

    <!-- 密码 -->

    <property name="password" value="${password}" />

    <!-- 当连接池中的连接耗尽的时候c3p0一次同时获取的连接数 -->

    <property name="acquireIncrement" value="5"></property>

    <!-- 初始连接池大小 -->

    <property name="initialPoolSize" value="10"></property>

    <!-- 连接池中连接最小个数 -->

    <property name="minPoolSize" value="5"></property>

    <!-- 连接池中连接最大个数 -->

    <property name="maxPoolSize" value="20"></property>

    </bean>

    <!--3 配置MyBatis会话工厂bean -->

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

    <!-- 数据源 -->

    <property name="dataSource" ref="datasource"/>

    <!-- 别名 -->

    <property name="typeAliasesPackage" value="com.qianfeng.mybatis.entity"/>

    <!-- sql映射文件路径 -->

    <property name="mapperLocations" value="classpath:mappers/*Mapper.xml"/>

    </bean>

    <!--4 自动扫描对象关系映射 -->

    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

    <!--指定会话工厂,如果当前上下文中只定义了一个则该属性可省去 -->

    <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>

    <!-- 指定要自动扫描接口的基础包,实现接口 -->

    <property name="basePackage" value="com.qianfeng.mybatis.dao"/>

    </bean>

    <!--5 容器自动扫描IOC组件 -->

    <context:component-scan base-package="com.qianfeng.mybatis"/>

    编写Mapper接口

    以一个基本的查询功能为例

    代码示例:

    /**

    * 用户DAO接口

    */

    public interface UserDAO {

    /**

    * 查询所有用户

    */

    List<User> selectAll();

    }

    编写Mapper 映射文件

    编写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">

    <!--mapper是映射,namespace是设置对应的DAO接口-->

    <mapper namespace="com.qianfeng.ssm.dao.UserDAO">

    <!--配置数据库返回结果映射-->

    <resultMap id="userMap" type="User">

    <!--id用于配置主键,property是实体类的属性名,column是表中的字段名-->

    <id property="id" column="u_id"></id>

    <!--result配置主键外其他列-->

    <result property="name" column="u_name"></result>

    <result property="password" column="u_password"></result>

    <result property="realname" column="u_realname"></result>

    <result property="age" column="u_age"></result>

    <result property="gender" column="u_gender"></result>

    <result property="img" column="u_img"></result>

    </resultMap>

    <!--配置查询语句-->

    <select id="selectAll" resultMap="userMap">

    select * from tb_user

    </select>

    </mapper>

    Spring整合JUnit进行单元测试

    使用Spring整合JUnit,测试Mapper接口是否能用SpringIOC实现注入:

    代码示例

    @ContextConfiguration(locations = "classpath:applicationContext.xml")

    @RunWith(SpringJUnit4ClassRunner.class)

    public class TestDAO {

    @Resource

    UserDAO userDAO;

    @Test

    public void testUserDAO(){

    List<User> users = userDAO.selectAll();

    users.forEach((user)->System.out.println(user));

    }

    }

    总结

    使用Spring整合MyBatis后,能够利用Spring强大的IOC机制,将Mapper接口的代理对象注入进来,从而避免了手动创建SqlSessionFactory和SqlSession对象的麻烦,同时Spring对SqlSession的访问方式进行了优化,解决了SQLSession的线程安全问题。

  • 相关阅读:
    Datawhale编程实践(LeetCode 腾讯精选练习50)Task11
    Datawhale编程实践(LeetCode 腾讯精选练习50)Task10
    Datawhale编程实践(LeetCode 腾讯精选练习50)Task9
    Datawhale编程实践(LeetCode 腾讯精选练习50)Task8
    Datawhale编程实践(LeetCode 腾讯精选练习50)Task7
    Java多线程之三volatile与等待通知机制示例
    Java多线程之一
    [WC2021] 括号路径
    [CF1375H] Set Merging
    [CF1342E] Placing Rooks
  • 原文地址:https://www.cnblogs.com/qfchen/p/11590429.html
Copyright © 2011-2022 走看看