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. mybatis批量新增或更新

    mysql中在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE时,向数据库中插入一条记录: 若插入数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作(UPDA ...

  2. 基于zynq 7020的串口UART中断实验

    1.参考 UG585,P1790[JokerのZYNQ7020]UART学会Zynq(27)UART中断驱动模式示例 2.理论知识 在ZYNQ的中断中有一个IOP的中断集,它包几个外设的中断,其中包含 ...

  3. jquery+css 点赞喜欢特效

    百度盘链接 https://pan.baidu.com/s/1Nu8fiUrdffsNd6usTsUESg 密码 mps4 效果:

  4. Django框架第七篇(模型层)--多表操作:一对多/多对多增删改,跨表查询(基于对象、基于双下划线跨表查询),聚合查询,分组查询,F查询与Q查询

    一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增  create publish_id 传数字   (publish_id是数据库显示的字段名 ...

  5. [译]开发者须知的SOLID原则

    原文:SOLID Principles every Developer Should Know – Bits and Pieces SOLID Principles every devloper sh ...

  6. LOJ#2409. 「THUPC 2017」小 L 的计算题 / Sum(生成函数)

    题意 给定一个长为 \(n\) 的序列 \(\{a_i\}\) 对于 \(k \in [1, n]\) 求 \[ f_k = \sum_{i = 1}^{n} a_i^k \pmod {9982443 ...

  7. 如何在ArcGIS饼状图中下方添加文字

    内容源自:ArcGIS10.2基础教程(丁华) 书上要求在统计图的饼状图下方显示“总面积组成”,以及图例是只显示文字. 该如何操作呢? 其实就是在高级属性中选择标题-副标题-显示“总面积组成”即可 而 ...

  8. linux mount一个目录到另外一个目录

      从linux内核2.4.0以后mount支持mount --bind 一个目录到另外一个目录 比如: [root@localhost wind]# mkdir test1 test2 dir3 m ...

  9. LRU(Least Recently Used)算法的理解

    https://blog.csdn.net/wydyd110/article/details/84023688 感谢 ,自己学习记笔记 内存里建立一个哈希表,后来数据多了,爆了.咋整呢? 一个算法,就 ...

  10. Oracle 12c数据库的安装

    Oracle一路走来,不知不觉中已经到了12c,最近要用这个新版本了,从oracle的官网上注册了个用户,下载了win版本64位的先试一下. (1)下载安装包 a. 到官网进行下载需要先注册一个Ora ...