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 ...
随机推荐
- bzoj 3522 tree-dp 暴力
首先我们知道,这个题可以N^2的做,我们先确定一个根,然后讨论下情况,合法的三个点只可能有三种情况,第一种是三个点有相同的lca,这种情况我们可以用tree-dp来解决,用dis[i][j]表示i为根 ...
- linux学习记录.2.hello world.c
安装vim,指令: sudo apt-get install vim 建立一个子目录WorkSpace,指令 mkdir WorkSpace 转到该目录下,指令 cd WorkSpace 新建c文件, ...
- pip install bs4安装失败
使用管理员方式打开命令提示符框,然后pip install bs4即可安装成功:
- Neuroph studio 入门教程
PERCEPTRON Perceptron is a simple two layer neural network with several neurons in input layer, and ...
- 64_s2
sipwitch-1.9.15-3.fc26.x86_64.rpm 13-Feb-2017 09:19 162822 sipwitch-cgi-1.9.15-3.fc26.x86_64.rpm 13- ...
- 64_p4
perl-Test-Compile-1.3.0-4.fc26.noarch.rpm 12-Feb-2017 05:09 26486 perl-Test-ConsistentVersion-0.3.0- ...
- 动态更新echarts k线图数据 通过websocket取数据
1.加载插件,实例化chart.2.链接websocket3.接收数据,处理数据,调用chart的实例,不断更新数据<!DOCTYPE html><html><head ...
- 以应用带动SDN发展(CDN峰会 工信部杨崑)(转)
以应用带动SDN发展(CDN峰会 工信部杨崑) SDNAP推荐:这是在亚太全媒体SDN峰会由工信部研究院秘书长杨崑做的关于SDN的一个演讲,本人认为主讲者通过对整 个信息服务体系的精简归纳总结,剥 ...
- python【项目】:基于socket的FTP服务器
功能要求 1. 用户加密认证 2. 服务端采用 SocketServer实现,支持多客户端连接 3. 每个用户有自己的家目录且只能访问自己的家目录 4. 对用户进行磁盘配额.不同用户配额可不同 5. ...
- SVN文件上感叹号、加号、问号等图标的原因
黄色感叹号(有冲突): --这是有冲突了,冲突就是说你对某个文件进行了修改,别人也对这个文件进行了修改,别人抢在你提交之前先提交了,这时你再提交就会被提示发生冲突,而不允许你提交,防止你的提交覆盖了别 ...