spring boot开发笔记——mybatis

概述

  mybatis框架的优点,就不用多说了,今天这边干货主要讲mybatis的逆向工程,以及springboot的集成技巧,和分页的使用

  因为在日常的开发中,当碰到特殊需求之类会手动写一下sql语句,大部分的时候完全可以用mybatis的逆向工程替代。

mybatis逆向工程

相比较而言,代码形式的逆向工程,更加灵活方便,简单,易于管理,而且可以上传到git中存储。而且也只需要简单的三步就能完成自动生成代码。下面介绍如果搭建并生成xml和代码
### 第一步:搭建工程
本项目使用的是maven搭建的工程,在你的pom文件中加入以下依赖:(这里以mysql数据库为例)

        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.0</version></dependency><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.34</version></dependency><!-- https://mvnrepository.com/artifact/log4j/log4j --><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency><!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core --><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.5</version></dependency></dependencies>

第二步:配置generatorConfig.xml

该xml文件是mybatis的配置项 这里记录了数据库连接的配置,

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><context id="testTables" targetRuntime="MyBatis3"><commentGenerator><!-- 是否去除自动生成的注释 true:是 : false:否 --><property name="suppressAllComments" value="true" /></commentGenerator><!--数据库连接的信息:驱动类、连接地址、用户名、密码 --><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/database" userId="root"password="123456"></jdbcConnection><!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL和NUMERIC类型解析为java.math.BigDecimal --><javaTypeResolver><property name="forceBigDecimals" value="false" /></javaTypeResolver><!-- targetProject:生成PO类的位置,重要!! --><javaModelGenerator targetPackage="springboot.modal.vo"targetProject=".\src"><!-- enableSubPackages:是否让schema作为包的后缀 --><property name="enableSubPackages" value="false" /><!-- 从数据库返回的值被清理前后的空格 --><property name="trimStrings" value="true" /></javaModelGenerator><!-- targetProject:mapper映射文件生成的位置,重要!! --><sqlMapGenerator targetPackage="springboot.dao"targetProject=".\src"><property name="enableSubPackages" value="false" /></sqlMapGenerator><!-- targetPackage:mapper接口生成的位置,重要!! --><javaClientGenerator type="XMLMAPPER"targetPackage="springboot.dao"targetProject=".\src"><property name="enableSubPackages" value="false" /></javaClientGenerator><!-- 指定数据库表,要生成哪些表,就写哪些表,要和数据库中对应,不能写错! --><table tableName="t_contents" domainObjectName="ContentVo" mapperName="ContentVoMapper" ></table></context>
</generatorConfiguration>

第三步:启动类

启动类主要设置main方法以及,制定配置文件generatorConfig.xml的路径

import org.mybatis.generator.api.MyBatisGenerator;
import org.mybatis.generator.config.Configuration;
import org.mybatis.generator.config.xml.ConfigurationParser;
import org.mybatis.generator.internal.DefaultShellCallback;import java.io.File;
import java.util.ArrayList;
import java.util.List;public class Generator {public static void main(String args[]) throws  Exception{List<String> warnings = new ArrayList<String>();boolean overwrite  = true;File configFile = new File("./src/main/resources/generatorconfig.xml");System.out.println(configFile.exists());ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(configFile);DefaultShellCallback callback = new DefaultShellCallback(overwrite);MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);myBatisGenerator.generate(null);}
}

当然如果有你想要设置日志输出的话,可以加一个log4j.properties,简单配置一下日志输出:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

最后运行启动类Generator,运行之前得确保,在数据库中先创建好表

工程已经搭建好了,可以参考github上:
mybatis逆向工程GitHub

逆向工程如何使用

mapper中的方法

逆向工程生成完毕后,mybatis会在mapper中提供一些默认的接口和参数,下面就介绍一下这些方法的使用:

