创建对象用到的标签<bean> 主要用到的属性有两个 id ,class。
id:给标签一个标识以便于我们在代码中通过id来创建对象
class:类的全限定类名,表示我们要创建哪一个类
<bean id="user" class="com.company.User"></bean>
创建对象之后就是注入了,注入主要分为两种一种是set方法的注入,另一种是通过带参的构造函数的注入,还有一种较为少见 p名称空间注入。
<!-- 通过set方法的注入 -->
<bean id="user" class="com.company.User">
<property name="userName" value="zsby" ></property>
<property name="userSex" value="1"></property>
<property name="userAge" value="1"></property>
</bean>
<!-- 使用带参数的构造函数进行依赖注入 -->
<bean id="user1" class="com.company.User">
<constructor-arg name="userName" value="zsby1"></constructor-arg>
<constructor-arg name="userAge" value="12"></constructor-arg>
<constructor-arg name="userSex" value="0"></constructor-arg>
</bean>
<!--首先在代码头部进行修改-->
xmlns:p="http://www.springframework.org/schema/p"
<!--之后就可以通过p:属性名的方法直接进行注入-->
<bean id="user0" class="com.company.User" p:userName="zsby" p:userSex="1" p:userAge="1">
</bean>
如果一个类的属性是用户自己定义的数据类型那么需要用到 注入外部bean 既在xml中把要注入的类用bean表示出来并且取一个id。之后的property 和 construcor-arg标签中的value属性换成ref属性。
ref:值为外部bean的id
其次如果想要注入空值和带有特殊符号的值需要用特别的格式否则就会报错
<!-- 如果想要赋的值为空则 -->
<property name="userName" >
<null/>
</property>
<!-- 如果属性包含特殊符号 -->
<property name="userName" >
<value><![CDDATA[<<南京>>]]></value>
</property>
在对集合类型的属性进行注入的时候 因为集合类型的值不止一个所以通过value标签无法满足我们的要求。
//在类中又增加了如下的集合属性
private String[] course;
private List<String> list;
private Map<String,String> map;
<bean name="user3" class="com.company.User">
<property name="course">
<!-- 对数组使用array 标签-->
<array>
<value>语文</value>
<value>数学</value>
<value>英语</value>
<value>政治</value>
</array>
</property>
<!-- 对列表使用list标签-->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<value>啊啊</value>
</list>
</property>
<!-- 对map使用map标签,同时因为数据由键值对组成所以用entry -->
<property name="map">
<map>
<entry key="Java" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<constructor-arg name="userName" value="zsby1"></constructor-arg>
<constructor-arg name="userAge" value="12"></constructor-arg>
<constructor-arg name="userSex" value="0"></constructor-arg>
</bean>
以上的集合类型的数据的用法复用性不足,每次我们要使用的时候就需要再写一遍。util命名空间便解决了这一问题。
<!-- 同样在文件头加入-->
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd"
<!-- 用法如下-->
<util:list id="list0">
<value>语文</value>
<value>数学</value>
<value>英语</value>
<value>政治</value>
</util:list>
<bean name="user4" class="com.company.User">
<property name="course" ref="list0"></property>
</bean>
2022-9-17
学习了JDBCTemplate 德鲁伊数据源 的数据库操作。
常用的配置有
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/test"></property>
<property name="username" value="root"></property>
<property name="password" value="root"></property>
</bean>
<bean id="jdbct" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg ref="dataSource"></constructor-arg>
</bean>
注入之后常用的方法有,update,queryForObject,batchUpdate,query
其中query函数的RowMapper参数需要entity类的参数与数据库表的表头参数相匹配。
批量操作的batchupdate,的参数要注意采用的是object[]数组来对应批量的sql语句中的 ?(问号变量)。
之后便是事务操作以及新特性
事务
<!-- 创建事务管理器-->
<bean id="transaction" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 导入tx命名空间并且开启扫描-->
<tx:annotation-driven transaction-manager="transaction"></tx:annotation-driven>
之后使用注解@Transactional 该注解在类和方法上都可以使用。注解加在类上面表示给这个类的所有方法添加了事务,如果在方法上面则只是该方法添加了事务
未完成部分有,事务的xml方式管理以及完全注解管理。spring5的新特性。