mybatis(七) mybatis与spring集成

本文主要是通过接口+映射文件的方式实现项目
一.创建一个java项目,新建javaProject
二.添加mybatis和mysql链接的jar包 ,还有spring的jar包
spring-core-5.0.0.M1.jar spring核心包
spring-context-4.3.7.jar spring配置文件的包,没有该包 配置文件无法加载
spring-beans-4.3.7.jar spring访问配置文件、创建和管理bean,如果不加此包,无法加载spring的配置文件
commons-logging-1.1.3.jar 程序运行时的活动的日志记录 spring必备类
spring-expression-4.3.7.jar spring表达式语言的类
commons-dbcp-1.2.2.jar 数据源的基类,没有此包无法创建数据源
commons-pool-1.3.jar 数据源的连接池 没有此包无法创建连接池也无法创建 数据源
mybatis-spring-1.3.1.jar mybatis与spring集成的包,主要是包含 SqlSessionFatory类
spring-jdbc-4.3.7.jar spring对JDBC的事务管理
TransactionAwareDataSourceProxy类
spring-tx-4.3.7.jar
spring-aop-4.3.7.jar spring 的AOP特性时所需的类
三.创建数据库,特别注意创建外键
四.编写mybstis-cofig.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">
<!-- mybatis配置 -->
<configuration>
    <!-- 配置别名 -->
    <typeAliases>
        <typeAlias type="com.mybatis.spring.pojo.User" alias="user" />
    </typeAliases>
    <!-- 配置JDBC -->
    <!-- Mybatis和Spring 集成之后,这些可以完全删除(注释掉),数据库连接的管理交给 Spring 来管理 -->
    <!--  
    <environments default="development">
        <environment id="development">

            <transactionManager type="JDBC"></transactionManager>

            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatisSpring" />
                <property name="username" value="root" />
                <property name="password" value="110119" />
            </dataSource>
        </environment>
    </environments>
    -->
    <!-- 映射文件组 -->
    <mappers>
    <!-- 映射文件 -->
        <mapper resource="com/mybatis/spring/mapper/UserMapper.xml" />
    </mappers>
</configuration>

五.spring映射文件—– 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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="  
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd  
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd  
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd  
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"
    default-autowire="byName" default-lazy-init="false">

    <!-- 数据源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/mybatisSpring" />
        <property name="username" value="root" />
        <property name="password" value="110119" />
    </bean>

    <!-- SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- dataSource属性指定要用到的连接池 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- configLocation属性指定的mybatis的核心配置文件 -->
        <property name="configLocation" value="mybatis-config.xml"></property>
    </bean>

    <!-- 配置映射文件,包括 SqlSessionFactory、接口 -->
    <bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!-- sqlSessionFactory 属性指定的用到的SqlSessionFactory实例 -->
        <property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
        <!-- mapperInterface 属性指定映射器接口 , 用于实现此接口并生成映射器对象 -->
        <property name="mapperInterface" value="com.mybatis.spring.dao.UserMapper"></property>
    </bean>
</beans>    

其实,mybatis-spring的集合,也是分层级的:
1)首先,需要配置数据源(dataSource)
用spring管理时,需要知道此项目是用的什么数据 库、 数据库的url、用户名、密码。该 datasource 用的类是 org.apache.commons.dbcp.BasicDataSource
dbcp : database connection pool
2)配置SqlSessionFactory
创建session工厂,就是mybatis没有集成spring之前需要创建 session工厂和session。该session工厂需要配置 连接池属性(dataSource) 本地mybatis配置路径(configLocation)用到的引用类是:org.mybatis.spring.SqlSessionFactoryBean
3)配置映射文件
需要配置的属性有:sqlSessionFactory(session工厂)、配置文件接口(配置的值是配置文件对应的接口本地路径)。
改配置用到的引用类是:org.mybatis.spring.mapper.MapperFactoryBean
六》实体类
1)User.java

/**
 * @author wuchao
 * @time 下午11:03:50
 * @description TODO
 */
package com.mybatis.spring.pojo;

import java.util.List;

/**
 * @author wuchao
 * @time 下午11:03:50
 * 
 */
public class User {

    private int UserId;
    private String userName;
    private List<Order> orderList;

