李妹科技 - limei
type: channel
link: https://www.ggxiaolin.eu.org/index.php/author/1/
description: limei
items: Spring整合mybaties事务案例(纯注解)
items: Spring事务
items: AOP的入门和案例（注解）
items: AOP的快速入门(XML)
items: spring(IOC)整合mybatis案例（注解方式）
items: Spring常用注解介绍(IOC)
items: spring整合mybatis案例(IOC)
items: Spring入门案例(IOC)
items: Spring的介绍
items: MyBatis 注解开发的多表操作02

Spring整合mybaties事务案例(纯注解)
type: item
date: 2023-10-13T00:07:00+08:00
description: spring整合mybatis事务案例首先 需要下载需要的sql：sql下载案例目录结构 1.实体类和jdbc.properties文件 2.dao层编写 3.service层接口和实现 4.config目录下编写 5.注解测试UserServiceTest运行 pom.xml 1.实体类和jdbc.properties文件package com.limei.domain; import java.io.Serializable; public class Account implements Serializable { private Integer id; private String name; private Double money; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; } } <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.limei.aop</groupId> <artifactId>Spring_aop</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.9.4</version> </dep…

Spring事务
type: item
date: 2023-09-26T23:27:00+08:00
description: 1.事物的介绍 2.事务管理 3.事务控制案例(编程式) 4.aop改造事务(编程式) 5.声明式事务(XML格式) 6.tx-method的详解和传播行为 7.声明式事务改造(注解) 1.事物的介绍1.1 什么是事务？事务指数据库中多个操作合并在一起形成的操作序列1.2事务的作用1.当数据库操作序列中个别操作失败时，提供一种方式使数据库状态恢复到正常状态（A），保障数据库即使在异常状态下仍能保持数据一致性（C）（要么操作前状态，要么操作后状态）。2.当出现并发访问数据库时，在多个访问间进行相互隔离，防止并发访问操作结果互相干扰（I）。事务特征（ACID）原子性（Atomicity）指事务是一个不可分割的整体，其中的操作要么全执行或全不执行一致性（Consistency）事务前后数据的完整性必须保持一致隔离性（Isolation）事务的隔离性是多个用户并发访问数据库时，数据库为每一个用户开启的事务，不能被其他事务的操作数据所干扰，多个并发事务之间要相互隔离持久性（Durability）持久性是指一个事务一旦被提交，它对数据库中数据的改变就是永久性的，接下来即使数据库发生故障也不应该对其有任何影响1.3事务的隔离级脏读：允许读取未提交的信息原因：Read uncommitted-解决方案： （表级读锁）不可重复读：读取过程中单个数据发生了变化解决方案： Repeatable read （行级写锁）幻读：读取过程中数据条目发生了变化解决方案： Serializable（表级写锁）2.事物管理2.1Spring事务核心对象J2EE开发使用分层设计的思想进行，对于简单的业务层转调数据层的单一操作，事务开启在业务层或者数据层并无太大差别，当业务中包含多个数据层的调用时，需要在业务层开启事务，对数据层中多个操作进行组合并归属于同一个事务进行处理Spring为业务层提供了整套的事务解决方案PlatformTransactionManagerTransactionDefinitionTransactionStatus2.2 PlatformTransactionManager平台事务管理器实现类DataSourceTransactionManager 适用于Spring JDBC或MyBatisHibernateTransactionManager 适用于Hibernate3.0及以上版本JpaTransactionManager 适用于JPAJdoTransactionManager 适用于JDOJtaTransactionManager 适用于JTAJPA（Java Persistence API）Java EE 标准之一，为POJO提供持久化标准规范，并规范了持久化开发的统一API，符合JPA规范的开发可以在不同的JPA框架下运行JDO(Java Data Object )是Java对象持久化规范，用于存取某种数据库中的对象，并提供标准化API。与JDBC相比，JDBC仅针对关系数据库进行操作，JDO可以扩展到关系数据库、文件、XML、对象数据库（ODBMS）等，可移植性更强JTA（Java Transaction API）Java EE 标准之一，允许应用程序执行分布式事务处理。与JDBC相比，JDBC事务则被限定在一个单一的数据库连接，而一个JTA事务可以有多个参与者，比如JDBC连接、JDO 都可以参与到一个JTA事务中此接口定义了事务的基本操作获取事务 ：TransactionStatus getTransaction(TransactionDefinition definition)提交事务 ：void commit(TransactionStatus status) 回滚事务 ：void rollback(TransactionStatus status)2.3 TransactionDefinition此接口定义了事务的基本信息获取事务定义名称String getName()获取事务的读写属性boolean isReadOnly()获取事务隔离级别int getIsolationLevel()获事务超时时间int getTimeout()获取事务传播行为特征int getPropagationBehavior()2.4 TransactionStatus此接口定义了事务在执行过程中某个时间点上的状态信息及对应的状态操作3.事务控制案例(编程式)首先 需要下载需要的sql：sql下载案例目录结构银行转账业务说明:银行转账操作中，涉及从A账户到B账户的资金转移操作。数据层仅提供单条数据的基础操作，未设计多账户间的业务操作。 实体类和jdbc的编写 dao层和AccountDao.xml编写 service层编写 app的编写 …

