spring和mybactis的整合

spring和mybactis的整合

Spring和mybactis的整合其实很简单,在Spring中我们可以将bean当做事务来管理,而在这里我们将mybactis中的接口也可以看是一个bean,吧这些接口交个Spring来管理它。

例子:

数据库的表机构:

User表:

CREATE TABLE `user` (

  `id` int(10) unsigned NOT NULLAUTO_INCREMENT,

  `username` varchar(64) NOT NULLDEFAULT '',

  `mobile` varchar(16) NOT NULLDEFAULT '',

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES ('1', 'yiibai', '13838009988');
INSERT INTO `user` VALUES ('2', 'saya', '13838009988');

Order表:

 

CREATE TABLE `order` (
  `order_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL DEFAULT '0',
  `order_no` varchar(16) NOT NULL DEFAULT '',
  `money` float(10,2) unsigned DEFAULT '0.00',
  PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;
INSERT INTO `order` VALUES ('1', '1', '1509289090', '99.90');
INSERT INTO `order` VALUES ('2', '1', '1519289091', '290.80');
INSERT INTO `order` VALUES ('3', '1', '1509294321', '919.90');
INSERT INTO `order` VALUES ('4', '1', '1601232190', '329.90');
INSERT INTO `order` VALUES ('5', '1', '1503457384', '321.00');
INSERT INTO `order` VALUES ('6', '1', '1598572382', '342.00');
INSERT INTO `order` VALUES ('7', '1', '1500845727', '458.00');
INSERT INTO `order` VALUES ('8', '1', '1508458923', '1200.00');
INSERT INTO `order` VALUES ('9', '1', '1504538293', '2109.00');
INSERT INTO `order` VALUES ('10', '1', '1932428723', '5888.00');
INSERT INTO `order` VALUES ('11', '1', '2390423712', '3219.00');
INSERT INTO `order` VALUES ('12', '1', '4587923992', '123.00');
INSERT INTO `order` VALUES ('13', '1', '4095378812', '421.00');
INSERT INTO `order` VALUES ('14', '1', '9423890127', '678.00');
INSERT INTO `order` VALUES ('15', '1', '7859213249', '7689.00');
INSERT INTO `order` VALUES ('16', '1', '4598450230', '909.20');

实体类:

User:

package com.huweiyang.bean;

/*

 * 编写user表的实体类

 */

publicclassUser{

   privateintid;

   privateStringusername;

   publicintgetId(){

     returnid;

   }

   publicvoidsetId(intid){

     this.id=id;

   }

   publicStringgetUsername(){

     returnusername;

   publicvoidsetUsername(Stringusername){

     this.username=username;

   publicStringgetMobile(){

     returnmobile;

   publicvoidsetMobile(Stringmobile){

     this.mobile=mobile;

   privateStringmobile;

Order:

package com.huweiyang.bean;

/*

 * 编写order表的实体类

 */

publicclassOrder{

   privateintorder_id;

   privateStringorder_no;

   privateStringmoney;

   privateintuser_id;

   publicintgetOrder_id(){

     returnorder_id;

   }

   publicvoidsetOrder_id(intorder_id){

     this.order_id=order_id;

   }

   publicStringgetOrder_no(){

     returnorder_no;

   }

   publicvoidsetOrder_no(Stringorder_no){

     this.order_no=order_no;

   }

   publicStringgetMoney(){

     returnmoney;

   }

   publicvoidsetMoney(Stringmoney){

     this.money=money;

   }

   publicintgetUser_id(){

     returnuser_id;

   }

   publicvoidsetUser_id(intuser_id){

     this.user_id=user_id;

   }

   publicUsergetUser(){

     returnuser;

   }

   publicvoidsetUser(Useruser){

     this.user=user;

   }

   privateUseruser;

}

实体类的映射文件:

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "mybatis-3-mapper.dtd">

<!-- 这里的路径是这个映射文件对应的接口路径 -->

<mapper namespace="com.huweiyang.maper.UserMaperIU">

 

<!-- 配置resultMap属性这里的resultMap是查询User中的id-->

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

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

     <result property="username" column="username"/>

     <result property="mobile" column="mobile"/>    

   </resultMap>

<!-- 编写查询user idsql语句 -->

   <select id="getUser" resultMap="MapUser"parameterType="int">

     SELECT*

     FROMuser

     WHEREid=#{id}

   </select>

<!-- 使用associationOrderuser表关联,实现多对一的思想 -->

<!-- 这里的resultMap中的type属性对应的是实体类的类名,而,result中的property属性表示的是在我们程序中与数据表中的字段对应的属性  -->

<!-- column属性的值也就是数据表中的对应的字段 -->

   <resultMap type="Order" id="MapOrder">

        <result property="order_id" column="order_id"/>

        <result property="user_id" column="order_id"/>

        <result property="order_no" column="order_no"/>

        <result property="money" column="money"/>

<!--    这里的association属性中的property的值是我们数据表中的表名,而JavaType是我们的实体类的类名 -->

     <association property="user" javaType="User">

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

        <result property="username" column="username"/>

        <result property="mobile" column="mobile"/>

     </association>

   </resultMap>

<!-- 编写关联两种表的sql语句 -->

   <select id="getOrderSelect" resultMap="MapOrder" parameterType="int">

     SELECT

     u.*,o.*FROM `user` u, `order` o

     WHEREu.id=o.user_id AND u.id=#{id}

   </select>

</mapper>

 

       Mybactis的主配置文件:

<?xml version="1.0"encoding="UTF-8"?>

<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTDconfig 3.0//EN" "mybatis-3-config.dtd">

<configuration>

<!-- 这里的typeAliases配置的是实体类的路径 -->

   <typeAliases>

     <typeAlias type="com.huweiyang.bean.User"/>

     <typeAlias type="com.huweiyang.bean.Order"/>

   </typeAliases>

  

   <mappers>

<!-- 这里的是表名实体类的映射文件对应的路径-->

     <mapper resource="com/huweiyang/maper/userMaper.xml"/>

   </mappers>

</configuration>

Spring的配置文件:

这里也就是Spring和mybactis整合的重点

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd

     http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.3.xsd">

<!--    这个配置文件的主要目的是将mybactis看做是事务来处理-->

    

    

<!--    这里配置的是数据库就连接方式,这里的idclass的值是不能被改变的,除非是你用的不是dbcp的路径方法,但是都是大同小异-->

     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />

        <property name="url"

        value="jdbc:mysql://127.0.0.1:3306/springmv?characterEncoding=utf8"/>

        <property name="username" value="root"/>

        <property name="password" value="lookme"/>

     </bean>

    

<!--    这里配置的是mybactis的主配置文件的名称,和配置sqlsessionFactory -->

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

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

        <property name="configLocation" value="conf.xml"/>

     </bean>

    

<!--    将接口给Spring当做是一个事务来管理 -->

   <bean id="userMaper" class="org.mybatis.spring.mapper.MapperFactoryBean">

     <property name="sqlSessionFactory" ref="sqlSessionFactory" />

     <property name="mapperInterface" value="com.huweiyang.maper.UserMaperIU" />

   </bean>

</beans>

接口:

package com.huweiyang.maper;

 

import java.util.List;

 

import com.huweiyang.bean.Order;

import com.huweiyang.bean.User;

 

public interface UserMaperIU {

//定义一个查询user表的方法

       public User getUser(intid);

//定义一个多对一的查询方法     

       public List<Order>getOrderSelect(int id);

}

测试类:

 package com.huweiyang.Mapping;

import java.util.List;

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

import com.huweiyang.bean.Order;
import com.huweiyang.bean.User;
import com.huweiyang.maper.UserMaperIU;

public class Mapping {
    
    public static void main(String[] args) {
//        读取Spring配置文件
        ApplicationContext sr = new    ClassPathXmlApplicationContext("applicationContext.xml");
//        调用接口中的查询方法
        UserMaperIU useriu = sr.getBean(UserMaperIU.class);
        User user = useriu.getUser(1);
        System.out.println(user.getUsername());
        
        System.out.println("得到用户id为1的所有订单列表:");
        System.out.println("=============================================");

//        调用多对有的查询方法
        List<Order> list = useriu.getOrderSelect(1);
        for(Order order:list){
            System.out.println(order.getOrder_no());
            System.out.println(order.getMoney());
        }
        
        
    }

}

 结构如图:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值