    /**
     * @author wuchao
     * @time 下午11:13:53
     */
    public User() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @author wuchao
     * @time 下午11:14:00
     */
    public User(int userId, String userName, List<Order> orderList) {
        super();
        UserId = userId;
        this.userName = userName;
        this.orderList = orderList;
    }

    public int getUserId() {
        return UserId;
    }

    public void setUserId(int userId) {
        UserId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public List<Order> getOrderList() {
        return orderList;
    }

    public void setOrderList(List<Order> orderList) {
        this.orderList = orderList;
    }

}

Order.java

/**
 * @author wuchao
 * @time 下午11:11:01
 * @description TODO
 */
package com.mybatis.spring.pojo;

/**
 * @author wuchao
 * @time 下午11:11:01
 * 
 */
public class Order {

    private int orderId;
    private String orderName;
    private String orderNumber;
    private double money;
    private User user;

    /**
     * @author wuchao
     * @time 下午11:14:26
     */
    public Order() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @author wuchao
     * @time 上午12:16:27
     */
    public Order(int orderId, String orderName, String orderNumber,
            double money, User user) {
        super();
        this.orderId = orderId;
        this.orderName = orderName;
        this.orderNumber = orderNumber;
        this.money = money;
        this.user = user;
    }

    public int getOrderId() {
        return orderId;
    }

    public void setOrderId(int orderId) {
        this.orderId = orderId;
    }

    public String getOrderName() {
        return orderName;
    }

    public void setOrderName(String orderName) {
        this.orderName = orderName;
    }

    public String getOrderNumber() {
        return orderNumber;
    }

    public void setOrderNumber(String orderNumber) {
        this.orderNumber = orderNumber;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public double getMoney() {
        return money;
    }

    public void setMoney(double money) {
        this.money = money;
    }

}

七。UserMapper.java 接口

/**
 * @author wuchao
 * @time 下午11:25:48
 * @description TODO
 */
package com.mybatis.spring.dao;

import java.util.List;

import com.mybatis.spring.pojo.Order;
import com.mybatis.spring.pojo.User;

/**
 * @author wuchao
 * @time 下午11:25:48
 *
 */
public interface UserMapper {

    public User getUserByUserId(int userId);
}

八. UserMapper.xml 映射文件

<?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="com.mybatis.spring.dao.UserMapper">
    <resultMap type="user" id="resultUserMap">
        <id property="userId" column="user_id" />
        <result property="userName" column="user_name" />
        <collection property="orderList" ofType="com.mybatis.spring.pojo.Order"
            column="user_id">
            <id property="orderId" column="orders_id" />
            <result property="orderName" column="orders_name" />
            <result property="orderNumber" column="orders_number" />
            <result property="money" column="money" />
        </collection>
    </resultMap>
    <select id="getUserByUserId" parameterType="user" resultMap="resultUserMap">
        select o.* , u.user_name
        from user u , orders o
        where u.user_id = o.user_id and u.user_id = #{userId}
    </select>
</mapper>

九.测试类 Test.java

/**
 * @author wuchao
 * @time 上午12:17:14
 * @description TODO
 */
package com.mybatis.spring.test;

import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.mybatis.spring.dao.UserMapper;
import com.mybatis.spring.pojo.Order;
import com.mybatis.spring.pojo.User;

/**
 * @author wuchao
 * @time 上午12:17:14
 * 
 */
public class Test {

    private static ApplicationContext ctx;
    static {
        ctx = new ClassPathXmlApplicationContext(
                "applicationContext.xml");
    }
    public static void main(String args[]){
        UserMapper userMapper = (UserMapper) ctx.getBean("userMapper");
        User user = userMapper.getUserByUserId(1);
        System.out.println("ID为1的用户名字是:"+user.getUserName());
        System.out.println("=====获取到的订单列表=========");
        List<Order> orderList = user.getOrderList();
        System.out.println("该用户的订单有:"+orderList.size()+"个");
        for(Order order : orderList){
            System.out.println("订单的名字是:"+order.getOrderName());
            System.out.println("订单号是:"+order.getOrderNumber());
            System.out.println("订单金额是:"+order.getMoney());
        }
    }
}

十.测试结果和项目结构
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/wuchao_codingforever/article/details/79938581