1、常用的注解。

2、@insert、@delete、@update、@select完成常见的CRUD操作。

import java.util.List;import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.lfy.bean.User;public interface UserMapper {@Insert("INSERT INTO TB_USER(name,sex,age) VALUES(#{name},#{sex},#{age})")@Options(useGeneratedKeys=true,keyProperty="id")
//    @SelectKey(before=false,keyProperty="id",resultType=Integer.class,
//    statement="SELECT LAST_INSERT_ID() AS id")int saveUser(User user);//@Param指定参数的名称,如果没有,则按顺序对应语句中的参数    @Delete("DELETE FROM TB_USER WHERE id = #{id}")int removeUser(@Param("id") Integer id);@Update("UPDATE TB_USER SET name = #{name},sex = #{sex},age = #{age} WHERE id = #{id}")void modifyUser(User user);//如果属性列的名称一致,可以省略@Result    @Select("SELECT * FROM TB_USER WHERE id = #{id}")@Results({@Result(id=true,column="id",property="id"),@Result(column="name",property="name"),@Result(column="sex",property="sex"),@Result(column="age",property="age")})User selectUserById(@Param("id") Integer id);@Select("SELECT * FROM TB_USER ")List<User> selectAllUser();}

public class InsertTest {public static void main(String[] args) {// 定义SqlSession变量SqlSession sqlSession = null;try {// 创建SqlSession实例sqlSession = FKSqlSessionFactory.getSqlSession();// 创建UserMapper实例UserMapper um = sqlSession.getMapper(UserMapper.class);// 创建User对象并设置属性User user = new User();user.setName("test");user.setSex("男");user.setAge(18);// 插入数据
            um.saveUser(user);// 查看插入数据生成的主键System.out.println("插入数据生成的主键id为:" + user.getId());// 提交事务
            sqlSession.commit();} catch (Exception e) {// 回滚事务
            sqlSession.rollback();e.printStackTrace();}finally {// 关闭SqlSessionif(sqlSession != null) sqlSession.close();}}}

2、1对1。

public interface CardMapper {@Select("SELECT * FROM TB_CARD WHERE ID = #{id} ")Card selectCardById(Integer id);}

public interface PersonMapper {//TB_PERSON表中有个字段card_id    @Select("SELECT * FROM TB_PERSON WHERE ID = #{id}")@Results({@Result(id=true,column="id",property="id"),@Result(column="name",property="name"),@Result(column="sex",property="sex"),@Result(column="age",property="age"),@Result(column="card_id",property="card",one=@One(select="com.lfy.mapping.CardMapper.selectCardById",fetchType=FetchType.EAGER))})Person selectPersonById(Integer id);}

one属性表示是一对一关联关系,@One注解的select属性表示需要关联执行的SQL语句,fetchType表示查询的类型是立即加载还是懒加载。

3、1对多

public interface StudentMapper {// 根据班级id查询班级所有学生@Select("SELECT * FROM TB_STUDENT WHERE CLAZZ_ID = #{id}")@Results({@Result(id=true,column="id",property="id"),@Result(column="name",property="name"),@Result(column="sex",property="sex"),@Result(column="age",property="age")})List<Student> selectByClazzId(Integer clazz_id);
}

public interface ClazzMapper {// 根据id查询班级信息@Select("SELECT * FROM TB_CLAZZ  WHERE ID = #{id}")@Results({@Result(id=true,column="id",property="id"),@Result(column="code",property="code"),@Result(column="name",property="name"),@Result(column="id",property="students",many=@Many(select="com.lfy.mapping.StudentMapper.selectByClazzId",fetchType=FetchType.LAZY))})Clazz selectById(Integer id);
}

column="id"表示会将id作为查询条件,传递到查询班级下所有学生的查询中。many属性表示是一对多关联关系

4、多对多

订单只会属于某一用户,订单对用户是1对1关系;订单里面会有很多商品,一个订单对商品是1对多的关系。所以查询订单信息利用上面两种关联关系组合查询。

public interface OrderMapper {@Select("SELECT * FROM TB_ORDER WHERE ID = #{id}")@Results({@Result(id=true,column="id",property="id"),@Result(column="code",property="code"),@Result(column="total",property="total"),@Result(column="user_id",property="user",one=@One(select="com.lfy.mapping.UserMapper.selectById",fetchType=FetchType.EAGER)),@Result(column="id",property="articles",many=@Many(select="com.lfy.mapping.ArticleMapper.selectByOrderId",fetchType=FetchType.LAZY))})Order selectById(Integer id);}

5、动态SQL

比较繁琐,不够直观简便,暂放弃整理。

转载于:https://www.cnblogs.com/ZeroMZ/p/11419671.html

Mybatis-学习笔记(8)常用的注解相关推荐

  1. mybatis学习笔记二(接口注解)

    直接上代码,全部在代码里讲解. 1.实体类 package com.home.entity;/*** 此类是:user实体类* @author hpc* @2017年1月10日下午9:36:59*/ ...

  2. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

  3. ant的下载与安装——mybatis学习笔记之预备篇(一)

    看到这个标题是不是觉得有点奇怪呢--不是说mybatis学习笔记吗,怎么扯到ant了?先别急,请容我慢慢道来. mybatis是另外一个优秀的ORM框架.考虑到以后可能会用到它,遂决定提前学习,以备不 ...

  4. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

  5. MyBatis多参数传递之混合方式——MyBatis学习笔记之十五

    在本系列文章的<MyBatis多参数传递之Map方式示例>一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map condit ...

  6. 【应用篇】MyBatis学习笔记

    MyBatis学习笔记 一 环境配置 1 什么是MyBatis? ​ MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的 JDBC 代码和参 ...

  7. MyBatis学习笔记(1)—使用篇

    MyBatis学习笔记(1)-使用篇 MyBatis学习笔记(2)-映射关系篇 MyBatis学习笔记(3)-高级映射之一对一映射 Mybatis学习笔记(4)-高级映射之一对多映射 Mybatis学 ...

  8. 超详细Mybatis学习笔记(可供下载)

    文章目录 1.简介 2.第一个Mybatis程序 搭建环境 编写代码 测试 3.CRUD(增删改查) 3.1.几个属性 3.2.select 3.3.insert 3.4.delete 3.5.upd ...

  9. Mybatis学习笔记【part03】增删改查

    Mybatis 学习笔记 Part03 1.传入参数与返回参数设置(查) <!-- 根据 id 查询 --> <select id="findById" resu ...

  10. Mybatis学习笔记——第一天

    Mybatis学习打卡 Mybatis学习笔记---第一天 Mybatis笔记 第一天 一.引言 1. 现有Jdbc的缺陷 2. Mybatis框架 3. 搭建环境 1) 引入jar包 2) 引入配置 ...

最新文章

  1. Java并发ReadWriteLock接口
  2. 2019温馨的元旦祝福语 2019元旦祝福语大全!收藏备用!
  3. nodejs mysql 返回json_python向mysql中存储JSON及Nodejs取出
  4. MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
  5. ADB通过WiFi连接手机调试Android应用
  6. logistic regression_【科研加油站】SPSS操作之有序Logistic回归的详细教程
  7. 不受支持的SQL类型1111
  8. 如何设计学术海报(翻译)
  9. Affinity Designer 查询面板渐变颜色
  10. 【nodejs】waitFor is deprecated
  11. java找出两个共有,Java-找出两个单链表的首个公共节点
  12. Delphi XE DataSnap三层开发实务
  13. 新员工入职表_基于APortal框架搭建员工入职培训平台
  14. 微信小程序分享至朋友圈功能
  15. 第十二章:如何制定里程碑
  16. 煤炭及煤化工加工会产生什么危废_煤化工固体废物的清洁处置
  17. 拭血长短句手札【2013-2017】微信公众号 shixuemp
  18. bilibili缓存文件在哪里_2020年最新最全实现转换bilibili的m4s为MP4的画质无损教程 专治各种不服!...
  19. 一台计算机地址线32根,若有一台计算机,它的地址线有32根,则它的寻址空间是...
  20. a股自动下单 python_python实现A股自动盯盘(基于baostock)

热门文章

  1. 烧钱两年,做事对得起工资,也要对得起公司这份决心
  2. 祝贺中国推送联盟初测成功
  3. LINUX下载编译iLBC
  4. VS2010编译:_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
  5. 最近两个星期,机器经常卡死,难道是内存用光了?
  6. 重载下标操作符,检查内存越界
  7. gstreamer插件用不了,及黑名单Blacklist的解决办法
  8. 下划线(Underline)与低线(Lowline)的差异
  9. 没有wan接口_“伪千兆”路由器,快回家看看你家中招了没有?
  10. oracle注释 kole_t2u,oracle4