java注解 sql_mybatis中注解映射SQL示例代码

前言

本文主要给大家介绍了关于mybatis注解映射sql的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

结果集分页

有时我们需要处理海量数据,由于数据量太大,所以不能一次取出所有的数据,这时我们就需要使用分页功能。mybatis通过rowbounds对象提供对分页的支持,如下所示:

select * from studdents

int offset=0;//开始位置

int limit=25;//取出的数据条数

rowbounds rowbounds=new rowbounds(offset,limit);

list list=studentmapper.findallstudent(rowbounds);

结果处理器

有时我们需要对查询结果做一些特殊的处理,这个时候就需要结果处理器,举例如下,我们通过sql查询学生的stud_id和name,并期望返回一个map,其中key是stud_id,value是name.

新建一个接口:

public interface resulthandler

{

void handleresult(resultcontext context);

}

主要处理流程:

map map=new hashmap();

sqlsession sqlsession=mybatisutil.opensession();

sqlsession.select("com.mybatis3.mappers.studentmapper.findallstudents",new resulthandler(){

public void handlerresult(resultcontext context)

{

student student=(student)context.getresultobject();

map.put(student.getstudid(),student.getname());

}

})

缓存

缓存对于很多应用来说都是很重要的,因为它能提高系统的性能。mybatis内建了缓存支持,默认情况下,一级缓存是打开的,即如果你使用相同的sqlsession接口调用相同的select查询,查询结果从缓存中取得而不是去查询数据库。

也可以通过标签配置二级缓存。当配置了二级缓存后,也就意味着所有的查询结果都会被缓存,insert,update,delete语句会更新缓存,cache的缓存管理算法是lru。除了内建的缓存之外,mybatis还整合了第三方缓存框架例如ehcache等。

注解@insert @update @select @ delete

举例说明注解的用法:

public interface studentmapper

{

@insert("insert into student (stud_id, name, email, addr_id, phone)values(#{studid},#{name},#{email},#{address.addrid},#{phone})")

int insertstudent(student student);

}

public interface studentmapper

{

@insert("insert into student (name,email,addr_id,phone)values(#{name},#{email},#{address.addrid},#{phone})")

@options(usegeneratedkeys=true,keyproperty="studid")

int insertstudent(student student);

}

public interface studentmapper

{

@insert("insert into student (name,email,addr_id,phone)values(#{name},#{email},#{address.addrid},#{phone})")

@selectkey(statement="select stud_id_seq.nextval from dual",keyproperty="studid",resulttype=int.calss,before=true)

int insertstudent(student student);

}

@update("update students set name=#{name},email=#{email}")

int updatestudent(student student);

@delete("delete form students where stud_id=#{studid}")

int deletestudent(int studid)

@select("select name,email,phone from students where stud_id=#{studid}")

student findstudentbyid(integer studid);

结果注解

@select("select name,email,phone from students where stud_id=#{studid}")

@results({

@result(id=true,column="stud_id",property="studid"),

@result(column="name",property="name"),

@result(column="email",property="email"),

@result(column="phone",property="phone")

})

student findstudentbyid(integer studid);

结果注解有一个缺点,就是在一个查询方法前面都要写一遍,不能重用。解决这个问题方案是:

定义一份结果映射文件如下所示:

.......

@select("select name,email,phone from students where stud_id=#{studid}")

@resultmap("com.mybatis3.mappers.studentmapper.studentresult")

student findstudentbyid(integer studid);

动态sql的注解

对于动态sql,mybatis提供了不同的注解,@insertprovider @updateprovider @deleteprovider @selectprovider

用法如下所示:

首先创建一个provider类:

public class sqlprovider

{

public string findtutorbyid(int tutorid)

{

return "select tutorid,name,email from tutors where tutorid="+tutorid;

}

}

使用provider类:

@selectprovider(type=sqlprovider.class,method="findtutorbyid")

tutor findtutorbyid(int tutorid);

但是使用字符串连接创建sql语句容易出现问题,所以mybatis提供了一个sql工具,简化了构建动态sql的方式;

如下所示:

public class sqlprovider

{

public string findtutorbyid(int tutorid)

{

return new sql(){{

select("tutorid,name,email")

from("tutors")

where("tutorid="+tutorid)

}}.tostring();

}

}

或者

public class sqlprovider

{

public string findtutorbyid()

{

return new sql(){{

select("tutorid,name,email")

from("tutors")

where("tutorid=#{tutorid}")

}}.tostring();

}

}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对萬仟网的支持。

希望与广大网友互动??

点此进行留言吧!

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

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

相关文章

超赞的“数据与算法之美”资料分享!

相信,一直关注着我们的同学们都知道,小思妹分享了好多好多的资料给大家。为了方便新来的同学自取,小思妹又重新整理了一遍,直接点以下标题即可跳转!这是我见过的最全的训练数据集,没有之一!送你…

mysql服务的启动和停止 net stop mysql net start mysql

第一招、mysql服务的启动和停止 net stop mysql net start mysql 第二招、登陆mysql 语法如下: mysql -u用户名-p用户密码 键入命令mysql -uroot -p,回车后提示你输入密码,输入12345,然后回车即可进入到mysql中了,mysq…

在ASP.NET Core微服务架构下使用数据库切分和扩展, 并用JMeter进行负载测试

原文链接:https://itnext.io/how-to-scale-an-asp-net-core-microservice-and-sharded-database-load-test-with-jmeter-1a8c7292e7e3现在,您将扩展应用程序并运行多个微服务和数据库的容器实例。您将使用Docker Compose和HAProxy负载均衡器:…

mysql5.5 mysqli_php5.5.38增加mysqli扩展

