Spring练习1

本文介绍了Spring框架的依赖注入技术,包括IoC容器和setter/构造器注入的使用方法。通过示例展示了如何配置Spring环境,使用setter注入和构造器注入给bean属性赋值。此外,还探讨了Spring的DAO模式和JdbcTemplate在数据库操作中的应用,以及Spring与Mybatis的整合过程。
摘要由CSDN通过智能技术生成

一.实验目的:掌握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,效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jEg9tRnO-1685200925497)(null)]

1.2 本知识点目的

通过运行TestSpring演示如何用Spring获取一个对象,并打印其name

1.3 下载并导入包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VZ8nsMNH-1685200925695)(null)]

1.4 pojo

pojo这个包里面放的就是Category这个类,类里面定义了两个私有变量id和name,以及一堆get和set方法。set方法将形参实例化,
get获取获取实例化后的值。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4RoIttEP-1685200925470)(null)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-otwCbCuM-1685200925346)(null)]

1.7 原理图

说白了就是把对object的管理权交给了Spring,就不需要自己手动创建管理实例化后的object。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5mXL49pt-1685200925742)(null)]

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注入

  1. xml代码:
<bean name="c" class="com.how2java.pojo.Category">
    <!-- <property name="name" value="category 1" /> -->
        
    <property name = "name">
       <value>家人们谁懂啊</value>
    </property>
</bean>  
  1. 效果:
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qIBK7IIU-1685200925673)(null)]

顺带一提,name, id两个属性都可以setter,效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s8XBTgv1-1685200925315)(null)]

2.2 构造器注入

所谓构造器注入,就是把Category.java改写,抛弃get,set方法,用构造函数的方式实例化id和name, 再写一个pringInfo方法
用来输出。需要注意的是,xml中实例化的值和构造方法中this的值顺序要保持一致。

刚开始报错:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YBHp1n1Z-1685200925582)(null)]

错误在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,成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PfD9qlyr-1685200925403)(null)]

3.Spring的DAO模式:利用DAO模式在tb_user表中添加数据

DAO是一种读取数据库中数据的方法,能够自动创建SQL语句,提供高级特征,节省开发时间和减少代码量。

经过一系列对课本代码的搬运后,运行效果如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-81Z0BK55-1685200925378)(null)]

虽然能够成功显示这句话,但是数据并没有被添加到tb_user表中。目前未知原因。

4.利用jdbcTemplate在数据表tb_user添加用户信息

JdbcTemplate是Spring的核心类之一,能够简化JDBC编写的代码

4.1 在applicationContext.xml中配置JdbcTemplate和数据源

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2BRT8n9s-1685200925447)(null)]

这是我照着课本的代码做后得到的数据表:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-revInp8Y-1685200925424)(null)
可以看出已经可以添加数据了,但是存在中文乱码的问题。
然后我chatGPT了一下,修改了applicationContent.xml和AddUser.java中的编码方式,然后就可以了
image

5.Spring与Mybatis整合

5.1 新建Category

Category的主要作用就是定义id, name, 并且写对应get, set方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o8BK06q7-1685200925525)(null)]

5.2 新建CategoryMapper

CategoryMapper是一个接口,用来对一个Category对象的实体进行增删改查
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pyLhivqc-1685200925716)(null)]

5.3 Category.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQTLx7KY-1685200925628)(null)]

5.4 applicationContext.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OZpK888s-1685200925650)(null)]

5.5 测试

运行Mybatis后的效果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8eJA9ziH-1685200925555)(null)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值