方法功能说明
int countByExample(UserExample example)按条件计数
int deleteByPrimaryKey(Integer id)按主键删除
int deleteByExample(UserExample example)按条件删除
String/Integer insert(User record)插入数据,返回值的ID
String/Integer insertSelective(User record)插入一条数据,只插入不为null的字段
User selectByPrimaryKey(Integer id)按主键查询
List selectByExample(UserExample example)按条件查询
List selectByExampleWithBLOGs(UserExample example)按条件查询(包括BLOB字段)。只有当数据表中的字段类型有为二进制的才会产生。
int updateByPrimaryKey(User record)按主键更新
int updateByPrimaryKeySelective(User record)按主键更新值不为null的字段
int updateByExample(User record, UserExample example)按条件更新
int updateByExampleSelective(User record, UserExample example)按条件更新值不为null的字段

example类中的方法

mybatis的逆向工程中会生成实例及实例对应的example,example用于添加条件,相当where后面的部分

xxxExample example = new xxxExample();
Criteria criteria = new Example().createCriteria();

下表是常用方法

方法说明
example.setOrderByClause(“字段名 ASC”);添加升序排列条件,DESC为降序
example.setDistinct(false)去除重复,boolean型,true为选择不重复的记录。
criteria.andXxxIsNull添加字段xxx为null的条件
criteria.andXxxIsNotNull添加字段xxx不为null的条件
criteria.andXxxNotEqualTo(value)添加xxx字段不等于value条件
criteria.andXxxGreaterThan(value)添加xxx字段大于value条件
criteria.andXxxGreaterThanOrEqualTo(value)添加xxx字段大于等于value条件
criteria.andXxxLessThan(value)添加xxx字段小于value条件
criteria.andXxxLessThanOrEqualTo(value)添加xxx字段小于等于value条件
criteria.andXxxIn(List<?>)添加xxx字段值在List<?>条件
criteria.andXxxNotIn(List<?>)添加xxx字段值不在List<?>条件
criteria.andXxxLike(“%”+value+”%”)添加xxx字段值为value的模糊查询条件
criteria.andXxxNotLike(“%”+value+”%”)添加xxx字段值不为value的模糊查询条件
criteria.andXxxBetween(value1,value2)添加xxx字段值在value1和value2之间条件
criteria.andXxxNotBetween(value1,value2)添加xxx字段值不在value1和value2之间条件

sringboot整合mybatis

springboot整合mybatis很简单 只需要简单的配置即可以。
这里使用时xml方式,注解方式相对而言是清爽一些,但是sql全都堆砌在java文件中,并不利于阅读,而且也没有xml方式灵活。

项目构建

这里使用的是maven来构建项目,下面是pom文件:

  <properties><java.version>1.8</java.version></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.1.RELEASE</version><relativePath/></parent><dependencies><!-- 数据库连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.18</version></dependency><!-- mysql --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.35</version><scope>runtime</scope></dependency><!-- spring boot 配置 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.2.0</version></dependency></dependencies>

工程搭建

搭建springboot第一件事就是使用配置application.properties。整合mybatis的时候需要配置jdbc的信息,这里还用了阿里的连接池Druid.下面是详细的配置信息:

server.port=80
#spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/bootmybatis?useSSL=false&useUnicode=true&characterEncoding=utf-8&autoReconnect=true
#用户名
spring.datasource.username=root
#密码
spring.datasource.password=123456
spring.datasource.initialSize=20
spring.datasource.minIdle=10
spring.datasource.maxActive=100
# 输出mybatis日志 sql语句方便调试
logging.level.com.dao=DEBUG

下图是工程结构图:
1167080-20180426232032113-739579606.jpg

这里的UserVoMapper,UserVo,UserVoExample,都是使用的逆向工程生成的
启动类代码:

package com;import com.alibaba.druid.pool.DruidDataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.Banner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource;@SpringBootApplication
@ComponentScan
@EnableAutoConfiguration
@MapperScan("com.dao")
public class StartApplication {public static void main(String[] args) throws Exception {SpringApplication app = new SpringApplication(StartApplication.class);app.setBannerMode(Banner.Mode.OFF);app.run(args);}// datasource注入@Bean@ConfigurationProperties(prefix = "spring.datasource")public DataSource dataSource() {return new DruidDataSource();}//mybatis SQLSession注入@Beanpublic SqlSessionFactory sqlSessionFactoryBean() throws Exception {SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource());PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();// 这里设置mybatis xml文件的地址sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:/mapper/*.xml"));return sqlSessionFactoryBean.getObject();}
}

测试

