spring注解方式实现配置

spring注解方式实现配置

注解:java中的注释方式,可以理解为是一个java标签,说明,配置一些用途信息。在运行时可以根据标签的内容进行执行。

  • 通过注解标签进行依赖注入时,POJO类中属性可以不写set方法
  • 对编写的代码在编译时或运行时进行检测

java注解(Annotation)

  • 是 JDK5.0 引入的一种注释机制。
  • java的内置注解
    • @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
    • @Deprecated - 标记过时方法。如果使用该方法,会报编译警告。例如:date.getYear()
    • @SuppressWarnings - 指示编译器去忽略注解中声明的警告。例如:List list = new ArrayList();

注解标签

在spring配置文件中引入context

xmlns:context="http://www.springframework.org/schema/context"
   
    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context.xsd

在spring配置文件中开启注解扫描功能

<!-- 开启Spring的注解扫描功能 -->      
       <context:component-scan base-package="com.wenhua.spring"/>

Component、Repository,Service能有创建对象的功能,

bean类   数据持久层   
    @Component(value="user") 
	@Scope(value="prototype")//默认单例 singleton
Dao类    数据访问层
    @Repository(value="userDao")
service类    服务层
    @Service(value="userService")
Attribute    属性
    @Autowired

spring-JDBC

  • 原始获得数据库连接,都是自己new对象
// 原始的数据库连接   import java.sql.Connection;
Connection connection = DriverManager.getConnection("驱动包","账号","密码");

//  spring自带jdbc
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("");

// 使用第三方的数据库连接管理组件(数据库连接池技术,dbcp,c3p0,jndi(tmcat),阿里巴巴)
DruidDataSource dataSource2 = new DruidDataSource();
dataSource2.setDriverClassName("");

spring的jdbc管理

  • 在pom.xml文件中导入jar包
  <!-- spring-context -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.2.RELEASE</version>
    </dependency>
  		
  		<!-- 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-connector-java -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.38</version>
		</dependency>
  • 创建properties文件
# jdbc config
# mysql
jdbc.driverName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis_db?characterEncoding=utf-8
jdbc.userName=root
jdbc.passWord=123456
jdbc.initialSize=10
jdbc.minIdle=5
jdbc.maxActive=15
  • 创建db.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 
                    http://www.springframework.org/schema/beans/spring-beans.xsd
                    http://www.springframework.org/schema/context
                    http://www.springframework.org/schema/context/spring-context.xsd">
          
         <!-- 开启Spring的注解扫描功能 -->  
       	<context:component-scan base-package="com.wenhua.spring"/>         
                    
         <!-- 加载配置文件 -->
         <context:property-placeholder location="config.properties"/>
         
         <!-- 相当于new了一个对象 Spring管理阿里数据源对象的创建,由此数据源对象管理创建数据库连接对象(Connection) -->
        <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        	<property name="driverClassName" value="${jdbc.driverName}"></property>
        	<property name="url" value="${jdbc.url}"></property>
        	<property name="username" value="${jdbc.userName}"></property>
        	<property name="password" value="${jdbc.passWord}"></property>
        	<property name="initialSize" value="${jdbc.initialSize}"></property>
        	<property name="minIdle" value="${jdbc.minIdle}"></property>
        	<property name="maxActive" value="${jdbc.maxActive}"></property>
        </bean>
               
        <!-- 配置JDBC模板 -->   
        <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="dataSource"></property>        
        </bean>  
        
 </beans>
  • 需要使用数据库连接时,自需在类中注入JDBC模板即可
@Autowired
	private JdbcTemplate jdbcTemplate;
  • spring中的语句
    • jdbcTemplate.execute(""); ddl语句创建修改数据库
    • jdbcTemplate.update(""); 更新数据库信息,用于增删改语句
    • jdbcTemplate.query(psc, rse); 查询数据库信息
      • 返回一条记录
        • jdbcTemplate.queryForObject(sql, requiredType);
        • jdbcTemplate.queryForMap(sql, args);
      • 返回多条记录
        • jdbcTemplate.query(psc, rowMapper);
        • jdbcTemplate.queryForList(sql);
      • 统计数据记录
        • jdbcTemplate.queryForObject(sql, requiredType);

可以通过在POJO类中的无参构造方法中添加输出语句,查看原型还是单例模式

// 添加修改表结构
// jdbcTemplate.execute(sql);
		String sql = "insert into t_user(name,sex,age) values(?,?,?)";
		int row = jdbcTemplate.update(sql,
				user.getName(),user.getSex(),user.getAge());
		System.out.println(row);

