WEB应用程序开发--Spring框架注解讲解+SpringJDBC讲解与使用

注解方式实现

注解开发准备工作

注解需要的 jar 包 注解功能封装在 AOP 包中,导入 Spring aop jar

<!--开启spring注解扫描 -->
<context:component-scan base-package="com.qn.spring"/>

spring作用在类上的注解有@Component、@Responsity、@Service以及@Controller;
@Autowired和@Resource是用来修饰字段、构造函数或者设置方法,并做注入的。

Spring中包含4个主要的组件添加注解:

    1. @Controller:控制器,推荐给controller层添加此注解
    2. @Service:业务逻辑,推荐给业务逻辑层添加此注解
    3. @Repository:仓库管理,推荐给数据访问层添加此注解
    4. @Component:给不属于以上基层的组件添加此注解 作用
    @Component(value = "user") //<bean id="user" class="com.qn.spring.model.User"></bean>

注意:我们虽然人为的给不同的层添加不同的注解,但是在spring看来,可以在任意层添加任意注解

当注解作用在类上时,表明这些类是交给spring容器进行管理的,而当使用@Autowired和@Resource时,表明我需要某个属性、方法或字段,但是并不需要我自己去new一个,只需要使用注解, spring容器会自动的将我需要的属性、方法或对象创造出来。这就是通常所说的依赖注入和控制反转。

注解方式注入属性

@Autowired

@Autowired 是 Spring 提供的注解,可以写在字段和 setter 方法上。如果写在字段上,那么就不需要再写 setter 方法。默认情况下它要求依赖对象必须存在,如果允许 null 值,可以设置它的 required 属性为 false

注入的两种方式

1.byType 自动注入 "该注解默认使用按类型自动装配 Bean 的方式

@Autowired//自动注入
private Userdao userdao;
//自动寻找该类型进行自动注入

2.byName 自动注入
如果我们想使用按照名称(byName)来装配,可以结合@Qualifier 注解一起使用。
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的value 属性用于指定要匹配的 Bean 的 id 值

 @Autowired//自动注入
    @Qualifier(value = "userdao")
    private Userdao userdao;

3.JDK 注解@Resource 自动注入
Spring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名称匹配 Bean,也可以按类型匹配 Bean。默认按照 ByType 自动

@Resource(name = "userdao")
private Userdao userdao;

注解与 XML 的对比

注解优点: 方便,直观,高效(代码少,没有配置文件的书写那么复杂)。
注解缺点:以硬编码的方式写入到 Java 代码中,修改是需要重新编译代码的。
xml 优点是: 配置和代码是分离的,在 xml 中做修改,无需编译代码,只需重
启服务器即可将新的配置加载。
xml 的缺点是:编写麻烦,效率低,大型项目过于复杂。

Spring JDBC

Spring 是个一站式框架:Spring 自身也提供了控制层的 SpringMVC 和 持久层的 Spring JdbcTemplate

开发步骤

1.下载 Spring JdbcTemplate 的 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>

2.导入属性文件

  <!--spring读入属性文件-->
    <context:property-placeholder location="config.properties"></context:property-placeholder>
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
uame=root
pwd=root

config.properties配置如上

3.管理数据源对象

spring 管理与数据库链接 (数据源)

 <!-- 配置druid数据库连接对象-->
    <bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${driverClassName}"></property>
        <property name="url" value="${url}"></property>
        <property name="username" value="${uame}"></property>
        <property name="password" value="${pwd}"></property>
       <!-- <property name="initialSize" value="${initialSize}"></property>
        <property name="maxActive" value="${maxActive}"></property>-->
    </bean>
  <!-- spring提供jdbcTempate封装-->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="druidDataSource"></property>

在类中获得 JdbcTemplate

@Repository(value = "userDao")
public class Userdao {
    @Autowired
    JdbcTemplate jdbcTemplate;
}

JdbcTemplate 中常用的方法

execute:无返回值,可执行 ddl,增删改语句
update:执行新增、修改、删除语句;
queryForXXX:执行查询相关语句;

package com.qn.spring.dao;

import com.qn.spring.model.Admin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

@Repository(value = "userDao")
public class Userdao {
    @Autowired
    JdbcTemplate jdbcTemplate;
@Transactional(propagation = Propagation.REQUIRED)//传播行为
    public void save(){
        //使用spring对jdbc进行的封装类, 默认自动提交事务
        jdbcTemplate.update("insert into admin(account,password,sex)values (?,?,?)","jim","111","男");
        System.out.println("保存用户");

        //用于执行ddl语句对表结构操作的语句
       /* jdbcTemplate.execute("create table test(id int)");*/

        //查询
        //jdbcTemplate.queryForObject("select count(*) from admin",Integer.class);
        //按照序号查询
        Admin admin=jdbcTemplate.queryForObject("select * from admin where id=?", new Object[]{4}, new RowMapper<Admin>() {
            @Override
            public Admin mapRow(ResultSet resultSet, int i) throws SQLException {
                Admin admin1=new Admin();
                admin1.setId(resultSet.getInt("id"));
                admin1.setAccount(resultSet.getNString("account"));
                return admin1;
            }
        });
        System.out.println(admin);

        //集合查询
        List<Map<String,Object>> list=jdbcTemplate.queryForList("select *from admin");

        List<Admin> list1=jdbcTemplate.query("select * from admin",  new RowMapper<Admin>() {
            @Override
            public Admin mapRow(ResultSet resultSet, int i) throws SQLException {
                Admin admin1=new Admin();
                admin1.setId(resultSet.getInt("id"));
                admin1.setAccount(resultSet.getNString("account"));
                return admin1;
            }
        });
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值