[原创]Spring Boot + Mybatis 简易使用指南(一)基础环境搭建
前言
作者: 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内容 请阅读官方文档
[原创]Spring Boot + Mybatis 简易使用指南(一)基础环境搭建的更多相关文章
- [原创]Spring Boot + Mybatis 简易使用指南(二)多参数方法支持 与 Joda DateTime类型支持
前言 今天在开发练习项目时遇到两个mybatis使用问题 第一个问题是mapper方法参数问题,在参数大于一个时,mybatis不会自动识别参数命名 第二个问题是Pojo中使用Joda DateTim ...
- maven Spring+Spring MVC+Mybatis+mysql轻量级Java web开发环境搭建
之前一直在做的一个GIS系统项目,采用了jsp+servlet框架,数据传输框架采用了apache的thrift框架,短时多传的风格还不错,但是较其他的java web项目显得有点太臃肿了,现在给大家 ...
- Spring Boot + Mybatis + Redis二级缓存开发指南
Spring Boot + Mybatis + Redis二级缓存开发指南 背景 Spring-Boot因其提供了各种开箱即用的插件,使得它成为了当今最为主流的Java Web开发框架之一.Mybat ...
- 快速搭建一个Spring Boot + MyBatis的开发框架
前言:Spring Boot的自动化配置确实非常强大,为了方便大家把项目迁移到Spring Boot,特意总结了一下如何快速搭建一个Spring Boot + MyBatis的简易文档,下面是简单的步 ...
- Spring Boot 2.0 升级指南
Spring Boot 2.0 升级指南 前言 Spring Boot已经发布2.0有5个月多,多了很多新特性,一些坑也慢慢被填上,最近有空,就把项目中Spring Boot 版本做了升级,顺便整理下 ...
- spring boot + mybatis + druid
因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算 ...
- Spring Boot入门教程2-1、使用Spring Boot+MyBatis访问数据库(CURD)注解版
一.前言 什么是MyBatis?MyBatis是目前Java平台最为流行的ORM框架https://baike.baidu.com/item/MyBatis/2824918 本篇开发环境1.操作系统: ...
- spring boot + mybatis + druid配置实践
最近开始搭建spring boot工程,将自身实践分享出来,本文将讲述spring boot + mybatis + druid的配置方案. pom.xml需要引入mybatis 启动依赖: < ...
- spring boot+mybatis+quartz项目的搭建完整版
1. 利用spring boot提供的工具(http://start.spring.io/)自动生成一个标准的spring boot项目架构 2. 因为这里我们是搭建spring boot+mybat ...
随机推荐
- windows下的IO模型之选择(select)模型
1.选择(select)模型:选择模型:通过一个fd_set集合管理套接字,在满足套接字需求后,通知套接字.让套接字进行工作. 选择模型的核心是FD_SET集合和select函数.通过该函数,我们可以 ...
- HDU-4035-概率dp-期望-公式化简
Maze Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)Total Submis ...
- iOS UI-线程(NSThread)及其安全隐患与通信
一.基本使用 1.多线程的优缺点 多线程的优点 能适当提高程序的执行效率 能适当提高资源利用率(CPU.内存利用率) 多线程的缺点 开启线程需要占用一定的内存空间(默认情况下,主线程占用1M,子线程占 ...
- 007PHP文件处理—— 判断文件与操作文件fopen fread fclose is_executable is_readable is_writeable
<?php /** * 判断文件与操作文件fopen fread fclose * is_executable is_readable is_writeable */ //判断一个文件是不是一个 ...
- Java基础——概述
body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...
- Bayes' theorem (贝叶斯定理)
前言 AI时代的到来一下子让人感觉到数学知识有些捉襟见肘,为了不被这个时代淘汰,我们需要不断的学习再学习.其中最常见的就是贝叶斯定理,这个定理最早由托马斯·贝叶斯提出. 贝叶斯方法的诞生源于他生前为解 ...
- 【LeetCode 38_字符串_算术运算】Count and Say
string countAndSay(int n) { string res; ) return res; res = "; ) { int len = res.size(); int i, ...
- tensorflow中summary操作
tf中 tensorboard 工具通过读取在网络训练过程中保存到本地的日志文件实现数据可视化,日志数据保存主要用到 tf.summary 中的方法. tf.summary中summary是tf中的一 ...
- Jmeter-线程组执行顺序控制
线程组按顺序来执行,大概思路, 1.需要控制线程组内的操作在满足某一条件才执行,那么就需要使用if或者while: 2.要使用if或者while都需要一个变量,而这个变量要在两个或多个线程组内使用,那 ...
- IDEA 使用generator逆向工程生成pojo,mapper
1.新建立一个MAVEN项目 2.在pom.xml增加配置 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns: ...