MyBatis注解开发

@Insert注解
注解属性value:写入SQL语句

@Options注解
实现添加新数据的主键封装
注解属性
useGeneratedKeys:使用生成的主键,配置为true
keyProperty:主键封装的pojo对象属性

@SelectKey注解
实现添加新数据的主键封装
注解属性
statement:要执行的SQL语句
before:在添加SQL语句之前还是之后进行,配置为false

keyProperty:主键封装的pojo对象属性

注解实现添加数据

UserMapper接口

//新增用户数据
@Insert("insert into user(username,sex,birthday,address)values(#
{username},#{sex},#{birthday},#{address})")
void saveUser(User user);

UserMapper测试

/**
* 注解开发
* 添加用户数据
*/
@Test
public void testSaveUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setUsername("孙权");
user.setSex("1");
user.setBirthday(new Date());
user.setAddress("东吴");
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.saveUser(user);
sqlSession.commit();
System.out.println(user);
sqlSession.close();
}

@Update注解
注解属性value:写入SQL语句
注解实现更新数据
UserMapper接口

//跟新用户
@Update("update user set username=#{username},sex=#{sex},birthday=#
{birthday},address=#{address} where id=#{id}")
void updateUser(User user);

UserMapper测试

/**
* 注解开发
* 更新用户数据
*/
@Test
public void testUpdateUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User();
user.setId(21);
user.setUsername("孙策");
user.setSex("2");
user.setBirthday(new Date());
user.setAddress("江东");
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.updateUser(user);
sqlSession.commit();
sqlSession.close();
}

@Delete注解
注解属性value:写入SQL语句
注解实现删除数据
UserMapper接口

//删除用户
@Delete("delete from user where id = #{id}")
void deleteUser(int id);

UserMapper测试

/**
* 注解开发
* 更新用户数据
*/
@Test
public void testDeleteUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
userMapper.deleteUser(21);
sqlSession.commit();
sqlSession.close();
}

@Select注解
注解属性value:写入SQL语句
注解实现主键查询用户数据
UserMapper接口

