前言

作者: Ant QQ:517377100

相对于使用JdbcTemplate,Mybatis可自动建立pojo类型与数据库列的映射关系,数据库访问层的开发简单了许多

所有数据库访问操作,均封装在各个Mapper接口中,接口的实现即为数据库sql操作,sql可以注解的形式提供,也可以定义在xml文件中(复杂的sql操作优选xml)

引入Mybatis框架步骤简单,这里做一些整理

本人集成开发环境使用 Intellij

添加Mybatis依赖项

pom.xml增加如下依赖项

    <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency> <dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.2</version>
</dependency>

Bean声明

相关Bean的声明统一在DatabaseConfiguration类型中

其中包含了UserMapper、CommodityMapper、CommodityCategoryMapper三个Bean的声明

代码如下

@Configuration
public class DatabaseConfiguration {
@Bean
public DataSource dataSource() {
...
} @Bean
public SqlSessionFactory sqlSessionFactory() throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource());
sqlSessionFactoryBean.setTypeAliases(new Class[]{User.class, Commodity.class, CommodityCategory.class});
sqlSessionFactoryBean.getObject().getConfiguration().setMapUnderscoreToCamelCase(true);
return sqlSessionFactoryBean.getObject();
} private <T> MapperFactoryBean getMapper(Class<T> mapperInterface) {
MapperFactoryBean<T> mapperFactoryBean = new MapperFactoryBean<T>();
try {
mapperFactoryBean.setSqlSessionFactory(sqlSessionFactory());
mapperFactoryBean.setMapperInterface(mapperInterface);
} catch (Exception ex) {
logger.error("error when create mapper: ", ex);
throw new RuntimeException(ex);
}
return mapperFactoryBean;
} @Bean
public MapperFactoryBean userMapper() {
return getMapper(UserMapper.class);
} @Bean
public MapperFactoryBean commodityCategoryMapper() {
return getMapper(CommodityCategoryMapper.class);
} @Bean
public MapperFactoryBean commodityMapper() {
return getMapper(CommodityMapper.class);
}
}

创建SqlSessionFactory的同时,将其配置项MapUnderscoreToCamelCase设置为true,如数据库列 user_name将自动映射到pojo中的userName属性

通过setTypeAliases,指定使用的Pojo类型,后续Mapper.xml中就不需要指定Pojo类型的完整限定名(即无需指定namespace)

Mapper interface

package com.antsoft.docoding.mapper;
import java.util.List;
import com.antsoft.docoding.model.User; public interface UserMapper {
List<User> getUsers(); User getUser(long id); void addUser(User user); void clear(); void updateUser(User user);
}

Mapper xml

Mapper.xml所在目录需要与对应的Mapper接口位于统一个包中

