SpringBoot:与MyBatis合作

MyBatis是一个SQL映射框架,支持自定义SQL,存储过程和高级映射。

SpringBoot不为MyBatis集成提供官方支持,但MyBatis社区为MyBatis构建了SpringBoot入门程序。

您可以在http://blog.mybatis.org/2015/11/mybatis-spring-boot-released.html上了解有关SpringBoot MyBatis Starter发行公告的信息,还可以在GitHub https://github.com上探索源代码。 / mybatis / mybatis-spring-boot 。

创建一个SpringBoot Maven项目并添加以下MyBatis Starter依赖项。

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.0.0</version>
</dependency>

我们将重用在上一篇文章SpringBoot中创建的User.java,schema.sql和data.sql文件:使用JdbcTemplate

用很少的数据库操作创建MyBatis SQL Mapper接口UserMapper.java ,如下所示:

package com.sivalabs.demo.domain;public interface UserMapper
{void insertUser(User user);User findUserById(Integer id);List<User> findAllUsers();
}

我们需要创建Mapper XML文件来为对应的Mapper接口方法定义对映射的SQL语句的查询。

src / main / resources / com / sivalabs / demo / mappers /目录中创建UserMapper.xml文件,如下所示:

<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.sivalabs.demo.mappers.UserMapper"><resultMap id="UserResultMap" type="User"><id column="id" property="id" /><result column="name" property="name" /><result column="email" property="email" /></resultMap><select id="findAllUsers" resultMap="UserResultMap">select id, name, email from users</select><select id="findUserById" resultMap="UserResultMap">select id, name, email from users WHERE id=#{id}</select><insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">insert into users(name,email) values(#{name},#{email})</insert>
</mapper>

这里要观察的几件事是:

  • Mapper XML中的命名空间应与Mapper接口的完全限定名称(FQN)相同
  • 语句ID值应与Mapper接口方法名称相同。
  • 如果查询结果列名称与bean属性名称不同,则可以使用<resultMap>配置在列名称及其对应的bean属性名称之间提供映射。

MyBatis还提供基于注释的查询配置,而无需Mapper XML。

我们可以创建UserMapper.java接口,并使用注释配置映射的SQL,如下所示:

public interface UserMapper
{@Insert("insert into users(name,email) values(#{name},#{email})")@SelectKey(statement="call identity()", keyProperty="id",before=false, resultType=Integer.class)void insertUser(User user);@Select("select id, name, email from users WHERE id=#{id}")User findUserById(Integer id);@Select("select id, name, email from users")List<User> findAllUsers();}

SpringBoot MyBatis入门程序提供以下MyBatis配置参数,我们可以使用这些参数自定义MyBatis设置。

mybatis.config = mybatis config file name
mybatis.mapperLocations = mappers file locations
mybatis.typeAliasesPackage = domain object's package
mybatis.typeHandlersPackage = handler's package
mybatis.check-config-location = check the mybatis configuration exists
mybatis.executorType = mode of execution. Default is SIMPLE

application.properties中配置typeAliasesPackagemapperLocations

mybatis.typeAliasesPackage=com.sivalabs.demo.domain
mybatis.mapperLocations=classpath*:**/mappers/*.xml

创建入口点类SpringbootMyBatisDemoApplication.java。

@SpringBootApplication
@MapperScan("com.sivalabs.demo.mappers")
public class SpringbootMyBatisDemoApplication
{public static void main(String[] args){SpringApplication.run(SpringbootMyBatisDemoApplication.class, args);}
}

观察到我们已经使用@MapperScan(“ com.sivalabs.demo.mappers”)批注指定在何处查找Mapper接口。

现在创建一个JUnit测试类并测试我们的UserMapper方法。

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(SpringbootMyBatisDemoApplication.class)
public class SpringbootMyBatisDemoApplicationTests
{@Autowiredprivate UserMapper userMapper;@Testpublic void findAllUsers() {List<User> users = userMapper.findAllUsers();assertNotNull(users);assertTrue(!users.isEmpty());}@Testpublic void findUserById() {User user = userMapper.findUserById(1);assertNotNull(user);}@Testpublic void createUser() {User user = new User(0, "Siva", "siva@gmail.com");userMapper.insertUser(user);User newUser = userMapper.findUserById(user.getId());assertEquals("Siva", newUser.getName());assertEquals("siva@gmail.com", newUser.getEmail());}
}
  • 您可以在http://blog.mybatis.org/p/products.html上了解有关MyBatis和Spring集成的更多信息,并
    http://www.mybatis.org/spring/ 。

翻译自: https://www.javacodegeeks.com/2016/03/springboot-working-mybatis.html

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

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

相关文章

wordpress房产信息网_Realia v3.1.2 wordpress房地产模板 租房网站模板

Product DescriptionRealia租赁门户模板。创造你自己的简单的方法房地产门户。教具支持dsidxpress WordPress插件和新的WP主题定制的API&#xff0c;它允许你做出实时的设计变化&#xff01;你也可以选择20种颜色的变化&#xff0c;10的背景图案&#xff0c;3头的设置和盒装或全…

r语言dataellipse_r – 在ggplot2中微调stat_ellipse()

我想创建一个具有95&#xff05;“精确”置信椭圆的二元正态分布的散点图.library(mvtnorm)library(ggplot2)set.seed(1)n c95 rho Sigma 我从双变量法线生成了1000个观测值,平均值为零,方差西格玛x z for(i in 1:n){z[i] p95[i] }我们可以使用stat_ellipse轻松地在生成数据的散…

openjpa_以编程方式向OpenJPA注册实体类型

openjpa我刚刚开始为Isis开发 OpenJPA对象库 。 在一般情况下&#xff0c;可以在persistence.xml文件中注册实体类型。 但是&#xff0c;Isis是一个框架&#xff0c;可以构建自己的元模型&#xff0c;并且可以自行确定哪些类构成实体。 因此&#xff0c;我不想强​​迫开发人员…

记录踩过的坑——代理IP

网络错误&#xff0c;查看是否有代理IP。转载于:https://www.cnblogs.com/dayang12525/p/6402068.html

php连接mysql_PHP连接MySQL数据库的三种方式

本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql、mysqli、pdo)&#xff0c;结合实例形式分析了PHP基于mysql、mysqli、pdo三种方式连接MySQL数据库的相关操作技巧与注意事项。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助…

使用Vert.x进行响应式开发

最近&#xff0c;似乎我们正在听到有关Java的最新和最好的框架的消息。 忍者 &#xff0c; SparkJava和Play等工具; 但是每个人都固执己见&#xff0c;使您感到您需要重新设计整个应用程序以利用它们的出色功能。 这就是为什么当我发现Vert.x时令我感到宽慰的原因。 Vert.x不是…

使用xtrabackup(innobackupex)实现MySQL的热备

mysql 的热备http://www.178linux.com/10139http://www.linuxidc.com/Linux/2014-04/99671.htmhttp://634871.blog.51cto.com/624871/1351049http://www.cnblogs.com/galengao/p/5755835.htmlhttp://heylinux.com/archives/3777.html 遇到问题&#xff0c;解决链接 http://blog…

mysql查看执行计划_MySql中如何使用 explain 查询 SQL 的执行计划

explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有局限性&#xff0c;并不总会说出真相&#xff0c;但它的输出是可以获取的最好信息&#xff0c;值得花时间去了解&#xff0c;因为可以学习到查询是如何执行的。1、什么是MySQL执行计划要对执行计划有个比较好…

vim的tab键设定

多在windows上编程的童鞋可能习惯于感受tab键为4个空格的长度&#xff0c;不过在linux系统中一般默认设定tab键为8个空格长度来显示。事实上tab也确实是8个空格的长度。不过由于习惯问题&#xff0c;某些童鞋还是希望在linux上也感受tab键为4个空格长度的显示&#xff0c;因为v…

依赖注入

依赖注入指的就是类A依赖于类B&#xff0c;通过外部注入的方式来实现&#xff0c;而不是通过自身去实现。 这样做的好处就是可以使得代码之间更加的解耦。 举个例子&#xff0c;船&#xff08;ship&#xff09;包含有船桨&#xff08;oar&#xff09;&#xff0c;以下为高耦合的…

idea内置junit5_JUnit的内置Hamcrest Core Matcher支持

idea内置junit5在通过JUnit和Hamcrest改善对assertEquals的文章中&#xff0c;我简要讨论了Hamcrest “ 核心 ”匹配器与JUnit的现代版本“结合”在一起的情况。 在那篇文章中&#xff0c;我特别关注了JUnit的assertThat&#xff08;T&#xff0c;Matcher&#xff09;静态方法与…

jenkins 发送邮件模板

jenkins 发送邮件模板 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>${ENV, var"JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title> </head><body leftmargin"8" marginwidth"…

centos lnmp源码安装mysql_CentOS 6.6 下源码编译安装MySQL 5.7.5

说明&#xff1a;CentOS 6.6 下源码编译安装MySQL 5.7.51. 安装相关工具# yum -y install gcc-c ncurses-devel cmake make perl \gcc autoconf automake zlib libxml libgcrypt libtool bison2. 清理环境检查boost版本&#xff1a;# rpm -qa boost*卸载boost-*等库&#xff1a…

Oracle Spring Clean JavaFX应该吗?

我们确实在Codename One上依赖JavaFX&#xff0c;我们的模拟器需要它。 我们的桌面版本使用它&#xff0c;而我们的设计器工具基于Swing。 我们希望它成功&#xff0c;这对我们的业务至关重要&#xff01; 即使您是Java EE开发人员并且不关心桌面编程&#xff0c;我们也不是一个…

laravel mysql 锁表_Laravel中MySQL的乐观锁与悲观锁

MySQL/InnoDB的加锁&#xff0c;是一个老生常谈的话题。在数据库高并发请求下&#xff0c;如何兼顾数据完整性与用户体验的敏捷性是一代又一代程序员一直在思考的问题。乐观锁乐观锁之所以叫乐观&#xff0c;是因为这个模式不会对数据加锁。而是对数据操作保持一种乐观的心态&a…

python初心记录二

切片 L [1,2,3,4,5,6,7,8,9,0] L[0:3] L[-3] 迭代 如果给定一个list或tuple&#xff0c;我们可以通过for循环来遍历这个list或tuple&#xff0c;这种遍历我们称为迭代&#xff08;Iteration&#xff09;。 因为dict的存储不是按照list的方式顺序排列&#xff0c;所以&#xff0…

Spring对事物的实现

Spring对待事物的实现有一个标签可以使用Transactional标签来实现事务的管理&#xff0c;但是在使用的时候很多人不清楚实现的原理而使用了错误的使用方式&#xff0c;导致日志里的确是打印了&#xff0c;但是方法的确没有回滚。 我在遇到问题的时候发生了这样的问题&#xff0…

mysql 超长记录_谁记录了mysql error log中的超长信息(记pt-stalk一个bug的定位过程)...

【问题】最近查看MySQL的error log文件时&#xff0c;发现有很多服务器的文件中有大量的如下日志&#xff0c;内容很长(大小在200K左右)&#xff0c;从记录的内容看&#xff0c;并没有明显的异常信息。有一台测试服务器也有类似的问题&#xff0c;为什么会记录这些信息&#xf…

glassfish发布应用_Arquillian 1.0.0.Final正式发布! 准备使用GlassFish和WebLogic! 所有虫子死亡!...

glassfish发布应用红帽公司和JBoss社区今天宣布的1.0.0.Final发布的Arquillian &#xff0c;其屡获殊荣的建在Java虚拟机&#xff08;JVM&#xff09;运行测试平台。 Arquillian大大减少了编写和执行Java中间件集成和功能测试所需的工作。 它甚至使测试工程师能够解决以前认为无…

php中 ob_start()有什么作用

<?php ob_start(); //开启缓冲区 echo "这是第一次输出内容!\n"; $ff[1] ob_get_contents() ; //获取当前缓冲区内容 ob_flush();//缓冲器清除 echo "这是第二次输出内容!\n"; $ff[2] ob_get_contents() ; //获取当前缓冲区内容 echo "这是第三…