第十一章 Spring练习1

目录

1.Spring环境配置

(1)Spring IOC/DI

 (2)注入对象

(3)Spring注解方式 IOC/DI

使用@Autowired

 使用@Resource

对Bean的注解

 2.练习教材P248-249的setter注入和构造器注入。

3.练习教材P259-261的DAO模式

4.练习教材P265的JDBC Temple操作数据库

5.Spring+Mybatis


1.Spring环境配置

(1)Spring IOC/DI

最终运行结果如下:

 各个文件的基本代码如下:

Category.java

package pojo;
// 用于演示IOC和DI
public class Category {
	public int getID(){
		return id;
	}
	public void setID(int id){
		this.id=id;
	}
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name=name;
	}
	private int id;
	private String name;

}

TestSpring.java

package test;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
import pojo.Category;
 
public class TestSpring {
	// 加载配置文件
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationContext.xml" });
        // 调用配置文件的name=c的bean
        Category c = (Category) context.getBean("c");
        // 输出获取的name值
        System.out.println(c.getName());
    }
}

 applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context     
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   
      <bean name="c" class="pojo.Category">
        <property name="name" value="category 1" />
    </bean>
  
</beans>
<!-- Spring的核心配置文件,通过关键字c即可获得Category对象(class的值为Category类所在的路径),获取该对象时,即被注入字符串“category 1”到name属性中 -->

 自我理解的原理:

spring框架相对于传统的方式而言,将为开发者省略了创建对象的工作,创建对象的工作交由xml文件之中,在测试类中,只需要加载相关的配置文件:

 在然后调用配置文件中的对应bean即可:

 (2)注入对象

运行结果如下:

 注入对象工作也是在xml文件中完成的,但是被注入对象的类中应该创建注入对象,本次作业中

被注入被注入对象的类为:Product.java

注入注入的对象所在的类为:Category.java

具体操作如下:

 接下了就在xml文件汇中进行注入对象的操作:

指定了 Product 对象的 category 属性。name 属性表示属性名,ref属性则引用了之前定义的 name为 "c" 的 bean 对象,即 Category 类型的对象 c。
这相当于将 Category 对象 c 设置到 Product 对象的 category 属性中,完成两个对象之间的依赖注入

新增(修改)的各部分具体代码如下:

Product.java

package pojo;

public class Product {
	private int id;
	private String name;
	private Category category;
	public int getID(){
		return id;
	}
	public void setID(int id){
		this.id=id;
	}
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name=name;
	}
	public Category getCategory(){
		return category;
	}
	public void setCategory(Category category){
		this.category=category;
	}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context     
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
   
    <bean name="c" class="pojo.Category">
        <property name="name" value="category 1" />
    </bean>
    <!-- Spring的核心配置文件,通过关键字c即可获得Category对象(class的值为Category类所在的路径),获取该对象时,即被注入字符串“category 1”到name属性中 -->
    
    <bean name="p" class="pojo.Product">
    	<property name="name" value="product1"/>
    	<property name="category" ref="c"/>
    </bean>
  <!-- 指定了 Product 对象的 category 属性。name 属性表示属性名,ref属性则引用了之前定义的 name为 "c" 的 bean 对象,即 Category 类型的对象 c。
这相当于将 Category 对象 c 设置到 Product 对象的 category 属性中,完成两个对象之间的依赖注入。 -->
</beans>

TestSpring.java

package test;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
//import pojo.Category;
import pojo.Product;
public class TestSpring {
    public static void main(String[] args) {
    	// 加载配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "applicationContext.xml" });
//        // 调用配置文件的name=c的bean
//        Category c = (Category) context.getBean("c");
//        // 输出获取的name值
//        System.out.println(c.getName());
        Product p = (Product)context.getBean("p");
        System.out.println(p.getName());
        System.out.println(p.getCategory().getName());
    }
}

(3)Spring注解方式 IOC/DI

本次将演示如何使用注释方法完成注入对象的效果

使用@Autowired

使用注解方式时要在xml文文件中加入<context:annotation-config/>语句,如下图:

在Product.java的category属性前加入@Autowired,需要导入相应的依赖包

