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_注解代理写法的更多相关文章

  1. sql 自增字段的控制 hibernate注解的写法

    1 创建序列,新建了一个列作为主键 create sequence pbaseinfo INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE NOCACHE; ...

  2. Dubbo xml配置 和注解配置 写法

    <?xml version="1.0" encoding="UTF-8"?><!-- - Copyright 1999-2011 Alibab ...

  3. Mybatis项目中不使用代理写法【我】

    首先 spring 配置文件中引入 数据源配置 <?xml version="1.0" encoding="UTF-8"?> <beans x ...

  4. Java_myBatis_xml代理写法

    这种开发方式只需要写好Mapper.xml和对应的Interface就可以了. 1.编写Mapper.xml <?xml version="1.0" encoding=&qu ...

  5. ES3、ES5、ES6对象代理的写法差异

    ES3的对象代理写法: console.log('定义私有变量ES3写法:') // ES3 var Person = function (){ var data = { name:'ES3', ag ...

  6. Spring介绍及配置(XML文件配置和注解配置)

    本节内容: Spring介绍 Spring搭建 Spring概念 Spring配置讲解 使用注解配置Spring 一.Spring介绍 1. 什么是Spring Spring是一个开源框架,Sprin ...

  7. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

  8. java 代理模式 总结

    1.前言 最近舍友去面试遇到了关于java代理模式的问题. 我虽然知道怎么使用,但是没有做过正经的总结,因此有了这篇随笔,好好总结一下三大代理模式底层原理. 事实上,在开发项目的时候,基本用不上代理, ...

  9. 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)

    建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...

随机推荐

  1. java-过滤器、拦截器

    1.基础知识 1.1面向对象编程(OOP).面向切面编程(AOP) 面向对象编程: 将需求功能划分为不同的.相对独立的和封装良好的类,使他们有属于自己的行为,依靠继承和多态等来定义彼此的关系. 面向切 ...

  2. 结对项目gobang

    题目介绍:实现五子棋的基本规则,分黑棋和白棋.连成5个的胜利,完成了五子棋的单人游戏. 代码地址:https://github.com/liuxianchen/gobang 结对人:刘仙臣  康佳 结 ...

  3. slot 插槽的作用域用法(摘自vue.js 官网)

    有的时候你希望提供的组件带有一个可从子组件获取数据的可复用的插槽.例如一个简单的 <todo-list> 组件的模板可能包含了如下代码: <ul> <li v-for=& ...

  4. 使用node去爬虫

    let http = require('http'); let https = require('https');//引入node的https服务. let cheerio = require('ch ...

  5. Postgresql 密码设置

    今天下午 陷进去了 其实很简单的一个事情结果浪费了 接近一个小时. 做事情必须要细致一些. 自己的确做的不好. 这里面简单说一下pg_hba.conf 和 postgresql 密码的一些设置问题. ...

  6. BatchNormalization的使用

    # import BatchNormalization from keras.layers.normalization import BatchNormalization # instantiate ...

  7. Bootstrap排版——HTML元素的样式重定义

    前面的话 Bootstrap对默认的HTML元素进行了CSS样式定义,使得各种基本结构套用出来的HTML页面更加美观.本文将详细介绍Bootstrap中排版相关的内容 标题 [h] HTML 中的所有 ...

  8. Windows 增加远程连接数

    转载自 https://blog.csdn.net/scholar_man/article/details/60570827 1.设置终端设置,需要打开[控制面板]---[系统和安全] 2.进入系统和 ...

  9. BZOJ4385[POI2015]Wilcze doły——单调队列+双指针

    题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入 第一行包含三个整数n,p ...

  10. BZOJ5178[Jsoi2011]棒棒糖——主席树

    题目描述 Coffee的世界里也是有棒棒糖卖的,Coffee买了N(1≤N≤50000)只连着的.这N只棒棒糖包裹在小塑料袋中,排成 一列,相邻的两只棒棒糖的塑料袋是接起来的.为了方便,我们把棒棒糖从 ...