一.实验目的:掌握Spring的依赖注入技术
1.Spring框架
Spring可以用来构建企业级应用,是一个综合性的框架。技术层面,主要关注两个方面,一个是IoC(Insersion of Control) Container,
反转控制容器,这个容器用来管理对象的创建和依赖注入;另一方面是Spring提供的多个模块,比如data access,security等,这些模块
能简化我们对数据库或者其他技术的操作。
2.依赖注入技术
如果不使用依赖注入,Object对象就对自己创建依赖,使用后依赖统一由IoC提供给Object,能简化我们对对象的操作,增强程序的灵活性和
可持续性。
二.实验内容
1.Spring环境配置
1.1 先运行,看到效果,再执行
解压并导入how2java的安装包到eclipse后,运行TestSpring.java,效果如下:
1.2 本知识点目的
通过运行TestSpring演示如何用Spring获取一个对象,并打印其name
1.3 下载并导入包
1.4 pojo
pojo这个包里面放的就是Category这个类,类里面定义了两个私有变量id和name,以及一堆get和set方法。set方法将形参实例化,
get获取获取实例化后的值。
1.5 applicationContext.xml
这段xml文件的核心就是以下这三行
<bean name="c" class="com.how2java.pojo.Category">
<property name="name" value="category 1" />
</bean>
class指明Category对象的位置, name设置为c, 取值category 1
;
在TestSpring.java文件中,Category c = (Category) context.getBean("c");
通过c获取category类的实例
在使用Dependency Injection(依赖注入)以后,getBean()的功能就被自动实现了,不需要手动写出来。
1.6 TestSpring
1.7 原理图
说白了就是把对object的管理权交给了Spring,就不需要自己手动创建管理实例化后的object。
2.构造器和setter注入的方式给bean的属性赋值
练习教材P248-P249的setter注入和构造器注入
2.1 Setter注入
所谓Setter注入,就是在applicationContext.xml文件中写<property>
为Category.java中的Setter方法传参。
- 在用Setter注入的方式传参以前,传参的代码是这样的:
<property name="name" value="category 1" />
- 而Setter注入传参的代码是这样的:
<property name = "name">
<value>家人们谁懂啊</value>
</property>
如果传递的参数比较简单,就用第一种。但是当传递的参数比较复杂时,就需要用Setter注入
- xml代码:
<bean name="c" class="com.how2java.pojo.Category">
<!-- <property name="name" value="category 1" /> -->
<property name = "name">
<value>家人们谁懂啊</value>
</property>
</bean>
- 效果:
顺带一提,name, id两个属性都可以setter,效果如下:
2.2 构造器注入
所谓构造器注入,就是把Category.java改写,抛弃get,set方法,用构造函数的方式实例化id和name, 再写一个pringInfo方法
用来输出。需要注意的是,xml中实例化的值和构造方法中this的值顺序要保持一致。
刚开始报错:
错误在xml文件的第36行。经过检查,单词写错。
然后又报错:
[java.lang.String] to required type [int]: Failed to convert value of type 'java.lang.String' to required type 'int'; nested exception is java.lang.NumberFormatException: For input string: "泰酷辣"
这应该是因为Category.java的构造方法里面写实例化的id,而id是int型;xml文件里面先赋值的是"泰酷辣",类型无法匹配,所以报错。
当我更改Category.java文件中的this的顺序之后,也就是
public Category(String name, int id){
this.name = name;
this.id = id;
}
再运行TestSpring,成功
3.Spring的DAO模式:利用DAO模式在tb_user表中添加数据
DAO是一种读取数据库中数据的方法,能够自动创建SQL语句,提供高级特征,节省开发时间和减少代码量。
经过一系列对课本代码的搬运后,运行效果如下:
虽然能够成功显示这句话,但是数据并没有被添加到tb_user表中。目前未知原因。
4.利用jdbcTemplate在数据表tb_user添加用户信息
JdbcTemplate是Spring的核心类之一,能够简化JDBC编写的代码
4.1 在applicationContext.xml中配置JdbcTemplate和数据源
这是我照着课本的代码做后得到的数据表:
可以看出已经可以添加数据了,但是存在中文乱码的问题。
然后我chatGPT了一下,修改了applicationContent.xml和AddUser.java中的编码方式,然后就可以了
5.Spring与Mybatis整合
5.1 新建Category
Category的主要作用就是定义id, name, 并且写对应get, set方法
5.2 新建CategoryMapper
CategoryMapper是一个接口,用来对一个Category对象的实体进行增删改查
5.3 Category.xml
5.4 applicationContext.xml
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZpK888s-1685200925650)(null)]
5.5 测试
运行Mybatis后的效果: