Spring框架学习笔记 --- [在spring中初步上手使用注解开发;以及JDBC的初步使用]
Posted 小智RE0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架学习笔记 --- [在spring中初步上手使用注解开发;以及JDBC的初步使用]相关的知识,希望对你有一定的参考价值。
spring官网 -->spring官网
spring5.3.12–>spring-framework
在线文档 --> Spring 5.3.12
文章目录
1.初步上手注解开发
(1)首先试试 xml 进行配置的方式
比如说,我现在要写一个用户管理相关的业务,这时就得配置一下,dao数据访问交互层;service服务层…
那么,在服务层调用数据访问交互层时,就得把dao作为属性放入服务层其中;且提供相应的get,set方法;
先不用注解;简易操作一下开发过程;
首先,在创建的
dao
包下创建UserDao
;模拟数据访问层;里面定义一个方法;(仅模拟使用,并不是真实的业务)
public class UserDao {
//定义的方法;
public void saveUser(){
System.out.println("在数据访问层写的保存用户信息方法~~~~");
}
}
在创建的service
包下创建UserService
;模拟服务层;在这里将会调用数据访问层的方法;
public class UserService {
//将数据交互的访问层关联进来作为属性;
private UserDao userDao;
//需要写入get,set方法;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
//保存用户信息的方法;
public void saveUser(){
System.out.println("在服务层调用数据访问层写好的方法~~~");
userDao.saveUser();
}
}
在spring.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" xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--模拟业务开发的简易配置-->
<!--数据访问层-->
<bean id="userDao" class="com.xiaozhi.spring.dao.UserDao">
</bean>
<!--服务层;需要将 属性userDao(用户数据访问层)配置注入 使用ref引用上面的bean即可-->
<bean id="userService" class="com.xiaozhi.spring.service.UserService">
<property name="userDao" ref="userDao"/>
</bean>
</beans>
测试调用
package com.xiaozhi.spring.test;
import com.xiaozhi.spring.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author by CSDN@小智RE0
* @date 2021-11-10 14:09
*/
public class AnalogBusiness {
@Test
public void test01(){
//读取配置文件;
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
//创建用户服务层的对象;
UserService userService = ac.getBean("userService", UserService.class);
//测试调用方法;
userService.saveUser();
}
}
测试结果;
在服务层调用数据访问层写好的方法~~~
在数据访问层写的保存用户信息方法~~~~
这样在xml文件中进行配置的过程;还是比较容易的;
但使用注解的话,还会简化这个过程;
(2)快速上手注解开发过程
在这个多级的项目中,想要快速把之前的这个之前创建的项目spring01
的数据和结构完整复制下来;
具体步骤
—> 先把项目spring01
直接Ctrl+ C
复制一下,粘贴到空项目springstudy007
目录下;
注意到这个复制过来的项目不是maven项目(没有maven项目标识,且里面的文件不能正常使用),
—>删掉spring01.iml
文件
那么就要手动将它变为maven项目
—>点击File
,找到项目结构
—>找到Module
模块;选择空项目springstudy007
;点击加号;但是这里选择导入模块(Import Module
)
—>选择到之前复制创建的项目spring02
—>选择maven即可;
—>更改一下名称;点击右下角APPLY–>OK
得到的spring02
项目就完全和上面的spring01
一样了;
首先是保障项目中有aop的jar工具包;
实际上,在上篇笔记的一开始配置的spring-context
jar包就包含了aop的工具包;
使用注解的话,之前的几个类就稍微改变一下;
数据访问层UserDao
使用注解@Repository
进行标记
//标注数据访问层
@Repository
public class UserDao {
//定义的方法;
public void saveUser(){
System.out.println("在数据访问层写的保存用户信息方法~~~~");
}
}
服务层UserService
用@Service
进行标记;
在关联数据访问层的UserDao作为属性时,使用@Autowired
标记为自动装配;这时无需编写该属性的get,set方法;
//标记服务层
@Service
public class UserService {
//将数据交互的访问层关联进来作为属性;
//标记为自动装配;
@Autowired
private UserDao userDao;
//保存用户信息的方法;
public void saveUser(){
System.out.println("在服务层调用数据访问层写好的方法~~~");
userDao.saveUser();
}
}
将之前的spring.xml
里面的配置暂时注释掉;
在resources
目录下创建spring-useannotations.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--标记开启注解扫描-->
<context:component-scan base-package="com.xiaozhi.spring">
</context:component-scan>
</beans>
进行测试;
public class AnalogBusiness {
@Test
public void test01(){
//读取配置文件;
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-useannotations.xml");
//创建用户服务层的对象; 这里直接按类的反射进行创建即可;
UserService userService = ac.getBean(UserService.class);
//测试调用方法;
userService.saveUser();
}
}
可调用
在服务层调用数据访问层写好的方法~~~
在数据访问层写的保存用户信息方法~~~~
2.其他的注解使用
@Repository
,标记将数据访问层注入spring容器;
@Service
; 标记将服务层注入spring容器;
@Autowired
标注属性自动装配依赖注入
除了刚才简易使用的注解外,目前还需要了解使用的其他注解–>
(1)@Component(value = “user”);
一般在实体类上使用;将该类标注为容器的一个组件;value就是它的值;可看做id;
也就相当于之前在xml文件中进行的配置;==>
<bean id="user" class="com.xiaozhi.spring.pojo.User"></bean>
(2)@Scope(value = “prototype”)
对类标注作用域的类型;value不写的话默认为单例singleton
测试使用一下;为User类进行配置;
用注解的方式将User类注入到spring容器中;作用域为原型模式;用@Value
对属性进行赋值;
这里暂时去掉了get与set方法;
//将用户类注入到spring容器中;且令其作用域为原型模式;
@Component(value = "user")
@Scope(value = "prototype")
public class User {
//用户ID,姓名,密码;地址,备注信息;
@Value("007")
private Integer id;
@Value("小智")
private String account;
@Value("123654")
private String password;
@Value("陕西汉中")
private String add_ress;
@Value("备注:")
private String info;
//初始化;
public User() {
System.out.println("无参构造方法调用了");
}
public User(String account, String password, String add_ress, String info) {
System.out.println("有参构造方法调用了");
this.account = account;
this.password = password;
this.add_ress = add_ress;
this.info = info;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", account='" + account + '\\'' +
", password='" + password + '\\'' +
", add_ress='" + add_ress + '\\'' +
", info='" + info + '\\'' +
'}';
}
}
测试执行调用
//测试注解注入 ;
@Test
public void test08(){
//读取配置文件;
ApplicationContext ac = new ClassPathXmlApplicationContext("spring-useannotations.xml");
//这里创建对象;
User user = ac.getBean("user",User.class);
User user2 = ac.getBean("user",User.class);
System.out.println(user.hashCode());
System.out.println(user2.hashCode());
System.out.println(user);
System.out.println(user2);
}
测试结果
无参构造方法调用了
无参构造方法调用了
1914301543
1157726741
User{id=7, account='小智', password='123654', add_ress='陕西汉中', info='备注:'}
User{id=7, account='小智', password='123654', add_ress='陕西汉中', info='备注:'}
3.使用注解注入属性的两种方式
(1) 使用@Autowired进行自动注入;
这个注解可以写在属性或者属性的set方法
上进行标注;
写在属性字段上的话,就不需要写属性的set方法
了;
-
在
@Autowired()
中还可使用required 属性
来标注这个标注的属性是否可以为null
;
默认为required = true
(不允许为null) -
该注解默认使用
按类型自动装配 Bean
;即byType; -
该注解也可配合注解
@Qualifier(value = "userDao")
进行使用;达到按属性名
装配;即byName;
这里的注解@Qualifier(value=" ")
中的value就对应注入属性的bean
中的id
;
(2) 使用JDK 提供的@Resource进行自动注入
此注解也是默认按类型(byType)注入;
也可以设置为按属性名称进行注入(byName);
按属性名称注入时需要设置;name属性
比如:@Resource(name = "userDao")
同样地,这里的name所配置的值,就对应这个属性的对应bean的Id
实际上,这些注解在标注类时;你默认不为他们进行赋值的话,实际生成的Id是默认按类名的首字母小写开始,驼峰式命名;
比如;这里使用这个服务层时就仅使用了@Service
进行标注;但是在测试时,我按这个类的首字母小写进行的驼峰式命名,也能进行创建这个类的对象;
使用xml进行配置注入和使用注解进行注入的区别
首先;从xml配置的角度来看,xml的配置是和主代码分离的,在项目中修改了xml中的配置后,不需要重新编译项目,重启服务器即可;但是,使用xml进行配置的话,若项目的业务配置过多,这也会影响到效率问题;
使用注解的话,比较直观,效率也比较高,但是注解和主代码是在一块的;它是以硬编码的方式进行配置;那么在修改了某个注解的使用时,就得重新编译项目
4.在spring中初步快速上手使用JDBC
本次先使用spring提供jdbcTemplate;
先在pom.xml
文件下配置需要使用到的jar工具包
<!-- spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
<!-- 阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!--mysql-context-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.22</version>
</dependency>
在resources
目录下编写database.properties
属性文件;数据库连接池需要配置的几个简易属性
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/day20211024_study_mybatis_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
user=root
pwd=123456
initialSize = 5
maxActive = 10
在resources
目录下创建配置spring-jdbc.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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!--标记开启注解扫描-->
<context:component-scan base-package="com.xiaozhi.spring">
</context:component-scan>
<!--配置引入数据源 database.properties-->
<context:property-placeholder location="database.properties"/>
<!--创建连接池配置-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${pwd}"/>
<property name="initialSize" value="${initialSize}"/>
<property name="maxActive" value="${maxActive}"/>
</bean>
<!--配置JdbcTemplate 引用数据源-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="druidDataSource"/>
</bean>
</beans>
用户实体类
这里的话,为了方便使用,直接用注解将User类注入spring容器,以及用注解为用户类的属性初始化赋值;
ID,在数据库是设置了主键自增的,这里就不初始化传值了;
//将用户类注入到spring容器中;且令其作用域为原型模式;
@Component(value = "user")
@Scope(value = "prototype")
public class User {
//用户ID,姓名,密码;地址,备注信息;
private Integer id;
@Value("小智RE0")
private String account;
@Value("123654")
private String password;
@Value("陕西汉中")
private String add_ress;
@Value("备注:")
private String info;
//初始化;
public User() {
System.out.println("无参构造方法调用了");
}
public User(String account, String password, String add_ress, String info) {
System.out.println("有参构造方法调用了");
this.account = account;
this.password = password;
this.add_ress = add_ress;
this.info = info;
}
//getset方法;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getAccount() {
return account;
}
public void setAccount(String account) {
this.account = account;
}
public String getPassword() {
return password动力节点Spring框架学习笔记-王鹤spring整合MyBatis
Spring框架学习笔记 --- [Spring框架整合Mybatis框架]
Spring框架学习笔记 ---[spring框架概念 , 初步上手使用Spring , 控制反转 & 依赖注入初步理解 ]