AOP的入门和案例（注解）
type: item
date: 2023-09-18T01:05:00+08:00
description: 1.AOP的配置 2.AOP的注解驱动 3.综合案例 AOP的配置注解开发AOP制作步骤在XML格式基础上导入坐标（伴随spring-context坐标导入已经依赖导入完成）开启AOP注解支持配置切面@Aspect定义专用的切入点方法，并配置切入点@Pointcut为通知方法配置通知类型及对应切入点@Before注解开发AOP注意事项1.切入点最终体现为一个方法，无参无返回值，无实际方法体内容，但不能是抽象方法2.引用切入点时必须使用方法调用名称，方法后面的（）不能省略3.切面类中定义的切入点只能在当前类中使用，如果想引用其他类中定义的切入点使用“类名.方法名()”引用4.可以在通知类型注解后添加参数，实现XML配置中的属性，例如after-returning后的returning属性AOP的注解驱动AOP注解驱动名称：@EnableAspectJAutoProxy类型：注解位置：Spring注解配置类定义上方作用：设置当前类开启AOP注解驱动的支持，加载AOP注解格式：@Configuration @ComponentScan("com.limei") @EnableAspectJAutoProxy public class SpringConfig { }综合案例首先 需要下载需要的sql：sql下载案例目录结构 实体类和jdbc的编写 config编写 dao层编写 service层编写 aop的编写 测试类编写 pom.xml 实体类和jdbc的编写package com.limei.domain; import java.io.Serializable; public class Account implements Serializable { private Integer id; private String name; private Double money; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; } } jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/lianxi jdbc.username=root jdbc.password=123456config编写package com.limei.config; import com.alibaba.druid.pool.DruidDataSource; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import javax.sql.DataSource; public class JDBCConfig { @Value("${jdbc.driver}") private String driver; @Value("${jdbc.url}") private String url; @Value("${jdbc.username}") private String userName; @Value("${jdbc.password}") private String password; @Bean("dataSource") public DataSource getDataSource(){ DruidDataSource ds = new DruidDataSource(); ds.setDriverClassName(driver); ds.setUrl(url); ds.setUsername(userName); ds.setPassword(password); return ds; } } package com.li…

