MyBatis框架之注解开发

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();
}

原文地址:https://www.cnblogs.com/qingmuchuanqi48/p/10920923.html

时间: 2024-07-28 23:23:24

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

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

这里只需要 一是连接数据库的 二是映射的 注解是class的方式  dom4j技术获取xml的数据,这是xml的方式获取的下面几个关键的点 注解的方式回去dao类里面的几个主要的信息 User黄色的部门就是要封装到哪里的数据.基于注解的开发,如何拿到User是最关键的 设计注解和泛型相关的知识 最终得到class的名称 原文地址:https://www.cnblogs.com/wangjunwei/p/11306401.html

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

原文地址:https://www.cnblogs.com/wangjunwei/p/11306369.html

Struts2框架之-注解开发

Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style="font-size:18px;">  <!-- 这是包名和命名空间的声明 --> <package name="orgPackage" namespace="/org" extends="struts-default"

Mybatis之使用注解开发CRUD

上一篇演示了如何使用XML来操作Mybatis实现CRUD,但是大量的XML配置文件的编写是非常烦人的.因此 Mybatis也提供了基于注解的配置方式,下面我们来演示一下使用接口加注解来实现CRUD的的例子. 首先是创建一个接口. package com.bird.mybatis.bean; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotation

基于springBoot,,springCloud,mybatis 框架简单 微服开发 ==CRUD

基本结构:父类工程.common工具类.provider提供者.消费者consumer (一般映射地址报错) 1...父类工程:需要配置pom.xml文件. 手动指定pom  <packaging>pom</packaging>, 1 <?xml version="1.0" encoding="UTF-8"?> 2 <project xmlns="http://maven.apache.org/POM/4.0.0&

mybatis的缓存和注解开发(4)

第四天:mybatis的缓存和注解开发 mybatis中的加载时机(查询的时机) mybatis中的一级缓存和二级缓存 mybatis的注解开发  单表CRUD  多表查询 一.今日内容概要 1.Mybatis中的延迟加载 问题:在一对多中,当我们有一个用户,它有100个账户.       在查询用户的时候,要不要把关联的账户查出来?       在查询账户的时候,要不要把关联的用户查出来?         在查询用户时,用户下的账户信息应该是,什么时候使用,什么时候查询的.       在查询

Annotation(三)——Spring注解开发

Spring框架的核心功能IoC(Inversion of Control),也就是通过Spring容器进行对象的管理,以及对象之间组合关系的映射.通常情况下我们会在xml配置文件中进行action,service,dao等层的声明,然后并告知框架我们想要的注入方式,然后在类中声明要组合类的get,set方法.而通过Spring框架中注解的运用也就主要是解决这类问题的.而框架中另一个核心知识AOP,一种面向横切面的方法编程,在程序中一般都是进行一次设置就可以的,所以都还放在配置文件中.例如声明式

Spring+SpringMVC+MyBatis深入学习及搭建(十六)——SpringMVC注解开发(高级篇)

转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7085268.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十五)——SpringMVC注解开发(基础篇) 本文主要内容: (1)SpringMVC校验 (2)数据回显 (3)异常处理器 (4)图片上传 (5)Json数据交互 (6)支持RESTful 1.SpringMVC校验 1.1校验理解 项目中,通常使用较多的是前端的校验,比如页面中js校验.对于安全要求较高的

用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试

这一部分的主要目的是 配置spring-service.xml  也就是配置spring  并测试service层 是否配置成功 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(2 配置spring-dao和测试)在这个基础上面 继续进行spring的配置. 回顾上面  我们已经成功测试通过了Mybatis的配置. 这时候的目录结构是: 一:下面我们继续补充目录结构,在com.peakfortake的文件目录项目