本文主要是通过接口+映射文件的方式实现项目
一.创建一个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());
}
}
}
十.测试结果和项目结构