首页
留言
Search
1
在Centos7下搭建Socks5代理服务器
1,152 阅读
2
在windows11通过Zip安装Mysql5.7
674 阅读
3
Mysql5.7开放远程登录
578 阅读
4
数据库
568 阅读
5
mysql5.7基本命令
473 阅读
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
登录
Search
标签搜索
java
centos7
linux
centos
html5
JavaScript
php
css3
mysql
spring
mysql5.7
linux全栈
ubuntu
BeanFactory
SpringBean
python
python3
ApplicationContext
kali
mysql8.0
我亏一点
累计撰写
139
篇文章
累计收到
34
条评论
首页
栏目
综合
正则表达式
git
系统
centos7
ubuntu
kali
Debian
网络
socks5
wireguard
运维
docker
hadoop
kubernetes
hive
openstack
ElasticSearch
ansible
前端
三剑客
Python
Python3
selenium
Flask
PHP
PHP基础
ThinkPHP
游戏
我的世界
算法
递归
排序
查找
软件
ide
Xshell
vim
PicGo
Typora
云盘
安全
靶场
reverse
Java
JavaSE
Spring
MyBatis
C++
QT
数据库
mysql
页面
留言
搜索到
4
篇与
maven
的结果
2023-03-12
Java MyBatis实体类属性名与数据库字段表名称不一致解决办法
MyBatis实体类属性名与数据库字段表名称不一致解决办法1. 查询字段时使用别名对不一样的列名起别名,让别名和实体类的属性名一样<mapper namespace="org.example.mapper.UserMapper"> <select id="selectAll" resultType="user"> select 数据库表字段名 as 实体类属性名 from user; </select> </mapper>但是每次查询都需要重新定义一次别名使用sql片段的方式解决<mapper namespace="org.example.mapper.UserMapper"> <sql id="dataName"> 数据库表字段名 as 实体类属性名 </sql> <select id="selectAll" resultType="user"> select <include refid="dataName" /> from user; </select> </mapper>但是此方法缺点不灵活2.使用resultMap映射别名<mapper namespace="org.example.mapper.UserMapper"> <resultMap id="dataName" type="user"> <id column="id" property="id"></id> <result column="数据库表字段名" property="实体类属性名"></result> </resultMap> <select id="selectAll" resultMap="dataName"> select * from user; </select> </mapper>id作为主键映射,result作为一般字段映射
2023年03月12日
261 阅读
0 评论
0 点赞
2023-03-12
Java MyBatis代理开发
MyBatis代理开发0. 环境准备User.javapackage org.example; public class User { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAll(){ return "id=" + id + " username=" + username + " password=" + password; } } 1. 定义与SQL映射文件同名的Mapper接口,并且将Mapper接口和SQL映射文件放置在同一目录下创建UserMapper.java空接口创建UserMapper.xml文件(IDEA中resources创建目录使用/代替.)2. 设置SQL映射文件的namespace属性为Mapper接口全限定名UserMapper.xml<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.example.mapper.UserMapper"> <select id="selectAll" resultType="org.example.User"> select * from user; </select> </mapper>3. 在Mapper接口中定义方法,方法名就是SQL映射文件中sql语句的id,并保持参数类型和返回值类型一致UserMapper.javapackage org.example.mapper; import org.example.User; import java.util.List; public interface UserMapper { List<User> selectAll(); }mybatis-config.xml<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="org/example/mapper/UserMapper.xml"/> </mappers> </configuration>4.编码:通过 SqlSession的 getMapper方法获取 Mapper接口的代理对象调用对应方法完成sql的执行主函数调用 public static void main(String[] args) throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); // 获取UserMapper代理对象 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> users = userMapper.selectAll(); System.out.println(users.get(0).getAll()); sqlSession.close(); }执行结果id=1 username=admin password=1ed1252369b609c48a93ea80b57f52ed细节:如果Mapper接口名称和SQL映射文件名称相同,并在同一目录下,则可以使用包扫描的方式简化SQL映射文件的加载mybatis-config.xml <mappers> <!-- 加载sql映射文件 --> <!-- <mapper resource="org/example/mapper/UserMapper.xml"/>--> <!-- Mapper代理方式 --> <package name="org.example.mapper"/> </mappers>
2023年03月12日
191 阅读
0 评论
0 点赞
2023-03-10
Java MyBatis快速入门
MyBatis 快速入门1.数据库准备1.1 数据库信息地址端口用户名密码localhost3306rootroot1.2 创建java数据库create database java;1.3 创建user数据表并且添加数据SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键', `username` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户名', `password` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '密码', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `user_username_unique`(`username`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci ROW_FORMAT = DYNAMIC; -- ---------------------------- -- Records of user -- ---------------------------- INSERT INTO `user` VALUES (1, 'admin', '1ed1252369b609c48a93ea80b57f52ed'); SET FOREIGN_KEY_CHECKS = 1; 2.Java Maven项目2.1 配置pom.xml <dependencies> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.28</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.2</version> <scope>test</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.20</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.9</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.9</version> </dependency> </dependencies>2.2 在resources添加logback.xml文件(日志:可选)<?xml version="1.0" encoding="UTF-8"?> <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒当scan为true时,此属性生效。默认的时间间隔为1分钟。 debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> <configuration scan="false" scanPeriod="60 seconds" debug="false"> <!-- 定义日志的根目录 value表示的是打印到哪里的--> <property name="LOG_HOME" value="${catalina.base}/logs/" /> <!-- 定义日志文件名称 value表示的是log的名称--> <property name="appName" value="u-plan"/> <!-- ch.qos.logback.core.ConsoleAppender 表示控制台输出 --> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <Encoding>UTF-8</Encoding> <!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息,%n是换行符 --> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </layout> </appender> <!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 --> <appender name="appLogAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Encoding>UTF-8</Encoding> <!-- 指定日志文件的名称 --> <file>${LOG_HOME}/${appName}.log</file> <!-- 当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名 TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动。 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 滚动时产生的文件的存放位置及文件名称 %d{yyyy-MM-dd}:按天进行日志滚动 %i:当文件大小超过maxFileSize时,按照i进行文件滚动 --> <fileNamePattern>${LOG_HOME}/${appName}-%d{yyyy-MM-dd}-%i.log </fileNamePattern> <!-- 可选节点,控制保留的归档文件的最大数量,超出数量就删除旧文件。假设设置每天滚动, 且maxHistory是365,则只保存最近365天的文件,删除之前的旧文件。注意,删除旧文件是, 那些为了归档而创建的目录也会被删除。 --> <MaxHistory>30</MaxHistory> <!-- 当日志文件超过maxFileSize指定的大小是,根据上面提到的%i进行日志文件滚动 注意此处配置SizeBasedTriggeringPolicy是无法实现按文件大小进行滚动的,必须配置timeBasedFileNamingAndTriggeringPolicy --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>512MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <!-- 日志输出格式:%d表示日期时间,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 %msg:日志消息,%n是换行符 --> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [ %thread ] - [ %-5level ] [%logger{50} : %line ] - %msg%n</pattern> </layout> </appender> <!-- logger主要用于存放日志对象,也可以定义日志类型、级别 name:表示匹配的logger类型前缀,也就是包的前半部分 level:要记录的日志级别,包括 TRACE < DEBUG < INFO < WARN < ERROR additivity:作用在于children-logger是否使用 rootLogger配置的appender进行输出,false:表示只用当前logger的appender-ref,true:表示当前logger的appender-ref和rootLogger的appender-ref都有效 --> <!-- hibernate logger --> <logger name="org.hibernate" level="error" /> <!-- Spring framework logger --> <logger name="org.springframework" level="error" additivity="false"/> <logger name="com.fairyland" level="info" additivity="true"> <appender-ref ref="appLogAppender" /> </logger> <!-- root与logger是父子关系,没有特别定义则默认为root,任何一个类只会和一个logger对应, 要么是定义的logger,要么是root,判断的关键在于找到这个logger,然后判断这个logger的appender和level。 --> <root level="info"> <appender-ref ref="stdout" /> <appender-ref ref="appLogAppender" /> </root> </configuration> 2.3 在resources下创建mybatis-config.xml文件<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.cj.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/java?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="UserMapper.xml"/> </mappers> </configuration>2.4 创建数据表User实体类package org.example; public class User { private Integer id; private String username; private String password; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getAll(){ return "id=" + id + " username=" + username + " password=" + password; } }2.5在resources下创建MyBatis的Sql映射文件UserMapper.xml<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="user"> <select id="selectAll" resultType="org.example.User"> select * from user; </select> </mapper>3. 运行效果主函数执行public class Main { public static void main(String[] args) throws IOException { InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); List<User> objects = sqlSession.selectList("user.selectAll"); System.out.println(objects.get(0).getAll()); } }执行结果id=1 username=admin password=1ed1252369b609c48a93ea80b57f52ed
2023年03月10日
226 阅读
0 评论
0 点赞
2023-02-22
Java 基于xml的Spring应用
Java 基于xml的Spring应用1.SpringBean 的配置解析Spring开发中主要是对Bean的配置,Bean的常用配置一览如下: 1.Bean的基础配置配置UserDaoImpl由Spring容器负责管理<bean id="userDao" class="org.example.UserDaoImpl"></bean>此时存储到Spring容器(singleObjects单例池)中的Bean的beanName是userDao,值是UserDaoImpl对象,可以根据beanName获取Bean实例applicationContext.getBean("userDao")如果不配置id,则Spring会把当前Bean实例的全限定名作为beanNamepublic static void main(String[] args) { ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserDao bean = (UserDao) applicationContext.getBean("org.example.UserDaoImpl"); System.out.println(bean); }如果配置了id,便不能在使用Bean实例的全限定名进行获取,例如:applicationContext.getBean("org.example.UserDaoImpl");配置别名,配置别名后可以使用别名获得Bean对象实例<bean id="userDao" name="aaa,bbb" class="org.example.UserDaoImpl"></bean>2.SpringBean的配置详解1.Bean的范围配置默认情况下,单纯的Spring环境Bean的作用范围有两个:Singleton和Prototypesingleton:单例,默认值,Spring容器创建的时候,就会进行Bean的实例化,并且存储到容器内部的单例池中,每次getBean时都是从单例池中获取相同的Bean实例<bean id="userDao" class="org.example.UserDaoImpl" scope="singleton"></bean>prototype:原型,Spring容器初始化时不会创建Bean实例,只有调用getBean时才会实例化Bean,每次getBean都会创建一个新的Bean实例<bean id="userDao" class="org.example.UserDaoImpl" scope="prototype"></bean>如果是spring-webmvc的情况下,还会增加两个作用范围:request和sessionmaven导包<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.7</version> </dependency>request:将创建的对象放在request域当做<bean id="userDao" class="org.example.UserDaoImpl" scope="request"></bean>session:将创建的对象放在session域当做<bean id="userDao" class="org.example.UserDaoImpl" scope="session"></bean>2.Bean的延迟加载当lazy-init设置为true时为延迟加载,也就是当Spring容器创建的时候,不会立即创建Bean实例,等待用到时在创建Bean实例并且存储到单例池中去,后续在使用该Bean直接冲单例池获取,本质上该Bean还是单例的,只对scope设置为singleton的Bean起作用,对prototype无效,对BeanFactory作为容器也无效<bean id="userDao" class="org.example.UserDaoImpl" lazy-init="true"></bean>3.Bean的初始化方法和销毁方法init-method:初始化时运行方法destroy-method:销毁时运行方法,单例模式容器必须显示关闭才会执行这个方法,否则不会执行关闭,又因为ApplicationContext的接口没有关闭容器的方法,所以类型需要使用ClassPathXmlApplicationContext,才有close显式关闭容器,如果不使用显式关闭,则有可能不会执行销毁方法,例如容器挂掉后就无法执行销毁方法beans.xml:<bean id="userDao" class="org.example.UserDaoImpl" init-method="init" destroy-method="destroy"></bean>UserDaoImpl.javapublic class UserDaoImpl implements UserDao{ public void init(){ System.out.println("初始化方法"); } public void destroy(){ System.out.println("销毁方法"); } }主函数调用 public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); System.out.println(userDao); applicationContext.close(); }结果输出初始化方法 org.example.UserDaoImpl@7d68ef40 销毁方法扩展:除此之外,我们还可以通过实现InitializingBean接口,完成一些Bean的初始化操作,比init-method方法优先级要高UserDaoImpl.javapublic class UserDaoImpl implements UserDao, InitializingBean { public void init(){ System.out.println("初始化方法"); } public void destroy(){ System.out.println("销毁方法"); } @Override public void afterPropertiesSet() throws Exception { System.out.println("属性执行之后进行调用"); } }主函数调用public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserDao userDao = (UserDao) applicationContext.getBean("userDao"); System.out.println(userDao); applicationContext.close(); }结果输出属性执行之后进行调用 初始化方法 org.example.UserDaoImpl@5b0abc94 销毁方法4.Bean的实例化配置Spring的实例化方式主要如下两种:构造方式实例化:底层通过构造方法对Bean进行实例化工厂方式实例化:底层通过调用自定义的工厂方法对Bean进行实例化构造方式实例化Bean分为有参构造和无参构造方法实例化,Spring中配置的<bean>几乎都是无参构造,有参构造例子如下:UserDaoImpl.javapublic class UserDaoImpl implements UserDao { public UserDaoImpl(String name){ System.out.println(name); } }有参构造在实例化Bean时,需要参数的注入,通过constructor-arg标签,嵌入在bean标签内部提供构造参数beans.xml<bean id="userDao" class="org.example.UserDaoImpl"> <constructor-arg value="你好"/> </bean>工厂方式实例化Bean,又分为如下三种:静态工厂方法实例化Bean实例工厂方法实例化Bean实现FactoryBean规范延迟实例化Bean静态工厂实例化Bean:创建一个静态方法public class MyBeanFactory1 { public static UserDao userDao(){ return new UserDaoImpl(); } }配置beans.xml文件,factory-method指定静态方法,如果有传参也需要constructor-arg进行传值<bean id="userDao1" class="factory.MyBeanFactory1" factory-method="userDao"></bean>主函数调用public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Object useDao1 = applicationContext.getBean("userDao1"); System.out.println(useDao1); }执行结果org.example.UserDaoImpl@159f197实例工厂方法化Bean:创建一个方法public class MyBeanFactory2 { public UserDao userDao(){ return new UserDaoImpl(); } }beans.xml中配置该静态方法对bean,并且再次配置一个bean指向该bean,并且使用方法,如果有传参也需要constructor-arg进行传值<!-- 配置工厂对象 --> <bean id="myBeanFactory2" class="factory.MyBeanFactory2"></bean> <bean id="userDao2" factory-bean="myBeanFactory2" factory-method="userDao"></bean>主函数执行 public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Object userDao2 = applicationContext.getBean("userDao2"); System.out.println(userDao2); }结果输出org.example.UserDaoImpl@51e5fc98实现FactoryBean规范延迟实例化Bean类的接口继承于FactoryBean,在BeanFactory创建时便已经创建实例,但是实例的值并不是真实的对象本身,而是当getBean进行调用的时候,才会将实例对象新建调用getObject方法并且存放到缓存池,然后从缓存池取值从而返回实例对象,如果后续进行重复取值,不会再创建一个新的对象,而是从缓存池取值后直接返回,从而实现FactoryBean规范延迟加载Beanpublic class MyBeanFactory3 implements FactoryBean<UserDao> { @Override public UserDao getObject() throws Exception { return new UserDaoImpl(); } @Override public Class<?> getObjectType() { return null; } }主函数调用public static void main(String[] args) { ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); Object userDao3 = applicationContext.getBean("userDao3"); Object userDao4 = applicationContext.getBean("userDao3"); System.out.println(userDao3); System.out.println(userDao4); }运行结果org.example.UserDaoImpl@48fa0f47 org.example.UserDaoImpl@48fa0f475.Bean的注入方式 其中,ref是reference的缩写,翻译为参考涉及到意思,用于引入其他Bean的id。value用于注入普通的属性值。6.Bean的依赖注入配置配置注入普通类型的List对象配置接口public interface UserService { public List<String> getStringList(); }配置实现类public class UserServiceImpl implements UserService { //注入List private List<String> stringList; public void setStringList(List<String> stringList) { this.stringList = stringList; } public List<String> getStringList() { return stringList; } }配置Beans.xml文件<bean id="userService" class="org.example.UserServiceImpl"> <property name="stringList"> <list> <value>aaaa</value> <value>bbbb</value> <value>cccc</value> <value>dddd</value> </list> </property> </bean>主函数运行ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml"); UserService userService = (UserService) applicationContext.getBean("userService"); System.out.println(userService.getStringList());运行结果[aaaa, bbbb, cccc, dddd]配置注入引用类型的List对象UserServicelmpl.javapublic List<String> getStringList() { return stringList; } public void setUserDaoList(List<UserDao> userDaoList) { this.userDaoList = userDaoList; }beans.xml需要配置ref或者单独创建bean<bean id="useService1" class="org.example.UserServiceImpl"> <property name="userDaoList"> <list> <bean class="org.example.UserDaoImpl"/> <bean class="org.example.UserDaoImpl"/> <bean class="org.example.UserDaoImpl"/> <bean class="org.example.UserDaoImpl"/> </list> </property> </bean>或者<bean id="userDao1" class="org.example.UserDaoImpl"/> <bean id="userDao2" class="org.example.UserDaoImpl"/> <bean id="userDao3" class="org.example.UserDaoImpl"/> <bean id="userDao4" class="org.example.UserDaoImpl"/> <bean id="useService1" class="org.example.UserServiceImpl"> <property name="userDaoList"> <list> <ref bean="userDao1"/> <ref bean="userDao2"/> <ref bean="userDao3"/> <ref bean="userDao4"/> </list> </property> </bean>配置注入引用类型的set对象配置和List一样,在beans.xml文件中,将list标签改为set配置注入引用类型的map对象配置和List一样,在beans.xml文件中,将list标签改为map,map中标签为entry,key为键名,value为键值,value-ref为引用对象<property name="map"> <map> <entry key="a" value="1111"/> <entry key="b" value="2222"/> </map> </property> <property name="map"> <map> <entry key="a" value-ref="userDao1"/> <entry key="b" value-ref="userDao2"/> </map> </property>
2023年02月22日
178 阅读
0 评论
0 点赞