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();
}
MyBatis框架之注解开发的更多相关文章
- 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_3 基于注解的自定义再分析
这里只需要 一是连接数据库的 二是映射的 注解是class的方式 dom4j技术获取xml的数据,这是xml的方式获取的下面几个关键的点 注解的方式回去dao类里面的几个主要的信息 User黄色的部 ...
- 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_2 回顾自定义mybatis的流程分析
- 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_1 今日课程内容介绍
- 整合ssm三大框架使用注解开发查询用户信息
整合ssm三大框架使用注解开发查询用户信息 一.基础知识准备之spring mvc工作原理 二.分析 第一步:发起请求到前端控制器(DispatcherServlet) 第二步:前端控制器请求Hand ...
- MyBatis框架基础详细开发流程
MyBatis 项目已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号 码出Offer 领取各种学习资料! 一.框架概述 1.1 什么是框架? 软件的半成品,解决了软件开发过程 ...
- Struts2框架之-注解开发
Struts2主要解决了从JSP到Action上的流程管理,如何进行Uri和action类中每个方法的绑定这是重点,在这里先简单看一下配置文件中的简单配置: <span style=" ...
- MyBatis:使用注解开发
面向接口编程 大家之前都学过面向对象编程,也学习过接口,但在真正的开发中,很多时候我们会选择面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大 ...
- 8、MyBatis之使用注解开发
9.使用注解开发 mybatis最初配置信息是基于 XML ,映射语句(SQL)也是定义在 XML 中的.而到MyBatis 3提供了新的基于注解的配置.不幸的是,Java 注解的的表达力和灵活性十分 ...
- mybatis学习——使用注解开发
前言: 一个语句既可以通过 XML 定义,也可以通过注解定义.不过,由于 Java 注解的一些限制以及某些 MyBatis 映射的复杂性,要使用大多数高级映射(比如:嵌套联合映射),仍然需要使用 XM ...
随机推荐
- Java 8并行流的性能陷阱
并行化流被分成多个块,每个块独立处理,结果在最后汇总. CPU密集型代码如下: private long countPrimes(int max) { return range(1, max) ...
- 1-2docker-基本的使用
1.Docker 官⽅提供了⼀个公共的镜像仓库 https://hub.docker.com 2.获取镜像 docker pull [选项] [Docker Registry 地址[:端⼝]/]仓库名 ...
- 【并行计算-CUDA开发】OpenACC与OpenHMPP
在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC.这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上 ...
- vs解决方案中添加文件夹
一般我们在github上面看到的项目结构基本都是把项目放到src文件夹中,test放测试 查了半天也没查到这个是怎么产生的...这边只能用比较笨的方法来完成. 解决方法中是允许我们添加解决方案文件夹, ...
- SPI ServiceLoader源码分析
public class ddd { public static void main(String[] args) { ServiceLoader1<Hello> sl = Service ...
- 搭建mqtt服务器apollo
使用的apollo,官网太慢,附上百度云下载地址: 链接:https://pan.baidu.com/s/1NIq6R71hlyPuaUBwPoMPNg 提取码:36vw 原文链接:https://b ...
- mac下php配置
打开/关闭服务 sudo apachectl start sudo apachectl stop 查看apche版本 apacectl -v 修改项目默认路径: 打开配置文件目录/private/et ...
- error adding symbols:DSO missing from command line
编译时加上-lz,如果是使用eclipse,则在添加库z
- 微信小程序获取微信绑定的手机号
怎么获取微信绑定手机号呢?我们授权登录的时候,我们只能获取微信登录人员的头像,昵称,性别之类的,而手机号需要二次授权才可以,那么获取手机号都需要哪些条件呢?来看官方文档 获取手机号 获取微信用户绑定的 ...
- Oracle的字串處理
Oracle的字串處理 除了寫程式之外,資料庫的應用也是蠻重要的,而SQL語法,用法大致相同,但各公司所出的資料庫還是有所差別,而ORACLE SQL給了相當多的函數應用,下面列了一些函法的名稱和用法 ...