上述UserMapper接口,对应的UserMapper.xml 位于目录resources/com/antsoft/docoding/mapper/中,内容如下

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.antsoft.docoding.mapper.UserMapper">
<resultMap id="user" type="user">
<result column="user_type" property="userType" typeHandler="org.apache.ibatis.type.EnumOrdinalTypeHandler"/>
</resultMap> <delete id="clear">
DELETE FROM dc_user
</delete> <select id="getUsers" resultMap="user">
SELECT id, user_name, user_type FROM dc_user
</select> <select id="getUser" resultMap="user">
SELECT id, user_name, user_type FROM dc_user WHERE id = #{id}
</select> <insert id="addUser" useGeneratedKeys="true" keyProperty="id" parameterType="user">
INSERT INTO dc_user(user_name, user_type)
VALUES(#{userName}, #{userType, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler})
</insert> <update id="updateUser" parameterType="user">
UPDATE dc_user SET user_name = #{userNmae},
user_type = #{userType, typeHandler=org.apache.ibatis.type.EnumOrdinalTypeHandler}
WHERE id = #{id}
</update> </mapper>

关于EnumOrdinalTypeHandler,可以完成枚举值叙述与枚举类型的自动转换

使用Mapper

使用Mapper的方式与以前使用Dao类型的方法完全一致,通过@Autowired实现依赖注入,如下:

@Service
public class UserService {
@Autowired
private UserMapper userMapper; public void clear() {
userMapper.clear();
} public List<User> getUsers() {
return userMapper.getUsers();
} public void addUser(User user) {
userMapper.addUser(user);
} public void updateUser(User user) {
userMapper.updateUser(user);
} public User getUser(long id) {
return userMapper.getUser(id);
}
}

更多Mabatis内容 请阅读官方文档

入门

动态SQL 简化工作

[原创]Spring Boot + Mybatis 简易使用指南(一)基础环境搭建的更多相关文章

  1. [原创]Spring Boot + Mybatis 简易使用指南(二)多参数方法支持 与 Joda DateTime类型支持

    前言 今天在开发练习项目时遇到两个mybatis使用问题 第一个问题是mapper方法参数问题,在参数大于一个时,mybatis不会自动识别参数命名 第二个问题是Pojo中使用Joda DateTim ...

  2. maven Spring+Spring MVC+Mybatis+mysql轻量级Java web开发环境搭建

    之前一直在做的一个GIS系统项目,采用了jsp+servlet框架,数据传输框架采用了apache的thrift框架,短时多传的风格还不错,但是较其他的java web项目显得有点太臃肿了,现在给大家 ...

  3. Spring Boot + Mybatis + Redis二级缓存开发指南

    Spring Boot + Mybatis + Redis二级缓存开发指南 背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybat ...

  4. 快速搭建一个Spring Boot + MyBatis的开发框架

    前言:Spring Boot的自动化配置确实非常强大,为了方便大家把项目迁移到Spring Boot,特意总结了一下如何快速搭建一个Spring Boot + MyBatis的简易文档,下面是简单的步 ...

  5. Spring Boot 2.0 升级指南

    Spring Boot 2.0 升级指南 前言 Spring Boot已经发布2.0有5个月多,多了很多新特性,一些坑也慢慢被填上,最近有空,就把项目中Spring Boot 版本做了升级,顺便整理下 ...

  6. spring boot + mybatis + druid

    因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算 ...

  7. Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版

    一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...

  8. spring boot + mybatis + druid配置实践

    最近开始搭建spring boot工程,将自身实践分享出来,本文将讲述spring boot + mybatis + druid的配置方案. pom.xml需要引入mybatis 启动依赖: < ...

  9. spring boot+mybatis+quartz项目的搭建完整版

    1. 利用spring boot提供的工具(http://start.spring.io/)自动生成一个标准的spring boot项目架构 2. 因为这里我们是搭建spring boot+mybat ...

随机推荐

  1. Android之水波纹点击效果(RippleView)

    Android5.0后各种炫的效果纷纷出来,写这篇博客主要是讲的是按钮点击效果带有的水波纹(波浪式). 当然我写的这个是自定义来实现的,在低版本(5.0一下)也可以实现点击效果.看看效果图: 上图可看 ...

  2. EK算法复杂度分析

    引理: EK算法每次增广使所有顶点$v\in V-\{s,t\}$到$s$的最短距离$d[v]$增大. 采用反证法, 假设存在一个点$v\in V-\{s,t\}$, 使得$d'[v]< d[v ...

  3. hdu 6301 Distinct Values (双指针,水题)

    大意: 给定m个区间, 求构造一个长n且字典序最小的序列, 使得每个区间内的数各不相同 求出每个位置为左端点时向右延伸最大距离, 然后双指针, 每次从set中取最小 #include <iost ...

  4. IOS-如何优雅地拦截按钮事件(判断是否需要登录)

    关于这个标题,起因是这样的. 最近一次做项目需求时,遇到这样一个需求,就是本来我们App是必须注册或者第三方登录才可以使用,现在希望不登录也可以浏览App里面的内容,只是在需要的时候才提示登录,并且在 ...

  5. IOS-网络(小文件下载)

    // // ViewController.m // IOS_0131_小文件下载 // // Created by ma c on 16/1/31. // Copyright © 2016年 博文科技 ...

  6. 038——VUE中组件之WEB开发中组件使用场景与定义组件的方式

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

  7. PHP:第五章——字符串输出函数

    <?php header("Content-Type:text/html;charset=utf-8"); /*字符串输出函数*/ //1.echo 输出一个或多个字符 // ...

  8. cx_oracle 安装和配置

    前提条件: 已经成功安装python 已经成功安装oracle客户端 1.去官网上下载对应版本的cx_oracle http://cx-oracle.sourceforge.net/ 注意版本必须与p ...

  9. 什么是API?我们常说调用API

    如果你不知道 API 是什么,说明你英语真的很差. API 就是 Application Programming Interface 三个单词,如果你不能顾名思义的话,我就举例说明. 1. DOM A ...

  10. new BigDecimal(0.01) 与 new BigDecimal(String.valueOf(0.01))的区别 (转)

    转自:http://blog.csdn.net/major1985/article/details/50210293 一般我们使用BigDecimal进行比较精密的计算,我这里计算金额.注意使用dou ...