java进阶学习第一天_Java的学习(36)mybatis进阶

关联查询

案例:用户和定单

1a85995b22af198b9ef724088e1a389c.png
  user和orders:
User 与orders:一个用户可以创建多个订单,一对多
Orders 与 user:多个订单只由一个用户创建,多对一
  orders和orderdetail:
Orders 与 orderdetail:一个订单可以包括 多个订单明细,因为一个订单可以购买多个商品,每个商品的购买信息在orderdetail记录,一对多关系
orderdetail 与orders:多个订单明细包括在一个订单中, 多对一
  orderdetail和items:
Orderdetail 与 items:多个订单明细只对应一个商品信息,多对一
Items 与 orderdetail:一个商品可以包括在多个订单明细 ,一对多

一对一

根据商品ID查找定单信息,包括用户名和地址

SELECT o.*,u.username,u.address FROM orders o,user u WHERE o.user_id = u.id AND o.id = 3

resultType实现

写个定单的扩展类

21022fa568f59baf2e0985926a4c01d5.png

声明定单接口

dc75fd1aa0e34d6926cac9aed77e43c8.png

声明定单配置文件

e6d01d5c3b0ce3ed58a98871d7b24a47.png

加载映射文件

89ddef045c1e0177fdce8f9c801564b0.png

测试

5ed4886e24490d25f48e83d3ab916515.png

resultMap实现

OrdersMapper.java添加一个方法

404a62dab602b251f8a7662a65c6d4a1.png

OrdersMapper.xml

6e946b81b0b2a4a478fcf591ca5b3a95.png

测试

8b402e5571e77907e762e94971aff760.png

900c0cfda8d9a64109982de73fa12568.png

一对多

根据定单ID查找定单信息、用户信息和定单明细信息

在Orders中添加定单明细

46881cd23a51ecc3cf7f6fc3010cc19d.png

Mapper接口

3e6ecd71eea5a7541fadfd85eb1a0b7c.png

OrderMapper.xml

dd8d472c6834fc7755423435e075e1fc.png

测试

527febee9c359ef3128d36d08e337982.png

245889d7188255a4c9559486cd5c984e.png

多对多

查询用户信息及用户购买的商品信息,要求将关联信息映射到主pojo的pojo属性中

ccafeabacff6b21ac01286277f3fa1cf.png
SELECT 
        u.id,
	u.username,
	u.address,
	o.id order_id,
        o.number,
	o.createtime,
        o.note,
	od.id detail_id,
        od.items_id,
        od.items_num,
        it.name,
        it.price,
        it.detail
FROM 
	user u,
	orders o,
	orderdetail od,
        items it
WHERE 
	o.user_id = u.id 
  AND   o.id = od.orders_id
  AND   od.items_id = it.id;

d21e3434a9404cd93a720514c49b7036.png

UserMapper.java

ff7e2ba0ccd2da1cfbd8a6f86deb92e1.png

User/Orders/Orderdetail.java

e2eae544e9192efc8f124924dcfd4c66.png

1e5c157f2081afbf9093f8097ee2d21c.png

fed63a7ce5b24b0f34cc7ae1a21c052a.png

UserMapper.xml

7ca29215ba9f5a147844b47686d63f9a.png

测试

ac5a33a77e2bd6003dd86fee73bcd749.png

88722a1e424a7bb1c14b898d0e63dcd3.png

延时加载

Mapper

74a85b91e67977a298c3a574722f47cd.png

UserMappler.xml

04efb0559e9c192c6025aedafd139023.png

OrdersMapper.xml

测试

33373d9b7b65ed22b1bbb7c2df1f251c.png

配置懒加载(用到user时才执行语句)

0f4592d570299e3266043cd50da14753.png

查询缓存

Mybatis的缓存,一级缓存是默认使用的。二级缓存需要手动开启。

一级缓存(当保存删除更新时才消除一级缓存)

8e5220a85dbd1e46994d5b7869bdc5d1.png

12434c0c8ec6acea70c9d490a4b7e40e.png

二级缓存(关闭session才写入二级缓存,session提交会清空二级缓存)

开启二级缓存总开关

f64d7925ca29cdca079449aa95b96a18.png

UserMapper中配置二级缓存

8df0354abac88bec18469465df084c86.png

User系列化

2d44bf4a4a95e37542405c7b1a5b3654.png

测试

e946e7ac5b20b3486d3bc3e57016daa3.png

禁用指定方法二级缓存

fbbd00263f45c74f2c6dee798c6f4862.png

刷新缓存

221b5bee81be3be42fcc9bf12f05c6d9.png

ehcache

Ehcache是一个分布式的缓存框架。

添加jar包

cfffcba2fc1102785ed4897cb38a7f3c.png

设置映射文件中cache标签

5b1c6699ed209c6c79192167de5b73cd.png

在src下添加ehcache的配置文件

0b50331b152abd77ad5f74f02b3287d6.png

mybaties整合spring

moto-faith/learnJava​github.com
20d8465a97452d66f15fe26aa049adaf.png

逆向工程

通过数据库中的单表,自动生成java代码。

导入mysql的驱动包和mybatis的逆向工程包

mybatis-generator-core-1.3.2 mysql-connector-java-5.1.7-bin

创建generator配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
  PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
  "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

<generatorConfiguration>
	
  <context id="mysqlTable" targetRuntime="MyBatis3">
  	<!-- 1.数据连接参数 -->
    <jdbcConnection driverClass="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/mybatis"
        userId="root"
        password="123456">
    </jdbcConnection>
	
	<!-- 2.默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 
			和 NUMERIC 类型解析为java.math.BigDecimal -->
    <javaTypeResolver >
      <property name="forceBigDecimals" value="false" />
    </javaTypeResolver>

	<!-- 3.生成模型的位置 -->
    <javaModelGenerator targetPackage="com.gyf.backoffice.domain" targetProject=".src">
      <!-- enableSubPackages:是否让schema作为包的后缀 -->
      <property name="enableSubPackages" value="true" />
      <property name="trimStrings" value="true" />
    </javaModelGenerator>

	<!-- 4.targetProject:mapper映射文件生成的位置 -->
    <sqlMapGenerator targetPackage="com.gyf.backoffice.mapper"  targetProject=".src">
      <!-- enableSubPackages:是否让schema作为包的后缀 -->
      <property name="enableSubPackages" value="true" />
    </sqlMapGenerator>

	<!-- 5. targetPackage:mapper接口生成的位置 -->
    <javaClientGenerator type="XMLMAPPER" targetPackage="com.gyf.backoffice.mapper"  
   		 targetProject=".src">
      <property name="enableSubPackages" value="true" />
    </javaClientGenerator>

	<!-- 6.要生成的表 -->
    <table tableName="items"/>
	<table tableName="orderdetail"/>
	<table tableName="orders"/>
	<table tableName="user"/>
  </context>
</generatorConfiguration>

使用java类来执行逆向工程(生成model和mapper)

public class Generator {
	public static void main(String[] args)  throws Exception{
		List<String> warnings = new ArrayList<String>();
		boolean overwrite = true;
		File configFile = new File("config/generator.xml");
		ConfigurationParser cp = new ConfigurationParser(warnings);
		Configuration config = cp.parseConfiguration(configFile);
		DefaultShellCallback callback = new DefaultShellCallback(overwrite);
		MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
				callback, warnings);
		myBatisGenerator.generate(null);
	}
}

用生成好的mapper就可以直接使用方法了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值