//查询   指定条件查询返回一条记录   列表查询返回多条记录     统计查询,最大值,最小值,返回整数
// 返回一条记录  
 	// jdbcTemplate.queryForObject
		String sql = "select * from t_user where id = 2";
		User user = jdbcTemplate.queryForObject(sql,(resultSet, rowNum) -> {
            User us = new User();
            us.setId(resultSet.getInt("id"));
            us.setName(resultSet.getString("name"));
            us.setSex(resultSet.getString("sex"));
            us.setAge(resultSet.getInt("age"));
            us.setOper(resultSet.getDate("oper"));
            return us;
        });
		System.out.println(user);
	// jdbcTemplate.queryForMap(sql, args);
		int elem = 2;
		String sql = "select * from t_user where id = ?";
		Map<String, Object> list =  jdbcTemplate.queryForMap(sql,elem);
		System.out.println(list);
// 返回多条语句 
	//以前用法  import org.springframework.jdbc.core.RowMapper;
	 String sql = "select * from t_user";
	 public void find(){
		List<User> users = jdbcTemplate.query(sql,new RowMapper<User>() {
		@Override
		public User mapRow(ResultSet resultSet, int rowNum) throws SQLException {
				// 注意此处应该用原型模式,也就是多例模式
				User user = new User();
				user.setUserId(resultSet.getInt("id"));
				user.setUserAge(resultSet.getInt("age"));
				user.setUserName(resultSet.getString("name"));
				user.setUserSex(resultSet.getString("sex"));
				user.setPerTime(resultSet.getDate("oper"));
				return user;
			}
		});
		System.out.println(users);
  // 最新表示方法
    String sql = "select * from t_user";
	@SuppressWarnings("unchecked")
	List<User> list =  jdbcTemplate.query(sql,(resultSet, rowNum) -> {
            User user = new User();
            user.setId(resultSet.getInt("id"));
            user.setName(resultSet.getString("name"));
            user.setSex(resultSet.getString("sex"));
            user.setAge(resultSet.getInt("age"));
            user.setOper(resultSet.getDate("oper"));
            return user;
        });
		System.out.println(list);
   // jdbcTemplate.queryForList(sql, args);
    	int age = 21;
		String sql = "select * from t_user where age = ?";
		List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, age);
		System.out.println(list);
//返回整数 jdbcTemplate.queryForObject(sql, requiredType);
		String sql = "select count(*) from t_user";
		int count = jdbcTemplate.queryForObject(sql,Integer.class);
		System.out.println(count);

spring的事务管理

spring的事务管理可以说就是在aop思想的基础上实现的,

  • 作用:确保调用方法时要么执行成功,要么回滚到原始状态.

  • **位置:**一般将spring的事务管理机制放在service层,是因为直接在dao层时,是单独的操作,而service层才是一系列操作,是一个完整的业务。

  • 配置:在需要spring事务管理的配置文件中添加响应的tx约束

xmlns:tx="http://www.springframework.org/schema/tx"

	http://www.springframework.org/schema/tx    					http://www.springframework.org/schema/tx/spring-tx.xsd

通过xml配置实现

  • 第一步:配置spring事务管理类,并注入数据源
 <!-- 第一步:配置jdbc事务管理器 -->
       <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       		<property name="dataSource" ref="dataSource"></property>  
       </bean>
  • 第二步:基于xml配置文件的方式实现事务管理
       <!-- 第二步:基于xml配置文件的方式实现事务管理 -->
        <tx:advice id="txadvice" transaction-manager="transactionManager">
		   <tx:attributes>
		     <tx:method name="save*" propagation="REQUIRED"/>   
		     <!-- 为dao层方法添加事务管理
		     <tx:method name="insert*" propagation="REQUIRED"/>  --> 
		   </tx:attributes>
	 	</tx:advice>
  • 第三步:用xml方式配置事务到具体类中方法
<aop:config>
		  <!-- 配置在Dao层 -->
		  	<aop:pointcut expression="execution(* com.wenhua.spring.dao.UserDao.insert(..))" id="insert"/> 
		  	<aop:advisor advice-ref="txadvice" pointcut-ref="insert"/> 
		  	<!-- <aop:pointcut expression="execution(* com.wenhua.spring.service.UserService.save(..))" id="save"/>
		  	<aop:advisor advice-ref="txadvice" pointcut-ref="save"/> -->
		 </aop:config>

通过注解标签实现

  • 第一步:配置jdbc事务管理器
  <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
       		<property name="dataSource" ref="dataSource"></property>  
</bean>
  • 第二步:开启事务注解
	<tx:annotation-driven transaction-manager="transactionManager"/>
  • 在需要控制事务的类或方法进行注解
@Transactional
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值