//主键查询用户
@Select("select id,username,sex,birthday,address from user where id =
#{id}")
User queryUserById(int id);

UserMapper测试

/**
* 注解开发
* 主键查询用户
*/
@Test
public void testQueryUserById(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.queryUserById(1);
System.out.println(user);
sqlSession.close();
}

注解实现查询全部用户数据

UserMapper接口

//查询全部用户
@Select("select id,username,sex,birthday,address from user")
List<User> queryUserByList();

UserMapper测试

/**
* 注解开发
* 查询全部用户
*/
@Test
public void testQueryUserByList(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.queryUserByList();
if (userList != null && userList.size() > 0){
for (User user : userList){
System.out.println(user);
}
}
sqlSession.close();
}

动态SQL语句之where和if

UserMapper接口

//多条件查询用户
@Select("<script>select id,username,sex,birthday,address from user" +
"<where>" +
"<if test = \"sex != null and sex != ''\">" +
" and sex = #{sex}" +
"</if>" +
"<if test = \"username != null and username != ''\">" +
" and username like #{username}" +
"</if>" +
"</where></script>")
List<User> queryUserByWhere(User user);

UserMapper测试

/**
* 注解开发
* 多条件查询用户信息
*/
@Test
public void testQueryUserByWhere(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setSex("2");
user.setUsername("%王%");
List<User> userList = userMapper.queryUserByWhere(user);
if(userList != null && userList.size() > 0){
for(User user1 : userList){
System.out.println(user1);
}
}
sqlSession.close();
}

动态SQL语句之foreach

UserMapper接口

@Select("<script>select id,username,sex,birthday,address from user" +
"<foreach collection = \"list\" open = \"where id in(\" close
= \")\" separator = \",\" item = \"item\">" +
"#{item}" +
"</foreach>" +
"</script>")
List<User> queryUserByListIds(List<Integer> ids);

UserMapper测试

/**
* 注解开发
* 传入List集合,查询用户数据
*/
@Test
public void testQueryUserByListIds(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<Integer> ids = new ArrayList<Integer>();
ids.add(1);
ids.add(2);
ids.add(3);
List<User> userList = userMapper.queryUserByListIds(ids);
if(userList != null && userList.size() > 0){
for(User user : userList){
System.out.println(user);
}
}
sqlSession.close();
}

一对一的注解开发

@Results注解
配置手动映射,取代resultMap标签
@Result注解
配置手动映射,取代result标签

OrdersMapper接口

//根据订单查询用户,一对一查询
@Select(" SELECT o.id,o.user_id,o.number,o.createtime,o.note FROM
orders o")
@Results({
//配置主键映射,id默认false,不是主键
@Result(id = true,column = "id",property = "id"),
//配置其他映射关系
@Result(column = "user_id",property = "userId"),
@Result(column = "number",property = "number"),
@Result(column = "createtime",property = "createtime"),
@Result(column = "note",property = "note"),
/*
配置关联查询用户表
property查询的pojo对象哪个属性做为条件查询
这个属性还是个pojo对象
column查询条件的pojo对象的属性
@One注解配置一对一的另一个查询语句
此语句需要对应的接口方法出现
*/
@Result(column = "user_id",property = "user",javaType =
User.class,
one = @One(select =
"com.itheima.mapper.UserMapper.queryUserByUserId",fetchType =
FetchType.LAZY))
})
List<Orders> queryOrdersUser();

UserMapper接口

@Select("select id,username,sex,birthday,address from user where id=#
{user_Id}")
User queryUserByUserId(Integer id);

OrdersMapp接口测试

/**
* 注解开发
* 一对一延迟加载测试
*/
@Test
public void testQueryOrdersUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapper ordersMapper =
sqlSession.getMapper(OrdersMapper.class);
List<Orders> ordersList = ordersMapper.queryOrdersUser();
if(ordersList != null && ordersList.size() > 0){
for(Orders orders : ordersList){
System.out.println(orders);
System.out.println(orders.getUser());
}
}
sqlSession.close();
}

一对多注解开发
UserMapper接口

//用户查询订单,一对多
@Select("select id,username,sex,birthday,address from user")
@Results({
@Result(id = true,column = "id",property = "id"),
@Result(column = "username",property ="username" ),
@Result(column = "sex",property ="sex" ),
@Result(column = "birthday",property ="birthday" ),
@Result(column = "address",property ="address" ),
@Result(column = "id",property = "ordersList",javaType =
List.class,
many = @Many(select =
"com.itheima.mapper.OrdersMapper.queryOrdersByUserId",fetchType =
FetchType.LAZY))
})
List<User> queryUserOrders();

OrdersMapper接口

//用户查询订单,一对多
@Select("select number,createtime from orders where user_id = #
{user_id}" )
List<Orders> queryOrdersByUserId(Integer user_id);

UserMapper接口测试

/**
* 注解开发
* 查询用户下的订单,一对多
*/
@Test
public void testQueryUserOrders(){
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.queryUserOrders();
if(userList != null && userList.size() > 0){
for(User user : userList){
System.out.println(user);
System.out.println(user.getOrdersList());
}
}
sqlSession.close();
}

MyBatis框架之注解开发的更多相关文章

  1. 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_3 基于注解的自定义再分析

    这里只需要 一是连接数据库的 二是映射的 注解是class的方式  dom4j技术获取xml的数据,这是xml的方式获取的下面几个关键的点 注解的方式回去dao类里面的几个主要的信息 User黄色的部 ...

  2. 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_2 回顾自定义mybatis的流程分析

  3. 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_1 今日课程内容介绍

  4. 整合ssm三大框架使用注解开发查询用户信息

    整合ssm三大框架使用注解开发查询用户信息 一.基础知识准备之spring mvc工作原理 二.分析 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求Hand ...

  5. MyBatis框架基础详细开发流程

    MyBatis 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 一.框架概述 1.1 什么是框架? 软件的半成品,解决了软件开发过程 ...

  6. Struts2框架之-注解开发

    Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...

  7. MyBatis:使用注解开发

    面向接口编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大 ...

  8. 8、MyBatis之使用注解开发

    9.使用注解开发 mybatis最初配置信息是基于 XML ,映射语句(SQL)也是定义在 XML 中的.而到MyBatis 3提供了新的基于注解的配置.不幸的是,Java 注解的的表达力和灵活性十分 ...

  9. mybatis学习——使用注解开发

    前言: 一个语句既可以通过 XML 定义,也可以通过注解定义.不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XM ...

随机推荐

  1. Mysql操作命令(基础)

    创建数据库 CREATE DATABASE name; 显示所有数据库 SHOW DATABASES; 删除数据库 DROP DATABASE name; 选择数据库 USE DATABASENAME ...

  2. Windows Server 2008 R2 IIS7.5配置FTP图文教程

    本文为大家分享了IIS 配置FTP 网站的具体过程,供大家参考,具体内容如下 说明:服务器环境是Windows Server 2008 R2,IIS7.5. 1. 在 服务器管理器的Web服务器(II ...

  3. ES6学习小结

    ES6(ES2015)--IE10+.Chrome.FireFox.移动端.NodeJS 编译.转换 1.在线转换 2.提前编译 babel = browser.js ES6: 1.变量 var 重复 ...

  4. Java 将 PPT 形状(表格、文本框、心形、图表等)保存成图片

    MS PowerPoint中的表格.文本框.心形.图表.图片等均可以称为形状,将这些形状保存成图片,便可分类储存,方便日后查找,再利用. 本文将介绍如何使用 Spire.Presentation fo ...

  5. springmvc 拦截器流程图

  6. Go语言(环境的搭建)

    一步一步,从零搭建Go语言开发环境. 安装Go语言及搭建Go语言开发环境 下载 下载地址 Go官网下载地址:https://golang.org/dl/ Go官方镜像站(推荐):https://gol ...

  7. vue css module

    步骤 module <style> -> <style module> class='header' -> :class='$style.header' <t ...

  8. 【sql笔记】oracle 循环

    =============================================== 2019/12/21_第1次修改                       ccb_warlock = ...

  9. ELK学习笔记之使用curl命令操作elasticsearch

    0x00 _cat系列 _cat系列提供了一系列查询elasticsearch集群状态的接口.你可以通过执行curl -XGET localhost:9200/_cat 1. 获取所有_cat系列的操 ...

  10. redis监控工具汇总

    redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redis性能. docker运行 docker ...