AOP的快速入门(XML)
type: item
date: 2023-09-10T22:59:00+08:00
description: 1.AOP的简介 2.AOP相关概念 3.AOP的通知类型5种 4.AOP入门案例 AOP的简介AOP(Aspect Oriented Programing)面向切面编程，一种编程范式，隶属于软工范畴，指导开发者如何组织程序结构AOP弥补了OOP的不足，基于OOP基础之上进行横向开发uOOP规定程序开发以类为主体模型，一切围绕对象进行，完成某个任务先构建模型uAOP程序开发主要关注基于OOP开发中的共性功能，一切围绕共性功能进行，完成某个任务先构建可能遇到的所有共性功能（当所有功能都开发出来也就没有共性与非共性之分）AOP作用伴随着AOP时代的降临，可以从各个行业的标准化、规范化开始入手，一步一步将所有共性功能逐一开发完毕，最终以功能组合来完成个别业务模块乃至整体业务系统的开发目标：将软件开发由手工制作走向半自动化/全自动化阶段，实现“插拔式组件体系结构”搭建AOP优势提高代码的可重用性业务代码编码更简洁业务代码维护更高效业务功能扩展更便捷AOP的相关概念Joinpoint(连接点)：就是方法Pointcut(切入点)：就是挖掉共性功能的方法Advice(通知)：就是共性功能，最终以一个方法的形式呈现Aspect(切面)：就是共性功能与挖的位置的对应关系Target(目标对象)：就是挖掉功能的方法对应的类产生的对象，这种对象是无法直接完成最终工作的Weaving(织入)：就是将挖掉的功能回填的动态过程Proxy(代理)：目标对象无法直接完成工作，需要对其进行功能回填，通过创建原始对象的代理对象实现Introduction(引入/引介) ：就是对原始对象无中生有的添加成员变量或成员方法AOP开发过程开发阶段(开发者完成)正常的制作程序将非共性功能开发到对应的目标对象类中，并制作成切入点方法将共性功能独立开发出来，制作成通知在配置文件中，声明切入点在配置文件中，声明切入点与通知间的关系（含通知类型），即切面运行阶段(AOP完成)Spring容器加载配置文件，监控所有配置的切入点方法的执行当监控到切入点方法被运行，使用代理机制，动态创建目标对象的代理对象，根据通知类别，在代理对象的对应位置将通知对应的功能织入，完成完整的代码逻辑并运行AOP的通知类型5种前置通知：原始方法执行前执行，如果通知中抛出异常，阻止原始方法运行应用：数据校验格式：<aop:aspect ref="adviceId"> <aop:before method="methodName" pointcut="……"/> </aop:aspect>说明：一个aop:aspect标签中可以配置多个aop:before标签基本属性：method ：在通知类中设置当前通知类别对应的方法pointcut ：设置当前通知对应的切入点表达式，与pointcut-ref属性冲突pointcut-ref ：设置当前通知对应的切入点id，与pointcut属性冲突后置通知：原始方法执行后执行，无论原始方法中是否出现异常，都将执行通知 应用：现场清理格式：<aop:aspect ref="adviceId"> <aop:after method="methodName" pointcut="……"/> </aop:aspect>说明：一个aop:aspect标签中可以配置多个aop:after标签返回后通知：原始方法正常执行完毕并返回结果后执行，如果原始方法中抛出异常，无法执行 应用：返回- 格式：<aop:aspect ref="adviceId"> <aop:after-returning method="methodName" pointcut="……"/> </aop:aspect>说明：一个aop:aspect标签中可以配置多个aop:after-returning标签值相关数据处理抛出异常后通知：原始方法抛出异常后执行，如果原始方法没有抛出异常，无法执行 应用：对原始方法中出现的异常信息进行处理格式：<aop:aspect ref="adviceId"> <aop:after-throwing method="methodName" pointcut="……"/> </aop:aspect>说明：一个aop:aspect标签中可以配置多个aop:after-throwing标签环绕通知：在原始方法执行前后均有对应执行执行，还可以阻止原始方法的执行 应用：十分强大，可以做任何事情格式：<aop:aspect ref="adviceId"> <aop:around method="methodName" pointcut="……"/> </aop:aspect>说明：一个aop:aspect标签中可以配置多个aop:around标签环绕通知的开发方式环绕通知是在原始方法的前后添加…

