Java_Mybatis_注解代理写法
Mybatis的开发方式其实有3种:
1. 原始Dao开发(就是把mapper接口、映射文件和实现类都一并开发)
2. xml代理(就是只实现mapper接口和映射文件)
3.注解代理(就是只实现mapper接口,把映射文件的内容通过注解来写)
注解开发也分3种:
1.静态SQL
2.动态SQL
3.多表关联
主要注解有:
静态:
@Insert:相当于<insert>标签,实现新增
@Update: 相当于<update>标签,实现更新
@Delete: 相当于<delete>标签,实现删除
@Select: 相当于<select>标签,实现查询
@SelectKey:相当于<selectKey>标签,实现主键返回
动态:
@InsertProvider: 相当于<insert>标签,实现新增
@UpdateProvider: 相当于<update>标签,实现更新
@DeleteProvider: 相当于<delete>标签,实现删除
@SelectProvider: 相当于<select>标签,实现查询
多表关联:
@Results: 相当于<resultMap>标签,需要和@Result注解一起使用。
@Result: 相当于<result>和<id>标签,实现结果集中某一列的数据映射
* column 数据库的列名
* property 需要装配的属性名
* one 需要使用的@One 注解(@Result(one=@One()))
* many 需要使用的@Many 注解(@Result(many=@many()))
@One: 相当于<association>标签,实现一对一关系映射
@Many:相当于<collection>标签,实现一对多关系映射
@One和@Many注解的属性:
* select 属性:代表将要执行的 sql 语句
* fetchType 属性:代表加载方式,一般如果要延迟加载都设置为 LAZY 的值
使用格式:
1.@Results({@Result(),@Result()})或@Results(@Result())
2.@Result(column=" ",property="",one=@One(select=""))
具体例子:
public interface AnnotationUserMapper {
// 查询
@Select("SELECT * FROM user WHERE id = #{id}")
public User findUserById(int id);
// 模糊查询用户列表
@Select("SELECT * FROM user WHERE username LIKE '%${value}%'")
public List<User> findUserList(String username);
// 添加并实现主键返回
@Insert("INSERT INTO user (username,birthday,sex,address) VALUES (#{username},#{birthday},#{sex},#{address})")
@SelectKey(before=false,statement="SELECT LAST_INSERT_ID()",keyProperty="id",resultType=int.class)
public void insertUser(User user);
// 动态SQL
@SelectProvider(type=UserSqlBuilder.class,method="getDynamicSQL")
public List<User> dynamicSQL(UserQueryVO vo);
// 使用Results注解完成结果映射
@Results({
@Result(column="id",property="id"),
@Result(column="username",property="username"),
@Result(column="sex",property="sex"),
@Result(column="address",property="address")
})
@Select("SELECT * FROM user WHERE id = #{id}")
public User findUserByIdWithResultMap(int id);
// 演示延迟加载
@Results({
@Result(column="id",property="id"),
@Result(column="user_id",property="user_id"),
@Result(column="number",property="number"),
@Result(column="note",property="note"),
@Result(property="user",javaType=User.class,column="user_id",
one=@One(select="com.kkb.mybatis.anno.AnnotationUserMapper.findUserById",fetchType=FetchType.LAZY))
})
@Select("SELECT * FROM orders")
public List<OrdersExt> lazyLoading();
class UserSqlBuilder {
public String getDynamicSQL(final UserQueryVO vo) {
return new SQL() {
{
SELECT("*");
FROM("user");
User user = vo.getUser();
if (user != null) {
if(user.getUsername() != null && !user.equals("")) {
WHERE("username like '%"+user.getUsername()+"%'");
}
}
ORDER_BY("id");
}
}.toString();
}
}
}
Java_Mybatis_注解代理写法的更多相关文章
- sql 自增字段的控制 hibernate注解的写法
1 创建序列,新建了一个列作为主键 create sequence pbaseinfo INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE NOCACHE; ...
- Dubbo xml配置 和注解配置 写法
<?xml version="1.0" encoding="UTF-8"?><!-- - Copyright 1999-2011 Alibab ...
- Mybatis项目中不使用代理写法【我】
首先 spring 配置文件中引入 数据源配置 <?xml version="1.0" encoding="UTF-8"?> <beans x ...
- Java_myBatis_xml代理写法
这种开发方式只需要写好Mapper.xml和对应的Interface就可以了. 1.编写Mapper.xml <?xml version="1.0" encoding=&qu ...
- ES3、ES5、ES6对象代理的写法差异
ES3的对象代理写法: console.log('定义私有变量ES3写法:') // ES3 var Person = function (){ var data = { name:'ES3', ag ...
- Spring介绍及配置(XML文件配置和注解配置)
本节内容: Spring介绍 Spring搭建 Spring概念 Spring配置讲解 使用注解配置Spring 一.Spring介绍 1. 什么是Spring Spring是一个开源框架,Sprin ...
- (转)Spring的bean管理(注解方式)
http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...
- java 代理模式 总结
1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...
- 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)
建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...
随机推荐
- myeclipse从SVN检出项目报错
今天是在公司实习的第一天,从SVN服务器检出项目后发现报错. 解决方法: 1. 右键项目,选择属性properties-->选择resource-->将others选中并换为UTF-8 2 ...
- <构建之法>第三10、11、12章
第十章 典型用户和场景 问题:如何更准确知道用户的需求是什么,设计出满足用户的软件? 第十一章 软件设计与实现 问题:软件设计过程中,如何管理设计变更? 第十二章 用户体验 问题:在何时开始设计用户体 ...
- docker网络调试过程
#1: 添加永久网桥 vi /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTROTO=static IPADDR ...
- Java singleton 一例
org.springframework.beans.factory.support.DefaultListableBeanFactory - Returning cached instance of ...
- C#微信扫码支付Demo
1.打开微信支付开发平台: https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=11_1 2.下载SDK Demo: C#版下载
- PSexec以及xcopy的简单使用
1. 远程执行命令. 有时候不想远程但是想执行一些命令, 比较简单的方法是: 下载systeminternals 然后解压缩后可以讲目录放到path环境变量中 然后打开命令行工具 输入 如下的命令 p ...
- python自然语言处理函数库nltk从入门到精通
1. 关于Python安装的补充 若在ubuntu系统中同时安装了Python2和python3,则输入python或python2命令打开python2.x版本的控制台:输入python3命令打开p ...
- loadrunner基础学习笔记五-场景
场景目标:模拟10家旅行社同时登录.搜索航班.购买机票.查看航班路线并退出 负载测试是指在典型工作条件下测试应用程序,例如:多家旅行社同时在同一个机票预订系统中预订机票 controller提供所有用 ...
- js Location
window.location用來返回頁面的地址,并把頁面重定向新的頁面: location.pathname:返回當前的頁面地址和文件名 location.hostname:主機名 location ...
- python之Counter类:计算序列中出现次数最多的元素
Counter类:计算序列中出现次数最多的元素 from collections import Counter c = Counter('abcdefaddffccef') print('完整的Cou ...