mybatis使用注解开发

Mybatis目录

注解开发的crud
1.IUserDao接口中使用注解
2.测试类
注解开发的多表查询
多对一(一对一)
1.IAccountDao接口中使用注解
2.Account类中(从表类)
3.测试类
一对多(多对多)
1.IUserDao接口中使用注解
2.User类中(从表类)
注解开启二级缓存

注解开发的crud

1.IUserDao接口中使用注解

public interface IUserDao {/*** 查询所有用户* @return*/@Select("select * from user")List<User> findAll();/*** 保存用户* @param user*/@Insert("insert into user(username,address,sex,birthday)values(#{username},#{address},#{sex},#{birthday})")void saveUser(User user);/*** 更新用户* @param user*/@Update("update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#{address} where id=#{id}")void updateUser(User user);/*** 删除用户* @param userId*/@Delete("delete from user where id=#{id} ")void deleteUser(Integer userId);/*** 根据id查询用户* @param userId* @return*/@Select("select * from user  where id=#{id} ")User findById(Integer userId);/*** 根据用户名称模糊查询* @param username* @return*/
//    @Select("select * from user where username like #{username} ")@Select("select * from user where username like '%${value}%' ")List<User> findUserByName(String username);/*** 查询总用户数量* @return*/@Select("select count(*) from user ")int findTotalUser();
}

2.测试类