spring(IOC)整合mybatis案例（注解方式）
type: item
date: 2023-08-25T11:56:00+08:00
description: spring整合mybatis案例首先需要sql：sql结构下载。 1.实体类和jdbc.properties文件 2.编写业务层接口与实现类 3.编写数据层接口 4.编写原来的xml为注解方式 5.main方法运行 6.注解测试UserServiceTest运行 案例目录结构实体类Accountpackage com.limei.domain; import java.io.Serializable; public class Account implements Serializable { private Integer id; private String name; private Double money; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; } } jdbc.propertiesjdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/lianxi jdbc.username=root jdbc.password=1234562.编写业务层接口与实现类package com.limei.service; import com.limei.domain.Account; import java.util.List; public interface AccountService { void save(Account account); void delete(Integer id); void update(Account account); List<Account> findAll(); Account findById(Integer id); } package com.limei.service.impl; import com.limei.dao.AccountDao; import com.limei.domain.Account; import com.limei.service.AccountService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service("accountService") public class AccountServiceImpl implements AccountService { @Autowired private AccountDao accountDao; public void save(Account account) { accountDao.save(account); } public void update(Account account){ accountDao.update(account); } public void delete(Integer id) { accountDao.delete(id); } public Account findById(Integer id) { return accountDao.findById(id); } public List<Account> findAll() { return accountDao.findAll(); } } 3.编写数据层接口package com.limei.dao; import com.limei.domain.Account; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotation…