php5.5.38增加mysqli扩展发布时间:2020-08-28 03:43:17来源:51CTO阅读:1148作者:xingyun2010编译的时候正常:./configure --prefix/usr/local/mysqli --with-php-config/usr/local/php/bin/php-config --with-mysqli/u…

每日一笑 | 周杰伦到底什么时候才发新专辑?

全世界只有3.14 % 的人关注了数据与算法之美(图源网络,侵权删)

GARFIELD@10-18-2004

子非猫转载于:https://www.cnblogs.com/rexhost/archive/2004/10/18/53799.html

【荐】牛逼的WPF动画库:XamlFlair

【荐】牛逼的WPF动画库:XamlFlair原文链接:https://github.com/XamlFlair/XamlFlair翻译:沙漠尽头的狼(本文未全文翻译,建议阅读原文了解更多)XamlFlairXamlFlair库的目标是简化常见动画的实现,并允许开发人员使用几行…

Python编程系列教程第13讲——隐藏数据和封装

视频地址:http://www.56.com/u88/v_OTM5NjU0MjE.html#fromoutpvidOTM5NjU0MjE 普及网络安全知识,推动信息技术发展。 为祖国的网络安全撑起一片蓝天,为网络安全爱好者构建一方家园。 欢迎来到灰帽程序员论坛,我们的网址是&#xf…

HijackThis日志细解【简明教程增强版】(五)

(九)组别——O51. 项目说明O5项与控制面板中被屏蔽的一些IE选项相关,一些恶意程序会隐藏控制面板中关于IE的一些选项,这可以通过在control.ini文件中添加相关命令实现。2. 举例O5 - control.ini: inetcpl.cplno 这里隐藏了控制面板…

java字符串如何输出_java字符串如何输出

在Java编程中,我们常常用 System.out.println(); 来输出字符串。System.out.println();System是一个类,继承自根类Objectout是类PrintStream类实例化的一个对象,且是System类的静态成员变量println()是类PrintStream的成员方法,被…

简单易懂的自动驾驶科普知识

全世界只有3.14 % 的人关注了数据与算法之美有不少人问我人工智能和自动驾驶的技术问题,我作为一个主业是后端开发的老码农可是回答不了啊!今天转载一篇自动驾驶大拿写的文章,学习一下。先来一张各大车企自动驾驶技术的分级图,大致…

图像处理工具包ImagXpress中如何设置上下文菜单

ImagXpress 是世界上最先进的彩色映像和照片图像处理工具包,有着.NET、COM、VC三种组件形式。ImagXpress可以为开发者构建的应用程序提供图像浏览、编辑、打印、TWAIN扫描、文件格式转换等优秀的功能。本文先来看看它的一些基础设置,如何设置上下文菜单。…

Educational Codeforces Round 157 (Rated for Div. 2)

Educational Codeforces Round 157 (Rated for Div. 2) A 模拟 #include <bits/stdc.h>using namespace std;const int N 3e5 10;void solve() {int x , y , k;cin >> x >> y >> k;if(y < x){cout << x << endl;}else if(x k >…

WPF TextBox限制只能输入数字的两种方法

文本框中只能输入数字&#xff0c;一个常见的功能喽&#xff0c;今天就来看看如何实现它~下面就看看代码思路都写在xaml里面了&#xff0c;MainWindow.xaml:<Window x:Class"wpfcore.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/present…

r.java没有生成_R.java 常见问题(R.java文件没有生成 )

1、选择菜单 Project >> Clean &#xff0c;前提是勾选上 Bulid Automatically(自动构建部署) &#xff0c; 点Clean后会重新构建项目&#xff0c;因为一般情况下&#xff0c;R.java文件在这个时候会重新更新生成一边&#xff0c;如果工程有错&#xff0c;就不会自动生成…

SmartPart事件

姑且把这样的一件事情叫做事件&#xff01; SmartPart是一个非常好的Sharepoint用户控件包装器&#xff08;kaneboy开发的包装控件也非常好用&#xff09;&#xff0c;我们知道&#xff0c;在WSS2.0/SPS2003平台上只有两种方法创建你自己的WebPart&#xff1a; 1、使用MS官方提…

国家特级数学教授李毓佩:我们欠孩子真正的数学阅读 !

▲数据汪特别推荐点击上图进入玩酷屋说到数学&#xff0c;我想起了13年一场轰动行业各界的“数学无用论”&#xff01;那时微博上有个话题叫做#让数学滚出高考#&#xff0c;超过7成网友都表示支持&#xff0c;这可怕的比例就能说明在中国由于数学差导致命运被洗牌的真不在少数……

NET问答:null != variable 和 variable != null 到底有什么区别?

咨询区 mr_georg&#xff1a;在 C# 中&#xff0c;下面的两种写法在执行效率上是否存在差异&#xff1f;if (null ! variable) ... if (variable ! null) ...因为最近我经常看到这种非自然的写法 null ! variable&#xff0c;这让我感到很好奇&#xff0c;因为我觉得第二种写法…

分清词类

要学好英语&#xff0c;分清词类至关重要&#xff0c;每学一个词&#xff0c;要知道他的词类&#xff0c;是名词还是动词&#xff0c;这至关重要。每个词类都有其自己的特点&#xff0c;只有知道这个词&#xff0c;属于哪个词类&#xff0c;才能正确的使用它。同时还要弄清各个…

centos 6 x64 mysql_CentOS 6.x版本升级Mysql

首先确定一下自己的DNS vi /etc/resolv.conf 我一般为114.114.114.114#-----------------------------CentOS 6.x版本升级Mysql ------------------#! /bin/sh#1.关闭selinuxcp -rp /etc/selinux/config /etc/selinux/config.baksetenforce 0sed -i 7s/enforcing/disabled/…