(  @Autowired其位置可以放在属性声明语句前(即直接放在属性前)、setter 方法上或构造方法上。

setter方法上 

运行结果如下:

 使用@Resource

在被注解对象的类中加入@Resource语句,即可完成对象的注入,如下图在被注解对象的Product类中加入@Resource语句(需要导入相关的依赖包):

使用名称为 "c" 的 Bean 进行对 category 属性的注入。 

 xml文件的配置与使用@Autowired一致

上述例子都是对注入对象行为的注解

对Bean的注解

修改applicationContext.xml文件,用

<context:component-scan base-package="pojo"/>

//这段代码表示使用 Spring 的组件扫描功能,用于自动注册被 Spring 托管的 Bean。其中,base-package 属性指定了需要扫描的包路径(即 pojo 包及其子包),Spring 会自动扫描该路径下所有带有 @Component 及其派生注解(如@Service、@Repository、@Controller 等)的类,并将其所生成的实例注册并管理起来。这样,在需要使用这些实例时,我们只需在其他类中声明对应类型的依赖,Spring 就会自动将其注入。在基于注解的 Spring 配置中,通常都会结合 @Autowired 或 @Resource 等注解一起使用,以实现依赖注入和控制反转等功能。//

语句替换所有

具体代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context     
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  
    <context:component-scan base-package="pojo"/>
     
</beans>

pojo包下(与设置扫描包的范围相对应)相应的类添加@Component (注意导入相应的依赖包)注解,表明此类使bean。

Product.java

package pojo;
 
import javax.annotation.Resource;
 
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
 
@Component("p")
public class Product {
 
    private int id;
    private String name="product 1";
     
    @Autowired
    private Category category;
 
    public int getId() {
        return id;
    }
 
    public void setId(int id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Category getCategory() {
        return category;
    }
     
    public void setCategory(Category category) {
        this.category = category;
    }
}

Category.java

package pojo;
 
import org.springframework.stereotype.Component;
 
@Component("c")
public class Category {
  
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    private int id;
    private String name="category 1";
}

由于applicationContext.xml文件中没有对Product类和Category进行配置,所以要在类自主完成配置:

TestSpring.java

package test;
 
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
 
import pojo.Product;
 
public class TestSpring {
 
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "applicationContext.xml" });
        Product p = (Product) context.getBean("p");
        System.out.println(p.getName());
        System.out.println(p.getCategory().getName());
    }
}

运行结果如下:

 2.练习教材P248-249的setter注入和构造器注入。

 创建用户的JavaBean,具体代码如下:

User.java

package pojo;

public class User {
	private String name;
	private Integer age;
	private String sex;
	private Integer id;
	// 设置setter和getter方法
	
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	
	public void setAge(Integer age){
		this.age=age;
	}
	public Integer getAge(){
		return age;
	}
	
	public void setSex(String sex){
		this.sex=sex;
	}
	public String getSex(){
		return sex;
	}
	
	public void setID(Integer id){
		this.id=id;
	}
	public Integer getID(){
		return id;
	}
}

在applicationContext.xml文件中配置JavaBean,具体代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context     
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  
    <bean id="user" class="pojo.User">
        <property name="name">
            <value>法老爷爷(孙权)</value>
        </property>

        <property name="age">
            <value>31</value>
        </property>

        <property name="sex">
            <value>男</value>
        </property>
    </bean>
</beans>

测试类代码如下:

TestUser.java

package test;
import pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestUser {
	public  static void main(String args[]){
		ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		User user =(User)factory.getBean("user");
		System.out.println("用户姓名:"+user.getName());
		System.out.println("用户年龄:"+user.getAge());
		System.out.println("用户性别:"+user.getSex());
	}
}

运行结果如下:

 

 (尝试在xml文件中使用注解模式)

3.练习教材P259-261的DAO模式

定义实体类对象User.java,具体代码如下:(使用的还是上一个任务中创建的java类)

package pojo;

public class User {
	private String name;
	private Integer age;
	private String sex;
	private Integer id;
	// 设置setter和getter方法
	
	public void setName(String name){
		this.name=name;
	}
	public String getName(){
		return name;
	}
	
