本文重点给大家介绍spring boot mybatis 注解化的实例代码,具体内容大家参考下本文:
pom.xml
<!-- 引入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接口即可
@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结果集对象中自动转换成驼峰命名参数
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<map> findall();
使用list<map>不用去维护pojo,适于用数据库字段不确定或经常变化的场景。但是程序的可读性、可维护性不如list<user>
可复用的@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<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属性
@insert("insert into user(name) values(#{name})") @options(usegeneratedkeys=true,keyproperty="id") public int add(user param);
service层
user user = new user(); user.setname("tom"); mybatisdao.add(user); system.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全注解化,希望对大家有所帮助
如对本文有疑问, 点击进行留言回复!!
springboot利用profile配置文件进行多环境切换
如何使用MyBatis-Plus代码生成器(逆向工程)一键生成代码
网友评论