Mybatis-学习笔记(8)常用的注解
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)常用的注解相关推荐
- mybatis学习笔记二(接口注解)
直接上代码,全部在代码里讲解. 1.实体类 package com.home.entity;/*** 此类是:user实体类* @author hpc* @2017年1月10日下午9:36:59*/ ...
- MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三
前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...
- ant的下载与安装——mybatis学习笔记之预备篇(一)
看到这个标题是不是觉得有点奇怪呢--不是说mybatis学习笔记吗,怎么扯到ant了?先别急,请容我慢慢道来. mybatis是另外一个优秀的ORM框架.考虑到以后可能会用到它,遂决定提前学习,以备不 ...
- mybatis学习笔记--常见的错误
原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...
- MyBatis多参数传递之混合方式——MyBatis学习笔记之十五
在本系列文章的<MyBatis多参数传递之Map方式示例>一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map condit ...
- 【应用篇】MyBatis学习笔记
MyBatis学习笔记 一 环境配置 1 什么是MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除了几乎所有的 JDBC 代码和参 ...
- MyBatis学习笔记(1)—使用篇
MyBatis学习笔记(1)-使用篇 MyBatis学习笔记(2)-映射关系篇 MyBatis学习笔记(3)-高级映射之一对一映射 Mybatis学习笔记(4)-高级映射之一对多映射 Mybatis学 ...
- 超详细Mybatis学习笔记(可供下载)
文章目录 1.简介 2.第一个Mybatis程序 搭建环境 编写代码 测试 3.CRUD(增删改查) 3.1.几个属性 3.2.select 3.3.insert 3.4.delete 3.5.upd ...
- Mybatis学习笔记【part03】增删改查
Mybatis 学习笔记 Part03 1.传入参数与返回参数设置(查) <!-- 根据 id 查询 --> <select id="findById" resu ...
- Mybatis学习笔记——第一天
Mybatis学习打卡 Mybatis学习笔记---第一天 Mybatis笔记 第一天 一.引言 1. 现有Jdbc的缺陷 2. Mybatis框架 3. 搭建环境 1) 引入jar包 2) 引入配置 ...
最新文章
- Java并发ReadWriteLock接口
- 2019温馨的元旦祝福语 2019元旦祝福语大全!收藏备用!
- nodejs mysql 返回json_python向mysql中存储JSON及Nodejs取出
- MYSQL-实现ORACLE- row_number() over(partition by ) 分组排序功能
- ADB通过WiFi连接手机调试Android应用
- logistic regression_【科研加油站】SPSS操作之有序Logistic回归的详细教程
- 不受支持的SQL类型1111
- 如何设计学术海报(翻译)
- Affinity Designer 查询面板渐变颜色
- 【nodejs】waitFor is deprecated
- java找出两个共有,Java-找出两个单链表的首个公共节点
- Delphi XE DataSnap三层开发实务
- 新员工入职表_基于APortal框架搭建员工入职培训平台
- 微信小程序分享至朋友圈功能
- 第十二章:如何制定里程碑
- 煤炭及煤化工加工会产生什么危废_煤化工固体废物的清洁处置
- 拭血长短句手札【2013-2017】微信公众号 shixuemp
- bilibili缓存文件在哪里_2020年最新最全实现转换bilibili的m4s为MP4的画质无损教程 专治各种不服!...
- 一台计算机地址线32根,若有一台计算机,它的地址线有32根,则它的寻址空间是...
- a股自动下单 python_python实现A股自动盯盘(基于baostock)
热门文章
- 烧钱两年,做事对得起工资,也要对得起公司这份决心
- 祝贺中国推送联盟初测成功
- LINUX下载编译iLBC
- VS2010编译:_WIN32_WINNT not defined. Defaulting to _WIN32_WINNT_MAXVER (see WinSDKVer.h)
- 最近两个星期,机器经常卡死,难道是内存用光了?
- 重载下标操作符,检查内存越界
- gstreamer插件用不了,及黑名单Blacklist的解决办法
- 下划线(Underline)与低线(Lowline)的差异
- 没有wan接口_“伪千兆”路由器,快回家看看你家中招了没有?
- oracle注释 kole_t2u,oracle4