zoukankan      html  css  js  c++  java
  • Spring整合Mybatis案例,献给初学的朋友

    • 今天我们来学习Spring整合Mybatis。

      开发环境:Ide:MyEclipse 2017 CI

          JDK:1.8

       首先我们简单的认识下这两个框架

     1、Mybatis

       MyBatis是一个支持普通SQL查询存储过程高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

      入门:1.所需Jar包 

      

     2、数据库搭建

      

     1 DROP TABLE IF EXISTS `smbms_user`;
     2 CREATE TABLE `smbms_user`  (
     3   `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
     4   `userCode` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户编码',
     5   `userName` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户名称',
     6   `userPassword` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '用户密码',
     7   `gender` int(10) DEFAULT NULL COMMENT '性别(1:女、 2:男)',
     8   `birthday` date DEFAULT NULL COMMENT '出生日期',
     9   `phone` varchar(15) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '手机',
    10   `address` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '地址',
    11   `userRole` bigint(20) DEFAULT NULL COMMENT '用户角色(取自角色表-角色id)',
    12   `createdBy` bigint(20) DEFAULT NULL COMMENT '创建者(userId)',
    13   `creationDate` datetime(0) DEFAULT NULL COMMENT '创建时间',
    14   `modifyBy` bigint(20) DEFAULT NULL COMMENT '更新者(userId)',
    15   `modifyDate` datetime(0) DEFAULT NULL COMMENT '更新时间',
    16   PRIMARY KEY (`id`) USING BTREE
    17 ) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;
    18 
    19 -- ----------------------------
    20 -- Records of smbms_user
    21 -- ----------------------------
    22 INSERT INTO `smbms_user` VALUES (1, 'admin', '系统管理员', '1234567', 1, '1983-10-10', '13688889999', '北京市海淀区成府路207号', 1, 1, '2013-03-21 16:52:07', NULL, NULL);
    23 INSERT INTO `smbms_user` VALUES (2, 'liming', '李明', '0000000', 2, '1983-12-10', '13688884457', '北京市东城区前门东大街9号', 2, 2, '2014-12-31 19:52:09', NULL, NULL);
    24 INSERT INTO `smbms_user` VALUES (5, 'hanlubiao', '韩路彪', '0000000', 2, '1984-06-05', '18567542321', '北京市朝阳区北辰中心12号', 2, 3, '2014-12-31 19:52:09', NULL, NULL);
    25 INSERT INTO `smbms_user` VALUES (6, 'zhanghua', '张华', '0000000', 2, '1983-06-15', '13544561111', '北京市海淀区学院路61号', 3, NULL, '2013-02-11 10:51:17', NULL, NULL);
    26 INSERT INTO `smbms_user` VALUES (7, 'wangyang', '王洋', '0000000', 2, '1982-12-31', '13444561124', '北京市海淀区西二旗辉煌国际16层', 3, NULL, '2014-06-11 19:09:07', NULL, NULL);
    27 INSERT INTO `smbms_user` VALUES (8, 'zhaoyan', '赵燕', '0000000', 2, '1986-03-07', '18098764545', '北京市海淀区回龙观小区10号楼', 3, NULL, '2016-04-21 13:54:07', NULL, NULL);
    28 INSERT INTO `smbms_user` VALUES (10, 'sunlei', '孙磊', '0000000', 3, '1981-01-04', '13387676765', '北京市朝阳区管庄新月小区12楼', 3, NULL, '2015-05-06 10:52:07', NULL, NULL);
    29 INSERT INTO `smbms_user` VALUES (11, 'sunxing', '孙兴', '0000000', 3, '1978-03-12', '13367890900', '北京市朝阳区建国门南大街10号', 3, NULL, '2016-11-09 16:51:17', NULL, NULL);
    30 INSERT INTO `smbms_user` VALUES (12, 'zhangchen', '张晨', '0000000', 3, '1986-03-28', '18098765434', '朝阳区管庄路口北柏林爱乐三期13号楼', 3, NULL, '2016-08-09 05:52:37', 1, '2016-04-14 14:15:36');
    31 INSERT INTO `smbms_user` VALUES (13, 'dengchao', '系邓超', '0000000', 1, '1981-11-04', '13689674534', '北京市海淀区北航家属院10号楼', 3, NULL, '2016-07-11 08:02:47', NULL, NULL);
    32 INSERT INTO `smbms_user` VALUES (14, 'yangguo', '系杨过', '0000000', 1, '1980-01-01', '13388886623', '北京市朝阳区北苑家园茉莉园20号楼', 3, NULL, '2015-02-01 03:52:07', NULL, NULL);
    33 INSERT INTO `smbms_user` VALUES (15, 'zhaomin', '系赵敏', '0000000', 1, '1987-12-04', '18099897657', '北京市昌平区天通苑3区12号楼', 2, NULL, '2015-09-12 12:02:12', NULL, NULL);

     3、导入Log4j配置

    log4j.rootLogger=debug, stdout,logfile
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.err
    log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
    
    log4j.appender.logfile=org.apache.log4j.FileAppender
    log4j.appender.logfile.File=jbit.log
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}%l %F %p %m%n

      4、导入Jdbc配置

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.uri=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf8
    jdbc.name=root
    jdbc.pwd=1234

      项目目录:

      Mybatis是一个开源的持久化框架,用于优化项目中的Dao的Impl,替代Dao的为Mapper的接口,具体实现一样,只是名字不一,便于区分

      我们在对应的Mapper中写入具体需要执行的操作,并且建立对应相同名字的Xml文件

      

      

      类:UserMapper.java

        

    package com.mapper;
    
    import java.util.List;
    
    import com.entuty.User;
    
    public interface UserMapper {
        /*
         * 查询所有的用户
         */
        List<User> Cxall();
    }

      UserMapper.xml配置

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    3 
    4 <mapper namespace="com.mapper.UserMapper">
    5     <select id="Cxall" resultType="User">
    6         select * from smbms_user
    7     </select>
    8 </mapper>

      注意上述4行 需要引入Mapper命名空间,如果在整合Spring时使用的是Mapper 代理的方式需要注意 Id必须和UserMapper中的方法名保持一致。

      创建SqlMapperConfig.xml(Mybatis核心配置文件)

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" >
     3 <configuration>
     4      <properties resource="Jdbc.properties"></properties>
     5     <typeAliases>                                                         给当前包中的所有类取别名,别名为类名
     6         <package name="com.entuty" />
     7     </typeAliases>    
     8 <environments default="development">                                配置数据源
     9         <environment id="development">
    10             <transactionManager type="JDBC"></transactionManager>
    11             <dataSource type="POOLED">
    12                 <property name="driver" value="${jdbc.driver}" />
    13                 <property name="url" value="${jdbc.uri}" />
    14                 <property name="username" value="${jdbc.name}" />
    15                 <property name="password" value="${jdbc.pwd}" />
    16             </dataSource>
    17         </environment>
    18     </environments>
    19     <mappers>                                      配置映射的Mapper
    20         <mapper resource="com/mapper/UserMapper.xml"/>
    21     </mappers>
    22 </configuration>

      Mybatis环境搭建完毕。

      2、Spring

      导入Spring Jar包 其中的核心包是

      创建业务层和业务层的实现类

      创建Spring核心配置文件 applicationContext.xml

      在Spring发布的时候并未想到和Mybatis整合,而后也没为了mybatis发布版本,所以是由Mybtais 提供的整合。

      1、优化数据源 将数据源转交给Spring容器管理,那么Mybatis配置中的原有配置数据源以及 对应实现类的Mapper.xml都交于Spring容器

      

    1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" >
     3 <configuration>
     5     <typeAliases>                                                         给当前包中的所有类取别名,别名为类名
     6         <package name="com.entuty" />
     7     </typeAliases>    
     8 </configuration>

      2.applicationContext.xml

      将jdbc配置也使用Spring获取  同时使用Dbcp数据源创建JDBc链接<?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:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
        <!-- DBCP/C3p0 -->
    
        <context:property-placeholder location="jdbc.properties" />
        <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
            <property name="driverClassName" value="${jdbc.driver}"></property>
            <property name="url" value="${jdbc.uri}"></property>
            <property name="username" value="${jdbc.name}"></property>
            <property name="password" value="${jdbc.pwd}"></property>
        </bean>

       在Mybatis中 用户执行一个操作的顺序是 首先获取Sqlsessionfactoey
        然后由Selsessionfactory创建 Sqlsession
        之后确认是Mapper代理还是 原生的Steamnemet
        在Spring中配置SqlsessionFactoryBean

    <!-- 会话工厂通过Spring获取 --> <!-- 配置org.mybatis.spring.SqlSessionFactoryBean 将会话工厂交给Spring --> <bean id="SqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 指定Mybatis核心配置文件位置 --> <property name="configLocation" value="classpath:SqlMapConfig.xml"></property> <!-- 指定数据源 --> <property name="dataSource" ref="dataSource"></property> <!-- 加载映射文件 --> <property name="mapperLocations"> <list> <value>com/mapper/*.xml</value> </list> </property> </bean>

    </beans>

      Userserviceimpl.Java

      

    package com.service.impl;
    
    import java.util.List;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.mybatis.spring.SqlSessionTemplate;
    import org.mybatis.spring.support.SqlSessionDaoSupport;
    
    import com.entuty.User;
    import com.mapper.UserMapper;
    import com.service.Userservice;
    
    public class Userserviceimpl implements Userservice {
        
    
        private UserMapper userMapper;
    
    
        public void setUserMapper(UserMapper userMapper) {
            this.userMapper = userMapper;
        }
    
        @Override
        public List<User> Cxall() {
            return userMapper.Cxall();
        }
    
    }

      对 private UserMapper userMapper; 进行注入

      同时使Spring容器来扫描对应的Mapper

      

      
        <bean id="map" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="basePackage" value="com.mapper"></property>
        </bean>
        
    
        
    
        <!-- 配置工厂 -->
         <bean id="sqlFactory" class="com.service.impl.Userserviceimpl">
            <property name="userMapper" ref="userMapper" />
        </bean> 
        

       测试:

        

    package com.Test;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.mybatis.spring.SqlSessionFactoryBean;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.entuty.User;
    import com.mapper.UserMapper;
    import com.service.Userservice;
    import com.service.impl.Userserviceimpl;
    
    public class Test {
        public static void main(String[] args) {
            ApplicationContext ap=new ClassPathXmlApplicationContext("applicationContext.xml");
            Userservice us=(Userservice) ap.getBean("sqlFactory");
            List<User> arr=us.Cxall();
            for (User user : arr) {
                System.out.println(user.getUsername());
            }
        }
    }

      结果:

      

    DEBUG - Fetching JDBC Connection from DataSource
    DEBUG - JDBC Connection [1606286799, URL=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf8, UserName=root@localhost, MySQL-AB JDBC Driver] will not be managed by Spring
    DEBUG - ==>  Preparing: select * from smbms_user 
    DEBUG - ==> Parameters: 
    DEBUG - <==      Total: 22
    DEBUG - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@757277dc]
    DEBUG - Returning JDBC Connection to DataSource
    系统管理员
    李明
    韩路彪
    张华
    王洋
    赵燕
    孙磊
    孙兴
    张晨
    系邓超
    系杨过
    系赵敏
    admin
    张三
    张三
    张三啊
    张三啊
    张三啊
    张三啊
    张三啊
    张三啊
    张三啊

      感谢大家,如有问题,敬请大牛指正! 

      

  • 相关阅读:
    Java日历表
    递归实现文件的大小计算
    将机器学习的个性化推荐与社会化机制相结合
    设计模式——抽象工厂模式
    从mysql到nosql
    设计模式——Adapter模式(变压器)
    Java 正则匹配
    对象集合转换为datatable
    sql1
    Oracle Index 相關知識
  • 原文地址:https://www.cnblogs.com/Mzcc/p/10241159.html
Copyright © 2011-2022 走看看