• 今天我们来学习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、数据库搭建

  

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

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

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

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

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<properties resource="Jdbc.properties"></properties>
<typeAliases> 给当前包中的所有类取别名,别名为类名
<package name="com.entuty" />
</typeAliases>    
<environments default="development">                                配置数据源
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.uri}" />
<property name="username" value="${jdbc.name}" />
<property name="password" value="${jdbc.pwd}" />
</dataSource>
</environment>
</environments>
<mappers>                                      配置映射的Mapper
<mapper resource="com/mapper/UserMapper.xml"/>
</mappers>
</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 [, 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:
DEBUG - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@757277dc]
DEBUG - Returning JDBC Connection to DataSource
系统管理员
李明
韩路彪
张华
王洋
赵燕
孙磊
孙兴
张晨
系邓超
系杨过
系赵敏
admin
张三
张三
张三啊
张三啊
张三啊
张三啊
张三啊
张三啊
张三啊

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

  

Spring整合Mybatis案例,献给初学的朋友的更多相关文章

  1. Spring整合MyBatis案例练习笔记

    需求: 用户登录 技术需求: Servlet+Spring+Mybatis+MVC+jsp+css+html+jquery 数据库设计: 用户表 Sql语句设计: select * from t_us ...

  2. spring基础:什么是框架,框架优势,spring优势,耦合内聚,什么是Ioc,IOC配置,set注入,第三方资源配置,综合案例spring整合mybatis实现

    知识点梳理 课堂讲义 1)Spring简介 1.1)什么是框架 源自于建筑学,隶属土木工程,后发展到软件工程领域 软件工程中框架的特点: 经过验证 具有一定功能 半成品 1.2)框架的优势 提高开发效 ...

  3. Spring整合MyBatis小结

    MyBatis在Spring中的配置 我们在Spring中写项目需要运用到数据库时,现在一般用的是MyBatis的框架来帮助我们书写代码,但是学习了SSM就要知道M指的就是MyBatis,在此,在Sp ...

  4. SpringBoot整合Mybatis案例

    SpringBoot整合Mybatis案例 2019/7/15以实习生身份入职公司前端做Angular ,但是感觉前途迷茫,于是乎学习一下Java的框架——SpringBooot. 参照大神博客:ht ...

  5. Spring学习总结(六)——Spring整合MyBatis完整示例

    为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...

  6. Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)二

    接着上一篇博客<Spring整合MyBatis(Maven+MySQL)一>继续. Spring的开放性和扩张性在J2EE应用领域得到了充分的证明,与其他优秀框架无缝的集成是Spring最 ...

  7. 分析下为什么spring 整合mybatis后为啥用不上session缓存

    因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验 ...

  8. 2017年2月16日 分析下为什么spring 整合mybatis后为啥用不上session缓存

    因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验 ...

  9. spring整合mybatis错误:class path resource [config/spring/springmvc.xml] cannot be opened because it does not exist

    spring 整合Mybatis 运行环境:jdk1.7.0_17+tomcat 7 + spring:3.2.0 +mybatis:3.2.7+ eclipse 错误:class path reso ...

随机推荐

  1. Travelling(HDU3001+状压dp+三进制+最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题目: 题意:n个城市,m条边,每条边都有一个权值,问你经过所有的城市且每条边通过次数不超过两次 ...

  2. Django之组合搜索组件(一)

    什么是组合搜索呢? 比如你想买车,但手里只有10万块!所以你只能在10万块的车里挑选,但你喜欢黑色,因为觉得很高端大气上档次,说白了就是装逼杠杠的!之后售车姐给你拿了个表表,你看到了低于10万块且颜色 ...

  3. jQuery实现简单前端搜索功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 【Git】git clone与git pull区别

    从字面意思也可以理解,都是往下拉代码,git clone是克隆,git pull 是拉.但是,也有区别: 从远程服务器克隆一个一模一样的版本库到本地,复制的是整个版本库,叫做clone.(clone是 ...

  5. kernel随机生成MAC地址的接口

    /**  * eth_random_addr - Generate software assigned random Ethernet address * @addr: Pointer to a si ...

  6. 大数据系列之kafka监控kafkaoffsetmonitor安装

    1.下载kafkaoffsetmonitor的jar包,可以到github搜索kafkaoffsetmonitor,第一个就是,里面可以下载编译好了的包. KafkaOffsetMonitor-ass ...

  7. 如何读懂statspack报告

    前言:这篇文章是我从网上找到的,但可惜不知道是哪位大侠写(译)的,因此这里无法注明了.仔细看了看,这篇文章对初学者应该很有帮助,写的比较详细,通俗易懂,因此整理一下,便于阅读:内容略有调整,不单做调整 ...

  8. centos7安装完成后的一些配置

    1.打开终端 输入 sudo yum -y update 先更新软件包 2.这是输入语言 应用程序->系统工具->设置->区域和语言->+   ->汉语(中国)-> ...

  9. 统计学习方法三:K近邻

    一.什么是K近邻? K近邻是一种基本的分类和回归方法. 在分类时,对新的实例,根据其K个最近邻的训练实例的类别,通过多数表决权等方式预测其类别. 通俗的讲,找K个和其关系最近的邻居,哪个类别的邻居多, ...

  10. java版云笔记(八)之关联映射

    Mybatis关联映射 通过数据库对象之间的关联关系,反映到到实体对象之间的引用. 加载多个表中的关联数据,封装到我们的实体对象中. 当业务对数据库进行关联查询. 关联 <association ...