在IndexController代码如下:

package com.controller;import com.dao.UserVoMapper;
import com.domain.vo.UserVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class IndexController {@AutowiredUserVoMapper userDao;@GetMapping(value = "")@ResponseBodypublic UserVo index(){UserVo userVo = new UserVo();userVo.setUsername("SELECTIVE");userVo.setPassword("123456");userVo.setAddress("北京");userDao.insertSelective(userVo);userVo = userDao.selectByPrimaryKey(1);return userVo;}
}

启动startApplication,在浏览器中输入http://127.0.0.1,即可查看到结果。

如果有不明白的可以去git上查看源码,传送门
喜欢的话,给个star

转载于:https://www.cnblogs.com/superfj/p/8955646.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Angular项目目录介绍

通过 ng new 项目名生成的项目 一级目录 Angular cli 工具生成的目录文件名不要随意修改&#xff0c;要不然会影响工具的使用。e2e&#xff1a;端到端的测试目录&#xff0c;用来做自动测试的。node_modules&#xff1a;Angular第三方包。src&#xff1a;应用源代码目录&#…

jvm内存模型_四种视角看JVM内存模型

1.JVM运行视角程序计数器Java虚拟机栈本地方法栈Java堆方法区1 .程序计数器程序计数器是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的行号指示器。这个计数器记录的是正在执行的虚拟机字节码指令的地址。此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何Ou…

Tomcat服务脚本

为什么80%的码农都做不了架构师&#xff1f;>>> #!/bin/bash ### BEGIN INIT INFO # Provides: tomcat # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # S…

oracle 取当前日期时间的前一天前一小时前一分钟前一秒

原文链接&#xff1a;http://wentao365.iteye.com/blog/779492 点击阅读原文 --------------------------------------------------------------------------- SELECT 当前时间 TITLE, TO_CHAR(SYSDATE, yyyy-mm-dd hh24:mi:ss) TIME FROM DUAL --当前时间 UNION ALL S…

mysql8事务级别_Mysql几种事务隔离级别

前言&#xff1a;之前对mysql的基础知识通过了几篇博客进行了一个详解&#xff0c;包括从数据库系统的原理以及最基本的操作使用&#xff0c;此篇博客将主要对mysql的事务级别进行实战分析1.什么是事务&#xff1f;事务是应用程序中一系列严密的操作&#xff0c;所有操作必须成…

控制台应用和空项目有什么区别_互联网小程序的应用以及APP的应用有什么区别及发展...

随时移动互联网进入的千家万户&#xff0c;互联网的手机应用程序也渐渐的在市场上流行起来了。今天主要跟大家谈一下互联网小程序的应用以及APP的应用有什么区别以及未来的发展趋。未来会流行什么手机应用或者APP应用&#xff0c;我带大家都为了解一下。下边先来了解一下小程序…

day19_java基础加强_动态代理+注解+类加载器

一、动态代理 1.1、代理模式 什么是代理模式及其作用&#xff1f; Proxy Pattern&#xff08;即&#xff1a;代理模式&#xff09;&#xff0c;23种常用的面向对象软件的设计模式之一。        代理模式的定义&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。 …

使用循环链表实现一个通讯录的管理程序_【LeetCode链表题型总结】

点击上方蓝字&#xff0c;关注公众号链表概念的讲解链表是什么链表是一种线性数据结构&#xff0c;每个节点都存有数据&#xff0c;通过指针将各个节点链接在一起。链表的性质一致性: 每个节点有相同的数据结构&#xff0c;相同的数据大小&#xff0c;内存中占据相同的大小&…

python的kite下载安装及使用_Kite下载|Kite Python编程工具 V1.2020.1203.0 最新版下载 - 下载银行...

Kite是一款专为Python打造的一款代码补全软件&#xff0c;如果你正在学习Python或是从事与Python相关的编程工作&#xff0c;那么这款软件绝对是你的好帮手&#xff01;其会智能判断用户想要输入的每个代码字段&#xff0c;并在所有库中进行匹配相应的内容&#xff0c;如果看到…

Linux 升级 Python 至 3.x

