详解spring boot mybatis全注解化

网友投稿 506 2023-03-31


详解spring boot mybatis全注解化

本文重点给大家介绍spring boot mybatis 注解化的实例代码,具体内容大家参考下本文:

pom.xml

org.mybatis.spring.boot

mybatis-spring-boot-starter

1.3.0

com.github.pagehelper

pagehelper-spring-boot-starter

1.1.1

基本SQL操作

spring boot已经自动实现了mybatis所有配置,直接写dao接口即可

@Mapper

public interface MybatisDao {

@Select("select * from user where id = #{id}")

public List findById(User param);

@Mapper:声明一个mybatis的dao接口,会被spring boot扫描到

@Select:声明一个查询方法,相应的增删改使用@Insert @Delete@Update

List:返回集合。如果只返回一个结果,返回值是User。如果是增删改方法返回值是int

User param:传参,#{id}就是param对象的id值

扫描Mapper

@MapperScan("hello.dao")

在配置类上添加以上注解,可以扫描dao包中的所有接口,替代在每个dao中写@Mapper注解,不过这样会提高耦合度。而@Mapper可以与dao自成一体,与@Controller、@Service遥相呼应,整体结构更优雅

驼峰命名

在properties中添加以下配置,在执行查询后,可以将数据库的NN_NN格式字段,在java结果集对象中自动转换成驼峰命名参数

mybatis.configuration.mapUnderscoreToCamelCase=true

结果映射@Results

如果结果集不是JAVA对象而是Map,map中的列名会和数据库中的NN_NN一样,是不会自动驼峰转换的。可以使用@Result来指明结果映射,同样也适用JAVA对象

@Results({

@Result(property="nnNn",column="NN_NN")

})

@Select("select * from user")

public List findAll();

使用List不用去维护pojo,适于用数据库字段不确定或经常变化的场景。但是程序的可读性、可维护性不如List

可复用的@Results

声明时给id赋值为user

@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层。

@Service

@Transactional

public class HelloServiceImpl {

@Autowired

MybatisDao mybatisDao;

public void find(){

//分页插件: 查询第1页,每页10行

Page 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 page:相当于一个list集合,findAll()方法查询完成后,会给page对象的相关参数赋值

回传ID

假设数据库表的ID主键是自动增长的,现在添加一条数据,想要得到这条数据自动增长的ID,方法如下

dao层

useGeneratedKeys=true:获取数据库生成的主键

keyProperty="id":把主键值存入User param对象的id属性

@Insert("insert into user(name) values(#{name})")

@Options(useGeneratedKeys=true,keyPropeTdfSAiGrty="id")

public int add(User param);

service层

User user = new User();

user.setName("tom");

mybatisDao.add(user);

SysteTdfSAiGm.out.println("回传ID值:"+user.getId());

控制台

存储过程

这是一个mysql存储过程,传入一个id值,根据这个id查询出name值并且做为传出参数

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:说明这是一个存储过程

@Select("call hello(#{id,mode=IN,jdbcType=VARCHAR},#{name,mode=OUT,jdbcType=VARCHAR})")

@Options(statementType= StatementType.CALLABLE )

public void call(User user);

service层

public void call(){

User user = new User();

user.setId("14");

mybatisDao.call(user);

System.out.println(user.getName());

执行结果

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅谈Java程序运行机制及错误分析
下一篇:深入理解Spring MVC的数据转换
相关文章

 发表评论

暂时没有评论,来抢沙发吧~