Spring常用注解介绍(IOC)
type: item
date: 2023-08-23T22:26:00+08:00
description: bean的定义 bean的作用域 bean的生命周期 @Bean加载第三方资源 bean的非引用类型属性注入 bean的引用类型属性注入 注解加载properties文件 @Configuration和@ComponentScan用法 第三方bean配置与管理 bean加载控制 bean的定义名称：@Component @Controller @Service @Repository类型：类注解位置：类定义上方作用：设置该类为spring管理的bean范例：@Component public class ClassName{}说明：@Controller、@Service 、@Repository是@Component的衍生注解，功能同@Component相关属性value（默认）：定义bean的访问idbean的作用域名称：@Scope类型：类注解位置：类定义上方作用：设置该类作为bean对应的scope属性范例：@Scope public class ClassName{}相关属性value（默认）：定义bean的作用域，默认为singletonbean的生命周期名称：@PostConstruct、@PreDestroy类型：方法注解位置：方法定义上方作用：设置该类作为bean对应的生命周期方法范例：@PostConstruct public void init() { System.out.println("init..."); }@Bean加载第三方资源类型：方法注解位置：方法定义上方作用：设置该方法的返回值作为spring管理的bean范例：@Bean("dataSource") public DruidDataSource createDataSource() { return ……; }说明：因为第三方bean无法在其源码上进行修改，使用@Bean解决第三方bean的引入问题该注解用于替代XML配置中的静态工厂与实例工厂创建bean，不区分方法是否为静态或非静态@Bean所在的类必须被spring扫描加载，否则该注解无法生效相关属性value（默认）：定义bean的访问idbean的非引用类型属性注入名称：@Value类型：属性注解、方法注解位置：属性定义上方，方法定义上方作用：设置对应属性的值或对方法进行传参范例：@Value("${jdbc.username}") private String username;说明：value值仅支持非引用类型数据，赋值时对方法的所有参数全部赋值value值支持读取properties文件中的属性值，通过类属性将properties中数据传入类中value值支持SpEL@value注解如果添加在属性上方，可以省略set方法（set方法的目的是为属性赋值）相关属性value（默认）：定义对应的属性值或参数值bean的引用类型属性注入1.名称：@Autowired、@Qualifier类型：属性注解、方法注解位置：属性定义上方，方法定义上方作用：设置对应属性的对象或对方法进行引用类型传参范例：@Autowired(required = false) @Qualifier("userDao") private UserDao userDao;说明：@Autowired默认按类型装配，指定@Qualifier后可以指定自动装配的bean的id相关属性required：定义该属性是否允许为null2.名称：@Primary类型：类注解位置：类定义上方作用：设置类对应的bean按类型装配时优先装配范例：@Primary public class ClassName{}说明：@Autowired默认按类型装配，当出现相同类型的bean，使用@Primary提高按类型自动装配的优先级，多个@Primary会导致优先级设置无效3.名称：@Inject、@Named、@Resource说明：@Inject与@Named是JSR330规范中的注解，功能与@Autowired和@Qualifier完全相同，适用于不同架构场景@Resource是JSR250规范中的注解，可以简化书写格式@Resource相关属性name：设置注入的bean的idtype：设置注入的bean的类型，接收的参数为Class类型加载properties文件名称：@PropertySource类型：类注解位置：类定义上方作用：加载properties文件中的属性值范例：@PropertySource(value = "classpath:filename.properties") public class ClassName { @Value("${propertiesAttributeName}") private St…

spring整合mybatis案例(IOC)
type: item
date: 2023-08-21T23:20:00+08:00
description: spring整合mybatis案例首先需要sql：sql结构下载。 1.坐标pom.xml文件和实体类 2.编写业务层接口与实现类 3.编写持久层接口与对应的xml文件 4.建立applicationContext.xml配置文件 5.jdbc.properties资源 6.Test类 案例目录结构1.pom.xml文件<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com</groupId> <artifactId>java-01</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.47</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> </dependencies> </project>package com.limei.domain; import java.io.Serializable; public class Account implements Serializable { private Integer id; private String name; private Double money; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Double getMoney() { return money; } public void setMoney(Double money) { this.money = money; } @Override public String toString() { return "Account{" + "id=" + id + ", name='" + name + '\'' + ", money=" + money + '}'; } } 2.编写业务层接口与实现类package com.limei.service; import com.limei.domain.Account; import java.util.List; public…

Spring入门案例(IOC)
type: item
date: 2023-08-20T22:47:00+08:00
description: IoC入门案例制作步骤 1.spring坐标pom.xml文件 2.编写业务层接口与实现类 3.编写持久层接口与实现类 4.建立spring配置文件 5.data.properties资源 6.TestUser测试类通过spring获取资源（Service实例） 案例目录结构1.pom.xml文件<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com</groupId> <artifactId>java-01</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.1.9.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> </dependencies> </project>2.编写业务层与表现层（模拟）接口与实现类package com.limei.service; public interface UserService { public void save(); } package com.limei.service.impl; import com.limei.dao.UserDao; import com.limei.service.UserService; public class UserServiceImpl implements UserService { public UserServiceImpl() { } private UserDao userDao; private int num; public void setNum(int num) { this.num = num; } //1.对需要进行注入的变量加set方法 public void setUserDao(UserDao userDao) { this.userDao = userDao; } public void save() { System.out.println("user service running..."+num); userDao.save(); } } 3.编写持久层层接口与实现类 package com.limei.dao; public interface UserDao { public void save(); } package com.limei.dao.impl; import com.limei.dao.UserDao; public class UserDaoImpl implements UserDao{ private String userName; private String password; private int num; private String name; public UserDaoImpl() { } public void setNum(int num) { this.num = num; } public void setUserName(String userName) { this.userName = userName; } public void setPassword(String password) { this.password = password; } public void se…

Spring的介绍
type: item
date: 2023-08-16T22:56:00+08:00
description: bean的属性介绍 集合类型数据注入 统一属性注入格式 properties文件 import的使用 ApplicationContext介绍 第三方资源配置 IoC配置（XML格式）基本属性：<bean id="beanId" name="别名1,别名2" class="ClassName"></bean>​ id：bean的名称，通过id值获取bean​ class：bean的类型​ name：bean的名称，可以通过name值获取bean，用于多人配合时给bean起别名格式：<bean scope="singleton"></bean>取值：singleton：设定创建出的对象保存在spring容器中，是一个单例的对象prototype：设定创建出的对象保存在spring容器中，是一个非单例的对象request、session、application、 websocket ：设定创建出的对象放置在web容器对应的位置格式：<bean init-method="init" destroy-method="destroy> </bean>取值：bean对应的类中对应的具体方法名注意事项：当scope=“singleton”时，spring容器中有且仅有一个对象，init方法在创建容器时仅执行一次当scope=“prototype”时，spring容器要创建同一类型的多个对象，init方法在每个对象创建时均执行一次当scope=“singleton”时，关闭容器会导致bean实例的销毁，调用destroy方法一次当scope=“prototype”时，对象的销毁由垃圾回收机制gc()控制，destroy方法将不会被执行基本属性：<property name="propertyName" value="propertyValue" ref="beanId" />​ name：对应bean中的属性名，要求该属性必须提供可访问的set方法（严格规范为此名称是set方法对应名称）​ value：设定非引用类型属性对应的值，不能与ref同时使用​ ref：设定引用类型属性对应bean的id ，不能与value同时使用注意：一个bean可以有多个property标签集合类型数据注入名称：array，list，set，map，props类型：标签归属：property标签 或 constructor-arg标签作用：注入集合数据类型属性格式：<property> </property>(1)集合类型数据注入——list<property name="al"> <value>limei</value> <value>66666</value> </property>(2)集合类型数据注入——props<property name="properties"> <props> <prop key="name">limei</prop> <prop key="value">666666</prop> </props> </property>(3)集合类型数据注入——array （了解）<property name="arr"> <array> <value>123456</value> <value>66666</value> </array> </property>(4)集合类型数据注入——set（了解）<property name="hs"> <set> <value>limei</value> <value>66666</value> </set> </property>(5)集合类型数据注入——map（了解）<property name="hm"> <entry key="name" value="limei"/> <entry key="value" value="6666666666"/> </property>统一属性注入格式Spring提供了对EL表达式的支持，统一属性注入格式类型：属性值归属：value属性值作用：为bean注入属性值格式：<bean><property value="EL"></bean>注意：所有属性值不区分是否引用类型，统一使用value赋值所有格式统一使用 value=“”常量 #{10} #{3.14} #{2e5} #{‘itcast’}引用bean #{beanId}引用bean属性 #{beanId.propertyName}引用bean方法 beanId.methodName().method2()引用静态方法 T(java.lang.Math).PI运算符支持 #{3 lt 4 == 4 ge 3}正则表达式支持 #{user.name matches‘[a-z]{6,}’}集合支持 #{lik…

MyBatis 注解开发的多表操作02
type: item
date: 2023-08-01T23:27:00+08:00
description: 一对一查询 一对多查询 多对多查询 注解配置总结 需要的sql下载： 一对一 一对多 多对多 案例目录结构(一对一的)目录结构配置文件参考：Mybatis的基本使用注意：MyBatisConfig.xml配置文件里里替换成 <typeAliases> <!--<typeAlias type="com.limei.bean.Card" alias="card"/>--> <package name="com.itheima"/> </typeAliases>一对一查询一对一查询的需求：查询一个用户信息，与此同时查询出该用户对应的身份证信息Card实体类package com.limei.bean; public class Card { private Integer id; //主键id private String number; //身份证号 private Person p; //所属人的对象 public Card() { } public Card(Integer id, String number, Person p) { this.id = id; this.number = number; this.p = p; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Person getP() { return p; } public void setP(Person p) { this.p = p; } @Override public String toString() { return "Card{" + "id=" + id + ", number='" + number + '\'' + ", p=" + p + '}'; } } Person实体类package com.limei.bean; public class Person { private Integer id; //主键id private String name; //人的姓名 private Integer age; //人的年龄 public Person() { } public Person(Integer id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } } PersonMapper接口package com.limei.mapper; import com.limei.bean.Person; import org.apache.ibatis.annotations.Select; public interface PersonMapper { //根据id查询 @Select("SELECT * FROM person WHERE id=#{id}") public abstract Person selectById(Integer id); } CardMapper接口package com.limei.mapper; import com.limei.bean.Card; import com.limei.bean.Person; import org.apache.ibatis.annotations.One; import org.apache.ibatis.annotation…