Spring集成MyBatis持久层框架
一.MyBatis介绍
MyBatis 是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的JDBC代码和手动设置参数以及获取结果集,可以使用简单的XML或注解将Java的POJO对象映射成数据库中的记录。
创建MyBatis SQL映射XML文件:MyBatis Generator使用示例
MyBatis配置,创建resources/mybatis/mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org/DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<!-- 设置mybatis内置日志工厂 -->
<setting name="logImpl" value="LOG4J"/>
<!-- 支持Null值(value)输出Key -->
<setting name="callSettersOnNulls" value="true"/>
</settings>
</configuration>
Maven导入MyBatis相关依赖,编辑pom.xml
<!-- 导入database依赖,使用druid作连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.44</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.10.RELEASE</version>
</dependency>
二.方法一(通过MapperScannerConfigurer实现,直接对Mapper接口进行代理)
数据库相关bean对象配置,创建resources/spring/applicationContext_database.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/mybatis/db.properties"/>
</bean> <!-- dataSource配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/> <property name="filters" value="log4j"/>
<property name="maxActive" value="5"/>
<property name="initialSize" value="1"/>
<property name="maxWait" value="6000"/>
</bean> <!-- mybatis文件配置,mapper.xml文件扫描 -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:/mybatis/mybatis.xml"/>
<property name="mapperLocations" value="classpath:/mybatis/mapper/*Mapper.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean> <!-- mapper注解扫描器配置,扫描@MapperScan注解,自动生成代码对象 -->
<bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.learn.spring.server.dao"/>
<property name="sqlSessionFactoryBeanName" value="sessionFactory"/>
</bean>
</beans>
UserDOMapper添加注解@MapperScan,编辑dao/UserDOMapper.java
/**
* 接口中的方法名称要和对应的MyBatis映射文件中的语句的id值一样
*/
@MapperScan
public interface UserDOMapper {
int deleteByPrimaryKey(Integer id); int insert(UserDO record); int insertSelective(UserDO record); UserDO selectByPrimaryKey(Integer id); int updateByPrimaryKeySelective(UserDO record); int updateByPrimaryKey(UserDO record);
}
三.方法二(继承SqlSessionDaoSupport,并实现SqlSession接口)
数据库相关bean对象配置,创建resources/spring/applicationContext_database.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:/mybatis/db.properties"/>
</bean> <!-- dataSource配置 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/> <property name="filters" value="log4j"/>
<property name="maxActive" value="5"/>
<property name="initialSize" value="1"/>
<property name="maxWait" value="6000"/>
</bean> <!-- mybatis配置,mapper.xml文件扫描 -->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:/mybatis/mybatis.xml"/>
<property name="mapperLocations" value="classpath:/mybatis/mapper/*Mapper.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
继承SqlSessionDaoSupport,并实现SqlSession接口,创建dao/impl/BaseDaoImpl.java
public class BaseDaoImpl extends SqlSessionDaoSupport implements SqlSession {
@Override
@Resource
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
super.setSqlSessionFactory(sqlSessionFactory);
}
public <T> T selectOne(String s) {
return getSqlSession().selectOne(s);
}
public <T> T selectOne(String s, Object o) {
return getSqlSession().selectOne(s, o);
}
public <E> List<E> selectList(String s) {
return getSqlSession().selectList(s);
}
public <E> List<E> selectList(String s, Object o) {
return getSqlSession().selectList(s, o);
}
public <E> List<E> selectList(String s, Object o, RowBounds rowBounds) {
return getSqlSession().selectList(s, o, rowBounds);
}
public <K, V> Map<K, V> selectMap(String s, String s1) {
return getSqlSession().selectMap(s, s1);
}
public <K, V> Map<K, V> selectMap(String s, Object o, String s1) {
return getSqlSession().selectMap(s, o, s1);
}
public <K, V> Map<K, V> selectMap(String s, Object o, String s1, RowBounds rowBounds) {
return getSqlSession().selectMap(s, o, s1, rowBounds);
}
public <T> Cursor<T> selectCursor(String s) {
return getSqlSession().selectCursor(s);
}
public <T> Cursor<T> selectCursor(String s, Object o) {
return getSqlSession().selectCursor(s, o);
}
public <T> Cursor<T> selectCursor(String s, Object o, RowBounds rowBounds) {
return getSqlSession().selectCursor(s, o, rowBounds);
}
public void select(String s, Object o, ResultHandler resultHandler) {
getSqlSession().select(s, o, resultHandler);
}
public void select(String s, ResultHandler resultHandler) {
getSqlSession().select(s, resultHandler);
}
public void select(String s, Object o, RowBounds rowBounds, ResultHandler resultHandler) {
getSqlSession().select(s, o, rowBounds, resultHandler);
}
public int insert(String s) {
return getSqlSession().insert(s);
}
public int insert(String s, Object o) {
return getSqlSession().insert(s, o);
}
public int update(String s) {
return getSqlSession().update(s);
}
public int update(String s, Object o) {
return getSqlSession().update(s, o);
}
public int delete(String s) {
return getSqlSession().delete(s);
}
public int delete(String s, Object o) {
return getSqlSession().delete(s, o);
}
public void commit() {
getSqlSession().commit();
}
public void commit(boolean b) {
getSqlSession().commit(b);
}
public void rollback() {
getSqlSession().rollback();
}
public void rollback(boolean b) {
getSqlSession().rollback(b);
}
public List<BatchResult> flushStatements() {
return getSqlSession().flushStatements();
}
/**
* 实现空方法,SqlSession由Spring管理并关闭,如果手工关闭,则会拋异常
* java.lang.UnsupportedOperationException: Manual close is not allowed over a Spring managed SqlSession
*/
public void close() {
}
public void clearCache() {
getSqlSession().clearCache();
}
public Configuration getConfiguration() {
return getSqlSession().getConfiguration();
}
public <T> T getMapper(Class<T> aClass) {
return getSqlSession().getMapper(aClass);
}
public Connection getConnection() {
return getSqlSession().getConnection();
}
}
继承BaseDaoImol,并实现UserDOMapper接口,创建dao/impl/UserDaoImpl.java
@Repository
public class UserDaoImpl extends BaseDaoImpl implements UserDOMapper {
public int deleteByPrimaryKey(Integer id) {
return delete("com.learn.spring.server.dao.UserDOMapper.deleteByPrimaryKey", id);
} public int insert(UserDO record) {
return insert("com.learn.spring.server.dao.UserDOMapper.insert", record);
} public int insertSelective(UserDO record) {
return insert("com.learn.spring.server.dao.UserDOMapper.insertSelective", record);
} public UserDO selectByPrimaryKey(Integer id) {
return selectOne("com.learn.spring.server.dao.UserDOMapper.selectByPrimaryKey", id);
} public int updateByPrimaryKeySelective(UserDO record) {
return update("com.learn.spring.server.dao.UserDOMapper.updateByPrimaryKeySelective", record);
} public int updateByPrimaryKey(UserDO record) {
return update("com.learn.spring.server.dao.UserDOMapper.updateByPrimaryKey", record);
}
}
四.调用示例
Spring框架直接注入UserDOMapper,创建service/UserService.java
@Service
public class UserServiceImpl implements UserService { @Resource
private UserDOMapper userDao; public UserDO get(Integer id) {
return userDao.selectByPrimaryKey(id);
}
}
Spring集成MyBatis持久层框架的更多相关文章
- MyBatis持久层框架使用总结 转载
MyBatis持久层框架使用总结 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google co ...
- MyBatis持久层框架学习之01 MyBatis的起源和发展
一.MyBatis的简介 MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架. MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. MyB ...
- MyBatis持久层框架使用总结
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis . 2 ...
- SpringBoot2.0 基础案例(09):集成JPA持久层框架,简化数据库操作
一.JAP框架简介 JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范.主要是为了简化持久层开发以及整合ORM技术,结束H ...
- spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架
前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...
- 持久层框架JPA与Mybatis该如何选型
一.现状描述 目前java 持久层ORM框架应用最广泛的就是JPA和Mybatis.JPA只是一个ORM框架的规范, 对该规范的实现比较完整就是Spring Data JPA(底层基于Hibernat ...
- spring boot整合双持久层框架jpa、mybatis
公司之前用的是spring boot + jpa,但由于jpa无法完美的解决某些动态查询问题,就使用的jdbcTemplate 动态封装SQL,由于代码相对复杂,可读性差,现准备再引入mybatis. ...
- SSM框架开发web项目系列(五) Spring集成MyBatis
前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...
- Spring Boot 2.X(二):集成 MyBatis 数据层开发
MyBatis 简介 概述 MyBatis 是一款优秀的持久层框架,支持定制化 SQL.存储过程以及高级映射.它采用面向对象编程的方式对数据库进行 CRUD 的操作,使程序中对关系数据库的操作更方便简 ...
随机推荐
- mybatis教程3(映射文件)
MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% ...
- 【NET CORE微服务一条龙应用】第一章 网关使用与配置
简介 微服务的系统应用中,网关系统使用的是ocelot,ocelot目前已经比较成熟了 ocelot就不做介绍了,等整体介绍完后再进行各类扩展介绍,ocelot源码地址:https://github. ...
- xshell与xftp使用注意
1.xshell报ssh服务器拒绝了密码,请再试一次 xshell登录使用的用户名不能是root,要是服务器的用户名,否则连接时会报 ssh服务器拒绝了密码,请再试一次.将root改成服务器用户名即可 ...
- Shell 示例:利用 $RANDOM 产生随机整数
代码如下: #!/bin/bash # $RANDOM 在每次调用的时候,返回一个不同的随机整数 # 指定的范围是: 0 - 32767 MAXCOUNT=10 count=1 echo echo & ...
- Sublime Text3 远程 Linux
ctrl+shift+p快捷键 ,打开命令面板 搜索命令 Install Packages,选中,Enter 稍等几秒,重新出现了面板,搜索sftp插件,选中 Enter 显示安装成功,提示你如何使用 ...
- 【PostMan】1、Postman 发送json格式请求
Postman 是一个用来测试Web API的Chrome 外挂软件,可由google store 免费取得并安装于Chrome里,对于有在开发Web API的开发者相当有用,省掉不少写测试页面呼叫的 ...
- linux学习笔记-文件相关知识
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 一.文件属性 在当前用户家目录下以ls -al命令输出为例: -rw-r--r-- 1 renren ...
- 正则表达式+XML+反射+设计模式作业
正则表达式+XML+反射+设计模式作业 一. 填空题 Class.forName('com.bjsxt.stumgr.entity.Student').newInstance( ); 语句的作用 ...
- JS 中的 __proto__ 、prototype、constructor
首先 先解释这三个属性: (1) prototype : 它是函数独有的,从一个函数指向一个对象(函数的原型),含义是函数的原型对象,也就是这个函数所创建的实例的原型对象.(普通函数的该属性没有作用 ...
- 學習Echart 2.2.7
<!-- Echart 2.2.7 http://echarts.baidu.com/echarts2/doc/example/force1.html#macarons https://gith ...