MybaitisCascadeQuery | Mybatis 级联查询,resultType , resultMap。

 by   AresKingCarry Java Version: Current License: No License

kandi X-RAY | MybaitisCascadeQuery Summary

kandi X-RAY | MybaitisCascadeQuery Summary

MybaitisCascadeQuery is a Java library. MybaitisCascadeQuery has no bugs, it has no vulnerabilities and it has low support. However MybaitisCascadeQuery build file is not available. You can download it from GitHub.

Mybatis 级联查询,resultType, resultMap(一对多,一对一)。 mybatis第二天 高级映射 查询缓存 和spring整合. mybatis框架执行过程: 1、配置mybatis的配置文件,SqlMapConfig.xml(名称不固定) 2、通过配置文件,加载mybatis运行环境,创建SqlSessionFactory会话工厂 SqlSessionFactory在实际使用时按单例方式。 3、通过SqlSessionFactory创建SqlSession SqlSession是一个面向用户接口(提供操作数据库方法),实现对象是线程不安全的,建议sqlSession应用场合在方法体内。 4、调用sqlSession的方法去操作数据。 如果需要提交事务,需要执行SqlSession的commit()方法。 5、释放资源,关闭SqlSession. mybatis开发dao的方法: 1、原始dao 的方法 需要程序员编写dao接口和实现类 需要在dao实现类中注入一个SqlSessionFactory工厂。. 2、mapper代理开发方法(建议使用) 只需要程序员编写mapper接口(就是dao接口) 程序员在编写mapper.xml(映射文件)和mapper.java需要遵循一个开发规范: 1、mapper.xml中namespace就是mapper.java的类全路径。 2、mapper.xml中statement的id和mapper.java中方法名一致。 3、mapper.xml中statement的parameterType指定输入参数的类型和mapper.java的方法输入 参数类型一致。 4、mapper.xml中statement的resultType指定输出结果的类型和mapper.java的方法返回值类型一致。. 输入映射: parameterType:指定输入参数类型可以简单类型、pojo、hashmap。。 对于综合查询,建议parameterType使用包装的pojo,有利于系统 扩展。. 输出映射: resultType: 查询到的列名和resultType指定的pojo的属性名一致,才能映射成功。 reusltMap: 可以通过resultMap 完成一些高级映射。 如果查询到的列名和映射的pojo的属性名不一致时,通过resultMap设置列名和属性名之间的对应关系(映射关系)。可以完成映射。 高级映射: 将关联查询的列映射到一个pojo属性中。(一对一) 将关联查询的列映射到一个List 中。(一对多). 动态sql:(重点) if判断(掌握) where foreach sql片段(掌握). 课程安排: 对订单商品数据模型进行分析。 高级映射:(了解) 实现一对一查询、一对多、多对多查询。 延迟加载 查询缓存 一级缓存 二级缓存(了解mybatis二级缓存使用场景) mybatis和spirng整合(掌握) 逆向工程(会用). 1.1 数据模型分析思路 1、每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程。 2、每张表重要的字段设置 非空字段、外键字段 3、数据库级别表与表之间的关系 外键关系 4、表与表之间的业务关系 在分析表与表之间的业务关系时一定要建立 在某个业务意义基础上去分析。. 表与表之间的业务关系: 在分析表与表之间的业务关系时需要建立 在某个业务意义基础上去分析。 先分析数据级别之间有关系的表之间的业务关系:. 再分析数据库级别没有关系的表之间是否有业务关系: orders和items: orders和items之间可以通过orderdetail表建立 关系。. 确定查询的主表:订单表 确定查询的关联表:用户表 关联查询使用内链接?还是外链接? 由于orders表中有一个外键(user_id),通过外键关联查询用户表只能查询出一条记录,可以使用内链接。. SELECT orders.*, USER.username, USER.sex, USER.address FROM orders, USER WHERE orders.user_id = user.id. 3.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可。. SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FROM orders, USER, orderdetail WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id. 3.3 分析 使用resultType将上边的 查询结果映射到pojo中,订单信息的就是重复。. 4.2 sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders、orderdetail、items. SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id, items.name items_name, items.detail items_detail, items.price items_price FROM orders, USER, orderdetail, items WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id. 将用户信息映射到user中。 在user类中添加订单列表属性List orderslist,将用户创建的订单映射到orderslist 在Orders中添加订单明细列表属性List orderdetials,将订单的明细映射到orderdetials 在OrderDetail中添加Items属性,将订单明细所对应的商品映射到Items. 一对多是多对多的特例,如下需求: 查询用户购买的商品信息,用户和商品的关系是多对多关系。 需求1: 查询字段:用户账号、用户名称、用户性别、商品名称、商品价格(最常见) 企业开发中常见明细列表,用户购买商品明细列表, 使用resultType将上边查询列映射到pojo输出。. resultType: 作用: 将查询结果按照sql列名pojo属性名一致性映射到pojo中。 场合: 常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中是pojo)即可。. association: 作用: 将关联查询信息映射到一个pojo对象中。 场合: 为了方便查询关联信息可以使用association将关联订单信息映射为用户对象的pojo属性中,比如:查询订单及关联用户信息。 使用resultType无法将查询结果映射到pojo对象的pojo属性中,根据对结果集查询遍历的需要选择使用resultType还是resultMap。. collection: 作用: 将关联查询信息映射到一个list集合中。 场合: 为了方便查询遍历关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。 如果使用resultType无法将查询结果映射到list集合中。. 6 延迟加载 6.1 什么是延迟加载. 需要定义两个mapper的方法对应的statement。 1、只查询订单信息 SELECT * FROM orders 在查询订单的statement中使用association去延迟加载(执行)下边的satatement(关联查询用户信息). 6.2.5 测试 6.2.5.1 测试思路: 1、执行上边mapper方法(findOrdersUserLazyLoading),内部去调用cn.itcast.mybatis.mapper.OrdersMapperCustom中的findOrdersUserLazyLoading只查询orders信息(单表)。. 在mybatis核心配置文件中配置: lazyLoadingEnabled、aggressiveLazyLoading 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置懒加载。如果设为‘false’,则所有相关联的都会被初始化加载。 true | false false aggressiveLazyLoading 当设置为‘true’的时候,懒加载的对象可能被任何懒属性全部加载。否则,每个属性都按需加载。 true | false true. 实现方法如下: 定义两个mapper方法: 1、查询订单列表 2、根据用户id查询用户信息 实现思路: 先去查询第一个mapper方法,获取订单信息列表 在程序中(service),按需去调用第二个mapper方法去查询用户信息。. 7.1 什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。 mybaits提供一级缓存,和二级缓存。. 7.2 一级缓存 7.2.1 一级缓存工作原理. @Test public void testCache1() throws Exception{ SqlSession sqlSession = sqlSessionFactory.openSession();//创建代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class);. 7.3 二级缓存 7.3.1 原理. 二级缓存与一级缓存区别,二级缓存的范围更大,多个sqlSession可以共享一个UserMapper的二级缓存区域。 UserMapper有一个二级缓存区域(按namespace分) ,其它mapper也有自己的二级缓存区域(按namespace分)。 每一个namespace的mapper都有一个二缓存区域,两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同 的二级缓存区域中。. cacheEnabled 对在此配置文件下的所有cache 进行全局性开/关设置。 true false true. // 二级缓存测试 @Test public void testCache2() throws Exception { SqlSession sqlSession1 = sqlSessionFactory.openSession(); SqlSession sqlSession2 = sqlSessionFactory.openSession(); SqlSession sqlSession3 = sqlSessionFactory.openSession(); // 创建代理对象 UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class); // 第一次发起请求,查询id为1的用户 User user1 = userMapper1.findUserById(1); System.out.println(user1);. 在statement中设置useCache=false可以禁用当前select语句的二级缓存,即每次查询都会发出sql去查询,默认情况是true,即该sql使用二级缓存。 总结:针对每次查询都需要最新的数据sql,要设置成useCache=false,禁用二级缓存。 7.3.6 刷新缓存(就是清空缓存) 在mapper的同一个namespace中,如果有其它insert、update、delete操作数据后需要刷新缓存,如果不执行刷新缓存会出现脏读。 设置statement配置中的flushCache="true" 属性,默认情况下为true即刷新缓存,如果改成false则不会刷新。使用缓存时如果手动修改数据库表中的查询数据会出现脏读。 如下: 总结:一般下执行完commit操作都需要刷新缓存,flushCache=true表示刷新缓存,这样可以避免数据库脏读。 7.4 mybatis整合ehcache ehcache是一个分布式缓存框架。 7.4.1 分布缓存 我们系统为了提高系统并发,性能、一般对系统进行分布式部署(集群部署方式) 不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统 开发。所以要使用分布式缓存对缓存数据进行集中管理。 mybatis无法实现分布式缓存,需要和其它分布式缓存框架进行整合。 7.4.2 整合方法(掌握) mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,实现cache接口开发即可。 mybatis和ehcache整合,mybatis和ehcache整合包中提供了一个cache接口的实现类。 mybatis默认实现cache类是: 7.4.3 加入ehcache包 7.4.4 整合ehcache 配置mapper中cache中的type为ehcache对cache接口的实现类型。 7.4.5 加入ehcache的配置文件 在classpath下配置ehcache.xml 7.5 二级应用场景 对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用mybatis二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等。 实现方法如下:通过设置刷新间隔时间,由mybatis每隔一段时间自动清空缓存,根据数据变化频率设置缓存刷新间隔flushInterval,比如设置为30分钟、60分钟、24小时等,根据需求而定。 7.6 二级缓存局限性 mybatis二级缓存对细粒度的数据级别的缓存实现不好,比如如下需求:对商品信息进行缓存,由于商品信息查询访问量大,但是要求用户每次都能查询最新的商品信息,此时如果使用mybatis的二级缓存就无法实现当一个商品变化时只刷新该商品的缓存信息而不刷新其它商品的信息,因为mybaits的二级缓存区域以mapper为单位划分,当一个商品信息变化会将所有商品信息的缓存数据全部清空。解决此类问题需要在业务层根据需求对数据有针对性缓存。 8 spring和mybatis整合 8.1 整合思路 需要spring通过单例方式管理SqlSessionFactory。 spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession。(spring和mybatis整合自动完成) 持久层的mapper都需要由spring进行管理。 8.2 整合环境 创建一个新的java工程(接近实际开发的工程结构) jar包: mybatis3.2.7的jar包 spring3.2.0的jar包 mybatis和spring的整合包:早期ibatis和spring整合是由spring官方提供,mybatis和spring整合由mybatis提供。 全部jar包 8.3 sqlSessionFactory 在applicationContext.xml配置sqlSessionFactory和数据源 sqlSessionFactory在mybatis和spring的整合包下。 8.4 原始dao开发(和spring整合后) 8.4.1 User.xml 在SqlMapconfig.xml中加载User.xml 8.4.2 dao(实现类继承SqlSessionDaoSupport) dao接口实现类需要注入SqlSessoinFactory,通过spring进行注入。 这里spring声明配置方式,配置dao的bean: 让UserDaoImpl实现类继承SqlSessionDaoSupport 8.4.3 配置dao 在applicationContext.xml中配置dao。 8.4.4 测试程序 8.5 mapper代理开发 8.5.1 mapper.xml和mapper.java 8.5.2 通过MapperFactoryBean创建代理对象 此方法问题: 需要针对每个mapper进行配置,麻烦。 8.5.3 通过MapperScannerConfigurer进行mapper扫描(建议使用) 8.5.4 测试代码 9 逆向工程 9.1 什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml、po..) 企业实际开发中,常用的逆向工程方式: 由于数据库的表生成java代码。 9.2 下载逆向工程 9.3 使用方法(会用) 9.3.1 运行逆向工程 建议使用java程序方式,不依赖开发工具。 9.3.2 生成代码配置文件 9.3.3 执行生成程序 生成后的代码: 9.3.4 使用生成的代码 需要将生成工程中所生成的代码拷贝到自己的工程中。 测试ItemsMapper中的方法 //自定义条件查询 @Test public void testSelectByExample() { ItemsExample itemsExample = new ItemsExample(); //通过criteria构造查询条件 ItemsExample.Criteria criteria = itemsExample.createCriteria(); criteria.andNameEqualTo("笔记本3"); //可能返回多条记录 List list = itemsMapper.selectByExample(itemsExample); System.out.println(list); } //根据主键查询 @Test public void testSelectByPrimaryKey() { Items items = itemsMapper.selectByPrimaryKey(1); System.out.println(items); } //插入 @Test public void testInsert() { //构造 items对象 Items items = new Items(); items.setName("手机"); items.setPrice(999f); itemsMapper.insert(items); } //更新数据 @Test public void testUpdateByPrimaryKey() { //对所有字段进行更新,需要先查询出来再更新 Items items = itemsMapper.selectByPrimaryKey(1); items.setName("水杯"); itemsMapper.updateByPrimaryKey(items); //如果传入字段不空为才更新,在批量更新中使用此方法,不需要先查询再更新 //itemsMapper.updateByPrimaryKeySelective(record); }.
Support
    Quality
      Security
        License
          Reuse

            kandi-support Support

              MybaitisCascadeQuery has a low active ecosystem.
              It has 1 star(s) with 5 fork(s). There are 1 watchers for this library.
              OutlinedDot
              It had no major release in the last 6 months.
              MybaitisCascadeQuery has no issues reported. There are no pull requests.
              It has a neutral sentiment in the developer community.
              The latest version of MybaitisCascadeQuery is current.

            kandi-Quality Quality

              MybaitisCascadeQuery has no bugs reported.

            kandi-Security Security

              MybaitisCascadeQuery has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.

            kandi-License License

              MybaitisCascadeQuery does not have a standard license declared.
              Check the repository for any license declaration and review the terms closely.
              OutlinedDot
              Without a license, all rights are reserved, and you cannot use the library in your applications.

            kandi-Reuse Reuse

              MybaitisCascadeQuery releases are not available. You will need to build from source code and install.
              MybaitisCascadeQuery has no build file. You will be need to create the build yourself to build the component from source.
              Installation instructions are not available. Examples and code snippets are available.

            Top functions reviewed by kandi - BETA

            kandi has reviewed MybaitisCascadeQuery and discovered the below as its top functions. This is intended to give you an instant insight into MybaitisCascadeQuery implemented functionality, and help decide if they suit your requirements.
            • Returns a new criteria instance
            • OR a criteria
            • Find user by id
            • Converts an object to a JSON string
            • Write bean to response
            • Get the order map
            • Sets the name
            • Sets the note to be used
            • Set the number
            • Sets the email address
            • Set the pic picture
            • Set the sex of the date
            • Sets the username
            • Query the orders and order detail map
            • Query for orders and order detail
            • Send bean to url json
            • Set the id
            • Get user by id
            • Creates a new criteria object
            • Clear all criteria
            • Converts a JSON string to a POJO object
            • Convert json string to list
            Get all kandi verified functions for this library.

            MybaitisCascadeQuery Key Features

            No Key Features are available at this moment for MybaitisCascadeQuery.

            MybaitisCascadeQuery Examples and Code Snippets

            No Code Snippets are available at this moment for MybaitisCascadeQuery.

            Community Discussions

            No Community Discussions are available at this moment for MybaitisCascadeQuery.Refer to stack overflow page for discussions.

            Community Discussions, Code Snippets contain sources that include Stack Exchange Network

            Vulnerabilities

            No vulnerabilities reported

            Install MybaitisCascadeQuery

            You can download it from GitHub.
            You can use MybaitisCascadeQuery like any standard Java library. Please include the the jar files in your classpath. You can also use any IDE and you can run and debug the MybaitisCascadeQuery component as you would do with any other Java program. Best practice is to use a build tool that supports dependency management such as Maven or Gradle. For Maven installation, please refer maven.apache.org. For Gradle installation, please refer gradle.org .

            Support

            For any new features, suggestions and bugs create an issue on GitHub. If you have any questions check and ask questions on community page Stack Overflow .
            Find more information at:

            Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items

            Find more libraries
            CLONE
          • HTTPS

            https://github.com/AresKingCarry/MybaitisCascadeQuery.git

          • CLI

            gh repo clone AresKingCarry/MybaitisCascadeQuery

          • sshUrl

            git@github.com:AresKingCarry/MybaitisCascadeQuery.git

          • Stay Updated

            Subscribe to our newsletter for trending solutions and developer bootcamps

            Agree to Sign up and Terms & Conditions

            Share this Page

            share link

            Consider Popular Java Libraries

            CS-Notes

            by CyC2018

            JavaGuide

            by Snailclimb

            LeetCodeAnimation

            by MisterBooo

            spring-boot

            by spring-projects

            Try Top Libraries by AresKingCarry

            ShardingJDBCDemo

            by AresKingCarryJava

            UMengPush

            by AresKingCarryJava

            SpringCloudDemo

            by AresKingCarryJava

            aop

            by AresKingCarryJava

            generatorSqlmapCustom

            by AresKingCarryJava