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
    张三
    张三
    张三啊
    张三啊
    张三啊
    张三啊
    张三啊
    张三啊
    张三啊

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

      

  • 相关阅读:
    archlinux .bash_history
    Ubuntu环境下挂载新硬盘
    软碟通 UltraISO U启替代品 Win32DiskImager 无设备 无盘符 无u盘 无优盘 解决方案 之diskpart
    delphi Integer overflow
    MSBuild Tools offline
    delphi synedit免费的拼写检查器dll
    git 自定义命令行
    lua编译
    gcc ar
    Windows Subsystem for Linux (WSL)挂载移动硬盘U盘 卸载 c d 盘
  • 原文地址:https://www.cnblogs.com/Mzcc/p/10241159.html
Copyright © 2011-2022 走看看