- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章详解spring boot mybatis全注解化由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文重点给大家介绍spring boot mybatis 注解化的实例代码,具体内容大家参考下本文:
pom.xml 。
1
2
3
4
5
6
7
8
9
10
11
12
|
<!-- 引入mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>
1.3
.
0
</version>
</dependency>
<!-- mybatis分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>
1.1
.
1
</version>
</dependency>
|
基本SQL操作 。
spring boot已经自动实现了mybatis所有配置,直接写dao接口即可 。
1
2
3
4
|
@Mapper
public
interface
MybatisDao {
@Select
(
"select * from user where id = #{id}"
)
public
List<User> findById(User param);
|
@Mapper:声明一个mybatis的dao接口,会被spring boot扫描到 。
@Select:声明一个查询方法,相应的增删改使用@Insert @Delete@Update 。
List<User>:返回集合。如果只返回一个结果,返回值是User。如果是增删改方法返回值是int 。
User param:传参,#{id}就是param对象的id值 。
扫描Mapper 。
@MapperScan("hello.dao") 。
在配置类上添加以上注解,可以扫描dao包中的所有接口,替代在每个dao中写@Mapper注解,不过这样会提高耦合度。而@Mapper可以与dao自成一体,与@Controller、@Service遥相呼应,整体结构更优雅 。
驼峰命名 。
在properties中添加以下配置,在执行查询后,可以将数据库的NN_NN格式字段,在java结果集对象中自动转换成驼峰命名参数 。
1
|
mybatis.configuration.mapUnderscoreToCamelCase=
true
|
结果映射@Results 。
如果结果集不是JAVA对象而是Map,map中的列名会和数据库中的NN_NN一样,是不会自动驼峰转换的。可以使用@Result来指明结果映射,同样也适用JAVA对象 。
1
2
3
4
5
|
@Results
({
@Result
(property=
"nnNn"
,column=
"NN_NN"
)
})
@Select
(
"select * from user"
)
public
List<Map> findAll();
|
使用List<Map>不用去维护pojo,适于用数据库字段不确定或经常变化的场景。但是程序的可读性、可维护性不如List<User> 。
可复用的@Results 。
声明时给id赋值为user 。
1
2
3
|
@Results
(id=
"user"
,value={
@Result
(property=
"nnNn"
,column=
"NN_NN"
)
})
|
在其他 方法中,重复使用id为user的结果映射 。
@ResultMap("user") 。
打印SQL日志到控制台 。
在application.properties中添加以下配置 。
logging.level.你的包名.mybatis接口包=debug 。
执行SQL时,会在控制台打印SQL日志 。
第一行:==>左边是执行SQL的接口及其方法,右边是执行语句 。
第二行:传参数1,String类型 。
第三行:查到一行数据 。
分页 。
首先要在pom.xml中引入文章开头的分页插件,分页逻辑写在service层.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
@Service
@Transactional
public
class
HelloServiceImpl {
@Autowired
MybatisDao mybatisDao;
public
void
find(){
//分页插件: 查询第1页,每页10行
Page<User> page =PageHelper.startPage(
1
,
10
);
mybatisDao.findAll();
//数据表的总行数
page.getTotal();
//分页查询结果的总行数
page.size();
//第一个User对象,参考list,序号0是第一个元素,依此类推
page.get(
0
);
}
|
执行原理:PageHelper.startPage会拦截下一个sql,也就是mybatisDao.findAll()的SQL。并且根据当前数据库的语法,把这个SQL改造成一个高性能的分页SQL,同时还会查询该表的总行数,具体可以看SQL日志.
PageHelper.startPage和mybatisDao.findAll()最好紧跟在一起,中间不要有别的逻辑,否则可能出BUG.
Page<User> page:相当于一个list集合,findAll()方法查询完成后,会给page对象的相关参数赋值 。
回传ID 。
假设数据库表的ID主键是自动增长的,现在添加一条数据,想要得到这条数据自动增长的ID,方法如下 。
dao层 。
useGeneratedKeys=true:获取数据库生成的主键 。
keyProperty="id":把主键值存入User param对象的id属性 。
1
2
3
|
@Insert
(
"insert into user(name) values(#{name})"
)
@Options
(useGeneratedKeys=
true
,keyProperty=
"id"
)
public
int
add(User param);
|
service层 。
1
2
3
4
|
User user =
new
User();
user.setName(
"tom"
);
mybatisDao.add(user);
System.out.println(
"回传ID值:"
+user.getId());
|
控制台 。
存储过程 。
这是一个mysql存储过程,传入一个id值,根据这个id查询出name值并且做为传出参数 。
1
2
3
4
5
6
|
DELIMITER $$
CREATE PROCEDURE `hello`(IN id_in VARCHAR(
10
),OUT name_out VARCHAR(
10
))
BEGIN
SELECT NAME INTO name_out FROM USER WHERE id=id_in;
END$$
DELIMITER ;
|
dao层 。
mode=IN:传入参数,就是user.id 。
mode=OUT:传出参数,就是user.name 。
StatementType.CALLABLE:说明这是一个存储过程 。
1
2
3
|
@Select
(
"call hello(#{id,mode=IN,jdbcType=VARCHAR},#{name,mode=OUT,jdbcType=VARCHAR})"
)
@Options
(statementType= StatementType.CALLABLE )
public
void
call(User user);
|
service层 。
1
2
3
4
5
|
public
void
call(){
User user =
new
User();
user.setId(
"14"
);
mybatisDao.call(user);
System.out.println(user.getName());
|
执行结果 。
总结 。
以上所述是小编给大家介绍的spring boot mybatis全注解化,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:http://blog.csdn.net/ztx114/article/details/78082294 。
最后此篇关于详解spring boot mybatis全注解化的文章就讲到这里了,如果你想了解更多关于详解spring boot mybatis全注解化的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
注解@CrossOrigin 出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站。来自EVILL的脚本
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章深入理解Java高级特性——注解由作者收集整理,如果你对这篇文章有兴趣,
概述 在这个快速教程中,我们将探索 Spring 的 @RequestParam 注解。 简单地说,我们可以使用 @RequestParam 从请求中提取查询参数、表单参数甚至文件。我们将讨论如何使用
我有一个关于 Spring @Async 注释的问题。我有一个 Controller 自动连接了一个服务(GnInsuranceDetailsService) @RequestMapping(va
我在使用注释来调用注释所属的方法时遇到了一些麻烦......我将举一个例子: class MyEventHandlers { @handler(id=“1”) public doSom
我是.Net程序员,但是这次我正在从事Java项目,并且遇到了一些困难。这个 java 项目不是我的,它是由其他开发人员开发的,并且使用 Hibernate。 当我运行 Ant 构建器时,我收到此错误
我在 Grails 文档(第 9 章:测试)中读到过这个注解。但是我不明白这是什么... 问题是我需要模拟 GORM 的动态方法,有一种方法可以自动模拟它们,而不必编写我需要的所有方法吗? 最佳答案
这个问题在这里已经有了答案: How to get annotation class name, attribute values using reflection (2 个答案) 关闭 5 年前。
如何了解 Java EE 6 JMS 注释规范支持的所有有效属性集@ActivationConfigProperty Java EE 6 Documentation for @ActivationCo
我认为这是不可能的,但也许我错了。所以我问你,如果可能的话。 ;-) 如果我定义了一个注释,它只接受类引用,它扩展了一些可能的接口(interface)或类: Class serviceIFProv
我正在尝试使用 javax.validation 验证一些 DTO,但似乎注释 @NotEmpty 没有检查参数是否为 null。 这是我的类(class): Person.class public
我是 hibernate 新手,我正在尝试学习它,但在尝试使一对多关系正常工作时遇到了问题。我尝试了几个例子,但似乎没有一个起作用。 有人可以看一下下面的代码并告诉我哪里出了问题吗?我尝试了很多不同的
这个问题已经有答案了: Why doesn't Java offer operator overloading? (17 个回答) 已关闭 9 年前。 每个人都知道 Java 中的简单算术如何用于基元
有人知道如何用 Python 处理这种 XML 注释,这是我第一次看到。 <?link id="752760" resource-uuid="UUID-9f0575a3-1847-1cde-fd
我遇到了这个link这解释了如何继承 bean。假设此示例中的 HelloWorld 类使用 @Component 注释作为 bean 公开,如何创建另一个继承此 bean 的 bean?我可以使用
谁能告诉我这段代码是否: public class OvTester { @Override public int hashCode() { return toStri
我有一个实体,它有一个非键列,我已将其设置为在我的数据库中自动生成。 我不能使用 @GeneratedValue,因为据我所知,它仅适用于关键字段。 在这种情况下,如何指示非键列是自动生成的? 最佳答
所以可能像很多人一样,我通常会临时注释掉代码,主要是为了调试目的。我目前放了类似 **DEBUG** 或任何容易搜索的内容,但我认为让编译器在发现临时注释掉的代码时输出警告(甚至错误)可能很有用。我想
此组件解决的问题是: 「谁」在「什么时间」对「什么」做了「什么事」 本组件目前针对 Spring-boot 做了 Autoconfig,如果是 SpringMVC,也可自己在 xml 初始化 b
配置全局乱码过滤器 参数绑定注解@RequestParam 注解@RequestParam的参数使用说明 获得Restful风格的参数 自定义类型转换器 自定义转换器的开发步骤: 获得Servlet相
我是一名优秀的程序员,十分优秀!