	public void setAge(Integer age){
		this.age=age;
	}
	public Integer getAge(){
		return age;
	}
	
	public void setSex(String sex){
		this.sex=sex;
	}
	public String getSex(){
		return sex;
	}
	
	public void setID(Integer id){
		this.id=id;
	}
	public Integer getID(){
		return id;
	}
}

创建接口UserDAOImpl,并且在接口中定义用来执行添加数据的insert()方法,该方法使用的参数时实体类User的对象。

具体代码如下:

package pojo;

public interface UserDAOImpl {
	public void inserUser(User user);// 添加用户信息的方法
}

编写实现上述接口的实体类UseDAO类:具体代码含义都有注释

具体代码如下:

package DAO;

import pojo.UserDAOImpl;
import pojo.User;

import java.sql.SQLException;

import javax.sql.DataSource;

import java.sql.Connection;
import java.sql.Statement;
public class UserDAO implements UserDAOImpl {
	private DataSource dataSource;//注入dataSource,在xml文件中进行配置,与数据建立练习
	
	public DataSource getDataSource(){
		return dataSource;
	}
	
	public void setDataSource(DataSource dataSource){
		this.dataSource=dataSource;
	}
	// 重写接口中的方法
	// 获取设置的数据
	// 向数据数据表中tb_user中添加数据
	public void inserUser(User user){
		String name = user.getName();
		Integer age = user.getAge();
		String sex = user.getSex();
		Connection conn = null;
		Statement stmt = null;// 用于执行sql语句
		System.out.println(name);
		System.out.println(age);
		System.out.println(sex);
		try{
			conn = dataSource.getConnection();//获取数据库连接
			stmt = conn.createStatement();
			stmt.execute("INSERT INTO tb_user(name,age,sex) VALUES('" + name + "', " + age + ", '" + sex + "')");
		}catch(SQLException e){
			e.printStackTrace();
		}
	}
}

编写xml配置文件,实现与数据库的连接,注意与自己数据库的信息相对应。

具体代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context     
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/how2java?useUnicode=true&amp;characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <bean id="UserDao" class="DAO.UserDAO">
        <property name="dataSource" ref="dataSource"/>
    </bean>

</beans>

编写测试类;

具体代码如下:

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import DAO.UserDAO;
import pojo.User;

public class TestUserDAO {
	public static void main(String args[]){
		ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		User user = new User();
		user.setName("法老爷爷孙权");
		user.setAge(31);
		user.setSex("男");
		UserDAO userDAO = (UserDAO)factory.getBean("UserDao");
		userDAO.inserUser(user);
		System.out.println("数据添加成功");
		
	}
}

 第一次运行时,出现了字符集出现了问题,感谢gpt(感谢同学提供的gpt链接)

进行修改之后,具体运行结果如下:

 我添加了几条打印输出语句

4.练习教材P265的JDBC Temple操作数据库

在xml配置文件中配置JDBC Temple和数据源

具体代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context     
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  
    <bean id="user" class="pojo.User">
        <property name="name">
            <value>法老爷爷(孙权)</value>
        </property>

        <property name="age">
            <value>31</value>
        </property>

        <property name="sex">
            <value>男</value>
        </property>
    </bean>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/how2java?useUnicode=true&amp;characterEncoding=utf8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <bean id="UserDao" class="DAO.UserDAO">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    
    <!--配置JDBC Template  -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
	</bean>

</beans>

创建测试类,具体代码如下:

package test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class AddUsers {
	public static void main (String args[]){
		DriverManagerDataSource ds = null;
		JdbcTemplate jtl =null;
		// 获取配置文件
		ApplicationContext factory = new ClassPathXmlApplicationContext("applicationContext.xml");
		jtl = (JdbcTemplate)factory.getBean("jdbcTemplate");
		String sql = "insert into tb_user(name,age,sex)values('黄科茗','20','男')";
		jtl.update(sql);
		System.out.println("更新成功");
	}
}

 具体运行结果如下:

查看数据库数是否成功更新:

成功 

5.Spring+Mybatis

跟着教程来,没有搞太清楚,不知道应该运行哪一个文件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值