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、数据库搭建
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案例,献给初学的朋友的更多相关文章
- Spring整合MyBatis案例练习笔记
需求: 用户登录 技术需求: Servlet+Spring+Mybatis+MVC+jsp+css+html+jquery 数据库设计: 用户表 Sql语句设计: select * from t_us ...
- spring基础:什么是框架,框架优势,spring优势,耦合内聚,什么是Ioc,IOC配置,set注入,第三方资源配置,综合案例spring整合mybatis实现
知识点梳理 课堂讲义 1)Spring简介 1.1)什么是框架 源自于建筑学,隶属土木工程,后发展到软件工程领域 软件工程中框架的特点: 经过验证 具有一定功能 半成品 1.2)框架的优势 提高开发效 ...
- Spring整合MyBatis小结
MyBatis在Spring中的配置 我们在Spring中写项目需要运用到数据库时,现在一般用的是MyBatis的框架来帮助我们书写代码,但是学习了SSM就要知道M指的就是MyBatis,在此,在Sp ...
- SpringBoot整合Mybatis案例
SpringBoot整合Mybatis案例 2019/7/15以实习生身份入职公司前端做Angular ,但是感觉前途迷茫,于是乎学习一下Java的框架——SpringBooot. 参照大神博客:ht ...
- Spring学习总结(六)——Spring整合MyBatis完整示例
为了梳理前面学习的内容<Spring整合MyBatis(Maven+MySQL)一>与<Spring整合MyBatis(Maven+MySQL)二>,做一个完整的示例完成一个简 ...
- Spring学习总结(五)——Spring整合MyBatis(Maven+MySQL)二
接着上一篇博客<Spring整合MyBatis(Maven+MySQL)一>继续. Spring的开放性和扩张性在J2EE应用领域得到了充分的证明,与其他优秀框架无缝的集成是Spring最 ...
- 分析下为什么spring 整合mybatis后为啥用不上session缓存
因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验 ...
- 2017年2月16日 分析下为什么spring 整合mybatis后为啥用不上session缓存
因为一直用spring整合了mybatis,所以很少用到mybatis的session缓存. 习惯是本地缓存自己用map写或者引入第三方的本地缓存框架ehcache,Guava 所以提出来纠结下 实验 ...
- 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 ...
随机推荐
- 我的Mac使用笔记
此篇记录mac使用相关的一些东西,不断更新中... 1.Mac 安装homebrew : https://brew.sh/index_zh-cn.html /usr/bin/ruby -e " ...
- windows程序设计.第一个windos程序
Windows程序设计(第5版) windows程序需要调用API. 第一个Windows程序 /*HelloMsg.c -- Displays "Hello World!" in ...
- Python异常捕捉try except else finally有return时执行顺序探究
转载自 https://www.cnblogs.com/JohnABC/p/4065437.html 学习python或者其他有异常控制的编程语 言, 大家很有可能说try except finall ...
- 01布尔模型&倒排索引
原文链接: http://www.cnblogs.com/jacklu/p/8379726.html 博士一年级选了这门课 SEEM 5680 Text Mining Models and Appli ...
- UNDO自我理解总结
[场景] 当在更新数据的时候,发现更新的值写错了,这时就需要将已经更新的地方恢复到原始数据. [基本概念] 在更新的过程中,Oracle会将原始的数据都放入到UNDO里,这样当以上情况发生后,就可以从 ...
- php+mysql缓存技术的实现
本教程适合于那些对缓存SQL查询以减少数据库连接与执行的负载.提高脚本性能感兴趣的PHP程序员.概述 许多站点使用数据库作为站点数据存储的容器.数据库包含了产器信息.目录结构.文章或者留言本,有些数据 ...
- [ python ] 作业:选课系统
功能代码实现源地址:https://www.cnblogs.com/lianzhilei/p/5832691.html 如有侵权,立即删除 本文主要是分析 选课系统 实现思路及上面代码的实现过程 ...
- Caffe学习系列(8):solver,train_val.prototxt,deploy.prototxt及其配置
solver是caffe的核心. net: "examples/mnist/lenet_train_test.prototxt" test_iter: 100 test_inter ...
- Char 与 Byte
var c: Char; b: Byte; begin c := 'A'; ShowMessage(c); //A b := ; ShowMessage(IntToStr(b)); c := Chr( ...
- [Matlab]Upper Triangularization & Back Substitution代码
用来做数值计算作业的代码,来自Numerical Methods Using Matlab (4th Edition) [John H. Mathews, Kurtis K. Fink],改了一下注释 ...