原文链接&#xff1a;http://blog.csdn.net/liang19890820/article/details/51079633 -------------------------------------------- 简述 CentOS 7 中默认安装了 Python&#xff0c;版本比较低&#xff08;2.7.5&#xff09;&#xff0c;为了使用新版 3.x&#xff0c;需要对…

Sublime Text 3 配置python交互运行环境的快捷键

2019独角兽企业重金招聘Python工程师标准>>> 使用Sublime Text 3能以轻量级的环境写python脚本&#xff0c;运行python代码。为了更加方便地调用python脚本&#xff0c;通过在Sublime Text 3中绑定快捷键的方式&#xff0c;实现一键调用python交互运行环境&#xff…

xftp如何搜索文件_头条搜索站长平台如何添加网站和sitemap文件?附图文教程

头条搜索站长平台已经上线了&#xff0c;目前我们广大站长都可以登录该平台后添加新网站和提交 sitemap 地图文件&#xff0c;建议大家可以前往尝试一下&#xff0c;多一个搜索平台就多一条路&#xff0c;认为倒是挺好的。下面就跟大家简单介绍头条搜索站长平台如何添加网站和提…

彩铅练习,花船

图片发自简书App图片发自简书App

我的女朋友漏电了–论C++中的失败(failure),缺陷(bug)和异常(exception)

先做个广告置入&#xff0c;如果喜欢这篇文章&#xff0c;你可以到 zhaoyan.website/blog 去查看于此类似的C/C文章。 我承认有点标题党了&#xff0c;不过这真的是一篇写软件的文章&#xff0c;所以如果你已经抽出了一张面巾纸&#xff0c;那么趁早再把它完美的放回去。这篇软…

SQLplus 和mysql区别_mysql和oracle的区别有哪些

MySQL和Oracle都是流行的关系数据库管理系统(RDBMS)&#xff0c;在世界各地广泛使用&#xff1b;大多数数据库以类似的方式工作&#xff0c;但MySQL和Oracle的这里和那里总是存在一些差异的。本篇文章就给大家比较Oracle和MySQL&#xff0c;介绍Oracle和MySQL之间的区别&#x…

127.0.0.1与localhost的区别

2019独角兽企业重金招聘Python工程师标准>>> 区别1&#xff1a; localhost也叫local &#xff0c;正确的解释是:本地服务器 127.0.0.1在windows等系统的正确解释是:本机地址(本机服务器) 他们的解析通过本机的host文件&#xff0c;windows自动将localhost解析为127.…

mysql 索引_MySQL之索引

索引查找算法BTREEBTREE查找算法演变B-TREE &#xff1a;普通 BTREE&#xff0c;平衡多路查找树(B-Tree)BTREE &#xff1a;叶子节点双向指针BTREE(B*TREE)&#xff1a;枝节点的双向指针普通B-TREE增强版BTREE(B*TREE)总结&#xff1a;从上图看出&#xff0c;在BTree上有两个头…

java数学计算表达式_Java初学者:内建函数计算简单的数学表达式

这个应该在之前写的&#xff0c;忘记了&#xff0c;补上这次我们说一下如何用java计算数学表达式的值&#xff0c;比如&#xff0c;我们要计算sin(pi/3) cos(pi/6) 5.6^3&#xff0c;怎么计算呢&#xff1f;这里我们需要用到java的math的内建函数&#xff0c;所谓内建函数&am…

谷歌新作gVisor:VM容器融合技术已经到来

作者&#xff5c;秦承刚&#xff0c;吴启翾&#xff0c;喻望&#xff0c;杨伟 编辑&#xff5c;张婵 出处丨高效开发运维 5 月 2 日&#xff0c;谷歌发布了一款新型的沙箱容器运行时 gVisor&#xff0c;号称能够为容器提供更安全的隔离&#xff0c;同时比 VM 更轻量。容器基于共…

安卓androidstudio访问本地接口_安卓开发之数据存储在本地的四种方式

​安卓开发之数据存储在本地的四种方式本地数据存储&#xff0c;在安卓开发过程中是不可避免的一个话题。这些本地的数据可能是用户的设置&#xff0c;程序的设置&#xff0c;用户的数据图片, 也可能是网络传输的一些缓冲数据。基本上我们有4种方法可以存储安卓程序的数据。第1…