Mybatis(三)——【多表操作、注解开发】(1)

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

SELECT * FROM USER u,sys_user_role ur,sys_role r WHERE u.id=ur.userId AND ur.roleId=r.id

配置sqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8" ?>

测试代码

@Test

public void test1() throws IOException {

InputStream resourceAsStream = Resources.getResourceAsStream(“sqlMapConfig.xml”);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

SqlSession sqlSession = sqlSessionFactory.openSession();

OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);

List orderList = mapper.findAll();

for (Order order : orderList) {

System.out.println(order);

}

sqlSession.close();

}

一对多查询

一对多查询模型

用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户一对多查询的需求:查询一个用户,与此同时查询出该用户具有的订单

对应的sql语句: select *,o.id oid from user u left join orders o on u.id=o.uid;查询的结果如下:

SELECT *,o.id oid FROM USER u, orders o WHERE u.id=o.uid

修改User实体

创建UserMapper接口

配置UserMapper.xml

测试结果

多对多查询

======

多对多查询的模型

用户表和角色表的关系为,一个用户有多个角色,一个角色被多个用户使用多对多查询的需求:查询用户同时查询出该用户的所有角色

多对多查询的语句

对应的sql语句: select u.*,r.*,r.id rid from user u left join user_role ur on u.id=ur.user_idinner join role r on ur.role_id=r.id;

查询的结果如下:

创建Role实体,修改User实体

添加UserMapper接口方法

配置UserMapper.xml(上面)

测试代码

总结:

MyBatis多表配置方式:

一对一配置:使用做配置

一对多配置:使用+做配置

多对多配置:使用+做配置

Mybatis的注解开发

============

Mybatis的常用注解

这几年来注解开发越来越流行,Mybatis也可以使用注解开发方式,这样我们就可以减少编写Mapper映射文件了。我们先围绕一些基本的CRUD来学习,再学习复杂映射多表操作。

@Insert:实现新增

@Update:实现更新@Delete:实现删除@Select:实现查询

@Result:实现结果集封装

@Results:可以与@Result一起使用,封装多个结果集@One:实现一对一结果集封装

@Many:实现一对多结果集封装

Mybatis的增删查改


private UserMapper mapper;

@Before

public void before() throws IOException {

InputStream resourceAsStream = Resources.getResourceAsStream(“sqlMapConfig.xml”);

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);

SqlSession sqlSession = sqlSessionFactory.openSession(true);

mapper = sqlSession.getMapper(UserMapper.class);

}

@Test

public void testSave(){

User user = new User();

user.setUsername(“tom”);

user.setPassword(“abc”);

mapper.save(user);

}

@Test

public void testUpdate(){

User user = new User();

user.setId(18);

user.setUsername(“lucy”);

user.setPassword(“123”);

mapper.update(user);

}

@Test

public void testDelete(){

mapper.delete(18);

}

@Test

public void testFindById(){

User user = mapper.findById(2);

System.out.println(user);

}

@Test

public void testFindAll(){

List all = mapper.findAll();

for (User user : all) {

System.out.println(user);

}

}

修改MyBatis的核心配置文件,我们使用了注解替代的映射文件,所以我们只需要加载使用了注解的Mapper接口即可

或者指定扫描包含映射关系的接口所在的包也可以

UserMapper:

public interface UserMapper {

@Insert(“insert into user values(#{id},#{username},#{password},#{birthday})”)

public void save(User user);

@Update(“update user set username=#{username},password=#{password} where id=#{id}”)

public void update(User user);

@Delete(“delete from user where id=#{id}”)

public void delete(int id);

@Select(“select * from user where id=#{id}”)

public User findById(int id);

@Select(“select * from user”)

public List findAll();

@Select(“select * from user”)

@Results({

@Result(id=true ,column = “id”,property = “id”),

@Result(column = “username”,property = “username”),

@Result(column = “password”,property = “password”),

@Result(

property = “orderList”,

column = “id”,

javaType = List.class,

many = @Many(select = “com.longdi.mapper.OrderMapper.findByUid”)

)

})

public List findUserAndOrderAll();

@Select(“SELECT * FROM USER”)

@Results({

@Result(id = true,column = “id”,property = “id”),

@Result(column = “username”,property = “username”),

@Result(column = “password”,property = “password”),

@Result(

property = “roleList”,

column = “id”,

javaType = List.class,

many = @Many(select = “com.longdi.mapper.RoleMapper.findByUid”)

)

})

public List findUserAndRoleAll();

}

MyBatis的注解实现复杂映射开发


实现复杂关系映射之前我们可以在映射文件中通过配置来实现,使用注解开发后,我们可以使用@Results注解,@Result注解,@One注解,@Many注解组合完成复杂关系的配置

写在最后

作为一名即将求职的程序员,面对一个可能跟近些年非常不同的 2019 年,你的就业机会和风口会出现在哪里?在这种新环境下,工作应该选择大厂还是小公司?已有几年工作经验的老兵,又应该如何保持和提升自身竞争力,转被动为主动?

就目前大环境来看,跳槽成功的难度比往年高很多。一个明显的感受:今年的面试,无论一面还是二面,都很考验Java程序员的技术功底。

最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!

由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!

Java经典面试问题(含答案解析)

阿里巴巴技术笔试心得

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
Java程序员的技术功底。**

最近我整理了一份复习用的面试题及面试高频的考点题及技术点梳理成一份“Java经典面试问题(含答案解析).pdf和一份网上搜集的“Java程序员面试笔试真题库.pdf”(实际上比预期多花了不少精力),包含分布式架构、高可扩展、高性能、高并发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多个知识点高级进阶干货!

由于篇幅有限,为了方便大家观看,这里以图片的形式给大家展示部分的目录和答案截图!
[外链图片转存中…(img-HJBsC379-1714706885552)]

Java经典面试问题(含答案解析)

[外链图片转存中…(img-81ID20H2-1714706885552)]

阿里巴巴技术笔试心得

[外链图片转存中…(img-MneOAgXO-1714706885553)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值