public class AnnotationCRUDTest {private InputStream in;private SqlSessionFactory factory;private SqlSession session;private IUserDao userDao;@Beforepublic  void init()throws Exception{in = Resources.getResourceAsStream("SqlMapConfig.xml");factory = new SqlSessionFactoryBuilder().build(in);session = factory.openSession();userDao = session.getMapper(IUserDao.class);}@Afterpublic  void destroy()throws  Exception{session.commit();session.close();in.close();}@Testpublic void testSave(){User user = new User();user.setUsername("mybatis annotation");user.setAddress("北京市昌平区");userDao.saveUser(user);}@Testpublic void testUpdate(){User user = new User();user.setId(57);user.setUsername("mybatis annotation update");user.setAddress("北京市海淀区");user.setSex("男");user.setBirthday(new Date());userDao.updateUser(user);}@Testpublic void testDelete(){userDao.deleteUser(51);}@Testpublic void testFindOne(){User user = userDao.findById(57);System.out.println(user);}@Testpublic  void testFindByName(){
//        List<User> users = userDao.findUserByName("%mybatis%");List<User> users = userDao.findUserByName("mybatis");for(User user : users){System.out.println(user);}}@Testpublic  void testFindTotal(){int total = userDao.findTotalUser();System.out.println(total);}
}

注解开发的多表查询

可以这么记忆:
你所需要对应的表是很多个注解用many
对应一个的话就用one

demo功能阐述
查询用户账户的时候 返回用户的信息
因为多个账户或者一个账户才对应一个用户

多对一(Mybatis中 一对一)

1.IAccountDao接口中使用注解

public interface IAccountDao {/*** 查询所有账户,并且获取每个账户所属的用户信息* @return*/@Select("select * from account")@Results(id="accountMap",value = {@Result(id=true,column = "id",property = "id"),@Result(column = "uid",property = "uid"),@Result(column = "money",property = "money"),//这个注解是引入主表        FetchType(加载时机)  EAGER(立即加载)@Result(property = "user",column = "uid",one=@One(select="com.itheima.dao.IUserDao.findById",fetchType= FetchType.EAGER))})List<Account> findAll();/*** 根据用户id查询账户信息* @param userId* @return*/@Select("select * from account where uid = #{userId}")List<Account> findAccountByUid(Integer userId);
}

2.Account类中(从表类)

//多对一(mybatis中称之为一对一)的映射:一个账户只能属于一个用户private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}

3.测试类

public class AccountTest {private InputStream in;private SqlSessionFactory factory;private SqlSession session;private IAccountDao accountDao;@Beforepublic  void init()throws Exception{in = Resources.getResourceAsStream("SqlMapConfig.xml");factory = new SqlSessionFactoryBuilder().build(in);session = factory.openSession();accountDao = session.getMapper(IAccountDao.class);}@Afterpublic  void destroy()throws  Exception{session.commit();session.close();in.close();}@Testpublic  void  testFindAll(){List<Account> accounts = accountDao.findAll();for(Account account : accounts){System.out.println("----每个账户的信息-----");System.out.println(account);System.out.println(account.getUser());}}
}

一对多(多对多)

查询用户信息的时候 返回用户的账户信息
因为一个用户对应多个用户的账户信息

使用的是延迟加载

1.IUserDao接口中使用注解

public interface IUserDao {/*** 查询所有用户* @return*/@Select("select * from user")@Results(id="userMap",value={@Result(id=true,column = "id",property = "userId"),@Result(column = "username",property = "userName"),@Result(column = "address",property = "userAddress"),@Result(column = "sex",property = "userSex"),@Result(column = "birthday",property = "userBirthday"),@Result(property = "accounts",column = "id",many = @Many(select = "com.itheima.dao.IAccountDao.findAccountByUid",fetchType = FetchType.LAZY))})List<User> findAll();/*** 根据id查询用户* @param userId* @return*/@Select("select * from user  where id=#{id} ")@ResultMap("userMap")User findById(Integer userId);/*** 根据用户名称模糊查询* @param username* @return*/@Select("select * from user where username like #{username} ")@ResultMap("userMap")List<User> findUserByName(String username);
}

2.User类中(从表类)

//一对多关系映射:一个用户对应多个账户private List<Account> accounts;public List<Account> getAccounts() {return accounts;}public void setAccounts(List<Account> accounts) {this.accounts = accounts;}

注解开启二级缓存

哪个Dao接口需要就写在哪儿

@CacheNamespace(blocking = true) 位于到的顶部!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325640.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Build 2017 | 微软开发者大会临近,今年的主题是边缘计算

200 多家明星企业&#xff0c;20 位著名投资机构顶级投资人共同参与&#xff01;「新智造成长榜」致力于发掘 AI 领域有 “三年十倍” 成长潜力的创新公司&#xff0c;下一波 AI 独角兽&#xff0c;会有你么&#xff1f;点击加入&#xff01; 雷锋网按&#xff1a;微软首席执行…

Photoshop的基本操作

一、缩放工具 1.缩放工具相当于放大镜和缩小镜&#xff0c;从视觉上改变图像的大小&#xff0c;但实际尺寸并没有改变。 2.快捷键&#xff1a;z或者按住alt鼠标滑轮上滑&#xff08;放大&#xff09;、下滑&#xff08;缩小&#xff09; 二、抓手工具&#xff1a; 1.当图片放大…

JDBC8.0 URL配置

Spring中即成DBUtils <property name"jdbcUrl" value"jdbc:mysql://localhost:3306/eesy_mybatis?useUnicodetrue&amp;characterEncodingUTF-8&amp;serverTimezoneUTC"></property>

王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓

汇聚了来自全球的 Unity开发者、发行商、培训家及爱好者的 Unite 2017 Shanghai 即将于于 5 月 11 日&#xff0d;13日在上海国际会议中心隆重举行。Unite 大会是由 Unity 举办的全球开发者大会&#xff0c;至今已有 10 年历史&#xff0c;并已成为游戏行业、VR/AR 行业最具权威…

批评?惩罚?

批评&#xff1f;惩罚&#xff1f;最近一直在听王晓春老师的《做一个专业的班主任》&#xff0c;并且上次在校内分享教学经验和技巧的时候&#xff0c;也推荐给其他的老师看了。我一般都是在上班的路上听&#xff0c;王老师的很多观点确实值得我们深思&#xff0c;但是&#xf…

屌炸天,Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python

转载自 屌炸天&#xff0c;Oracle 发布了一个全栈虚拟机 GraalVM&#xff0c;支持 Python 前阵子&#xff0c;Oracle 发布了一个黑科技 "GraalVM"&#xff0c;号称是一个全新的通用全栈虚拟机&#xff0c;并具有高性能、跨语言交互等逆天特性&#xff0c;真有这么…

IDEA 配置Maven项目

https://blog.csdn.net/qq_41799219/article/details/90782162

就业形势如此的严峻,你为何不努力?

就业形势如此的严峻&#xff0c;你们有何理由不努力&#xff1f;今天&#xff0c;围绕就业的问题展开个话题吧。马上&#xff0c;18级1班就要出去就业了&#xff0c;以前带的17级3班三期的时候学生的状态都比较积极&#xff0c;自己知道自己的实力&#xff0c;我和就业老师、班…

涨姿势,图文带你了解 8 大排序算法

转载自 涨姿势&#xff0c;图文带你了解 8 大排序算法 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 常见…

React中分页错误

因为save是异步方法 直接从model中取最新的数据

OpenCV3.4.5带GPU编译error: #error This file requires compiler and library support for the ISO C++ 2011

error: #error This file requires compiler and library support for the ISO C 2011 standard. This support is currently experimental, and must be enabled with the -stdc11 or -stdgnu11 compiler op caffe c11编译问题 问题&#xff1a;error: #error This file req…

班级第一次问卷调查

135编辑器调差问卷终于&#xff0c;在班内做了一次问卷调查了&#xff0c;这是自同学们入学以来做的第一次调查&#xff0c;主要是从学生的对所学课程、班主任以及教员老师的角度出发的&#xff0c;所有的调查均采取匿名方式&#xff0c;以保证调查的民主性&#xff1a;调查的问…

OAuth 2.0: Bearer Token Usage

Bearer Token (RFC 6750) 用于OAuth 2.0授权访问资源&#xff0c;任何Bearer持有者都可以无差别地用它来访问相关的资源&#xff0c;而无需证明持有加密key。一个Bearer代表授权范围、有效期&#xff0c;以及其他授权事项&#xff1b;一个Bearer在存储和传输过程中应当防止泄露…

Spring Boot 核心配置文件详解

转载自 Spring Boot 核心配置文件详解 用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .properties) 为什么会有这两种配置文件呢&#xff1f;大家都清楚它们的区别和具体使用场景吗&#xff1…

深入类的方法

一、构造方法&#xff1a; 1.什么是构造方法&#xff1f; &#xff08;1&#xff09;方法名与类名相同 &#xff08;2&#xff09;没有返回类型 &#xff08;3&#xff09;主要完成对象的初始化工作 2.构造方法是没有返回类型的。 3.默认情况下&#xff0c;系统会自动给每个类分…

使用Jersey跨服务器上传图片 报405 Method Not Allowed错误

springMVC跨服务器上传 报错&#xff1a; HTTP Status 500 – Internal Server ErrorType 异常报告 消息 Request processing failed; nested exception is com.sun.jersey.api.client.UniformInterfaceException: PUT http://localhost:9090/uploads/2fdf8b2244324d1d9459349…

Net分布式系统之:微服务架构

一、背景&问题 之前框架是一个基于SOA思想设计的分布式框架。各应用通过服务方式提供使用&#xff0c;服务之间通信是RPC方式调用&#xff0c;具体实现基于.NET的WCF通信平台。框架存在如下2个问题&#xff1a; 1、高并发处理能力不足。一当高并发请求&#xff0c;可能出现…

初识继承和多态

一、继承&#xff1a; 1.C#中&#xff0c;一个类是可以继承另一个类的&#xff0c;被继承的类称为父类&#xff0c;继承其他类称为子类或者派生类。 2.继承要符合is a的关系&#xff0c;比如apple is a friut,bus is a car 3.创建子类的对象时&#xff0c;会首先调用父类的构造…

跟我学 Java 8 新特性之 Stream 流基础体验

转载自 跟我学 Java 8 新特性之 Stream 流基础体验 Java8新增的功能中,要数lambda表达式和流API最为重要了.这篇文章主要介绍流API的基础,也是流API系列的第一篇文章,话不多说,直奔主题. 什么是流API? 它能做一些什么? 我们应该知道(绝对知道~)API是一个程序向使用者提供…

SpringMVC跨服务器上传文件中出现405错误

解决引用地址SpringMVC跨服务器上传文件中出现405错误