gpt4 book ai didi

详解spring boot mybatis全注解化

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

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全注解化

总结 。

以上所述是小编给大家介绍的spring boot mybatis全注解化,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:http://blog.csdn.net/ztx114/article/details/78082294 。

最后此篇关于详解spring boot mybatis全注解化的文章就讲到这里了,如果你想了解更多关于详解spring boot mybatis全注解化的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com