SSH整合之全注解

使用注解配置,需要我们额外引入以下jar包

aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOgAAABGCAIAAABJ3U+xAAAFgUlEQVR4nO2bT2/cRByG/RH6FfotYI8c8xEqceFgwZkjPbEVILWizpZWEEAoqCKR0pRNoC4SFCQOFVIPPdByqKGAVJGoIlG0IbvrOJI5eNc7/z2zm9j+Zd5HP1XbeJzxn2dnZjd+g3zKKx+9QKFIVJ7nAcRFkSuIiyJZanFzAFqJs7g/xR8oq75DBmA+cdPjE6GebL91Tt1Nok4QdKKk6eMAAs7ifv/t1VGajdOTcZpNX5w8e3D5aZvcjcNgikk6i2YQt6U4i3t/6/rROFu58+jGVw+vffHzeys/DsfZX79cf/bg8pPtN+9vfVjfsWtIok4Yz17rvLNsBtqJs7jbd3uDo+xwmA2G2eEwOzzKDoez2v66V9+x25BEnSAoBV20GWgNzuJubtw8OMru/PB0/btfv/zmMTv0HvyXbW7c1PeVRJ1yamYlmc3Y5U/jMAjCeLZDJ0q4/a0dW1jcOGTHYvUpFG3iYhsG7lpwFndt/eO9wfHe4Hh/cLwn1dr6J7qekiic3lJ2ZubEiKPJq8Llyc9LWyaqxKGtuqcw3rLHpzmF6TsPI3aN2Iq7dGWTLeWI+/IgXb39mVW3xYiaa53hxzlRVWGrhDBSL9RM21d5Ci7vJHBa2Ip74bV32NrZT4X6Zz/d2U8/XV01dMZ8ii/v9NQeXg7Giul/mQZJ1JFGY7V+xeZKpwzNVG8hcbVQ9UYCp4/DUuH1tTfYkkfcF/+mtz6/remouONTNwQxS/3YyddK3GqEX+XajOlaewoQt34cxA2uLLH198uxXNHKurofxWccSRNmxm2juPpTgLj1Yyvuw7dflasca//cHT3fHT3fHV+9taHuh10GTsbXyRq3/LwjDm5zihuHzJ78GoA9CMtmgriqU4C4TWAr7r1LF3+7tsTWvUsXf98Z/bEzKv4tXrx/466uJ+6jkPjJRlykLjTisutebhTlB3q7Zvy3CvpTgLj1Yi3u0gW5ur2tbq/f7fXfXe53e/3u8lZ3ud/ASZwllisNUDN4rNGM03Ia1AfENYJFQFuBuGrEv9aBlgFxAUkgLiAJxAUkgbiAJBAXkATiApI4i4t4OmgD84jrUzzdH4gFRp3FJRFP9wdvg/jO4rY/nu4PPgfxncUlFk/3B8+C+M7iEomna+ZG7hlc6SDsenQ7Nm2PE4M0OyquSQWeBfGdxSUQT4/DgL8FkXI/fta079Hh2Ew9JvzdF9IZimtixLsgvq24dOLpunuj2MmQGzP0aN3S3KO42pxtcpjN/Q3i24pLJp6uu+vKn8+VcrNtWdGjuFl0WrwmCOJzOCwVaMTTz4O46mtSiVdBfAdxicTTddfWYqlwuuLaLBUM4krXpBKvgvi24tKJp0uzYRyyEzC/GhW/x7Dp0b6lsUe9uJprIuF1EN9WXErxdP6Xar5lEufgsxDX2KNpxLX8e5jPQXxrcX2Np/sDrSA+HmsEBcSC+BAX5HnepkWAHRDXd4gG8SEuIAnEBSSBuIAkEBeQBOICkkBcQBJncRFPB21gHnERTz8bzk2QsQ6cxUU8XcDbgHizOItLIZ5e3+MiPgfEm8VZXArx9Iaec/IsIN4szuK2PJ7Op8G5J/rFULUhxFWR7zL17U9AvFmcxSUQT5dGXEWomutWDqprNpnwLiDeLLbi0omn5xpxxSf/uU75iKNmkxJ/A+LNYisumXi6Ym9JCGE9wR6QYRMC4m3CYalAI56u2FstrtqwxT45eRUQbxYHcYnE0+W95ZttuPsLieFVQLxZbMUlFE+Xb658s8X5mvmi1bBJ1ZG/AfFmsRWXaDxdNX5JxyMtWQ2b9GclLFzPf0C8WazFRTz97KEVEG8WPNbYHogFxJsF4rYGLAJcqBAXhWp5QVwUyYK4KJLFiQsAIf4HV9aOppzzgFsAAAAASUVORK5CYII=" alt="" />

aaarticlea/png;base64,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" alt="" />

我们下面从实体层开始替换注解

package cn.yxj.beans;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table; @Entity
@Table@Table(name="stock")
public class Stock { @Id
@GeneratedValue
@Column(name="sid" )
private int sid;
private String sname;
private int count; public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
} public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}

Dao层替换 给实现类添加注解即可

package cn.yxj.dao.impl;

import java.io.Serializable;
import java.util.List; import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.stereotype.Repository; import cn.yxj.beans.Stock;
import cn.yxj.dao.StockDao; @Repository("stockDao")  //它用于将数据访问层(DAO 层 ) 的类标识为 Spring Bean
public class StockDaoImpl implements StockDao{ @Autowired
private SessionFactory sessionFactory; //添加股票
public int addStock(Stock stock) { Serializable count = sessionFactory.getCurrentSession().save(stock);
return ((Integer)count).intValue();
} public List<Stock> getAllStock() {
String sql="from Stock ";
List<Stock> list = sessionFactory.getCurrentSession().createQuery(sql).list();
return list;
} public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}

Service层也是替换实现类 使用注解

package cn.yxj.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import cn.yxj.beans.Stock;
import cn.yxj.beans.StockException; import cn.yxj.dao.StockDao;
import cn.yxj.service.StockService; @Service("service")
public class StockServiceImpl implements StockService{ //植入Dao对象
@Autowired
@Qualifier("stockDao")
private StockDao stockDao; @Transactional
public int addStock(Stock stock) {
return stockDao.addStock(stock);
} public List<Stock> getAllStock() { return stockDao.getAllStock();
} public StockDao getStockDao() {
return stockDao;
} public void setStockDao(StockDao stockDao) {
this.stockDao = stockDao;
} }

Action层 使用注解

package cn.yxj.action;

import java.io.UnsupportedEncodingException;
import java.util.List; import javax.annotation.Resource; import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; import cn.yxj.beans.Stock;
import cn.yxj.service.StockService; import com.opensymphony.xwork2.ActionSupport; @Controller
@Scope("prototype")
@Namespace("/stock")
@ParentPackage("struts-default")
public class AddStockAction extends ActionSupport{
private Stock stock;
//植入Service对象
@Resource
private StockService stockService; @Action(value="addStockAction",results={@Result(name="success",location="/addSuccess.jsp")})
public String addStock() throws UnsupportedEncodingException{ //stock.setSname(new String(stock.getSname().getBytes("iso-8859-1"),"utf-8"));
int addStock = stockService.addStock(stock);
System.out.println("添加股票 "+addStock); return SUCCESS;
} public Stock getStock() {
return stock;
} public void setStock(Stock stock) {
this.stock = stock;
}
public StockService getStockService() {
return stockService;
} public void setStockService(StockService stockService) {
this.stockService = stockService;
} }

这里我们需要注意applicationContext.xml配置文件中的配置信息

引入包扫描器

 <!-- 包扫描器 -->
<context:component-scan base-package="cn.yxj"></context:component-scan>

将小配置文件的引入换为以下形式

<property name="packagesToScan" value="cn.yxj.beans">

如果用上面的扫描器,我们必须保证sessionFactory的为Hibernate5或者为以下形式

Spring用注解配置事务

按以上配置配即可

SSH整合之全注解的更多相关文章

  1. SSH框架整合(全注解)

    全部jar包    目录结构  配置案例 package cn.yzu.Tbook.action; import javax.annotation.Resource; import org.apach ...

  2. ssh整合随笔(注解方式,Spring 管理action)

    Web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=" ...

  3. spring boot2整合dubbox全注解

    前题 dubbox是dubbo的一个升级版,简单说就是本来dubbo是阿里开发的,现在阿里不维护了,当当网拿过去继续开发.本来阿里的dubbo维护到2.6版本,而再高版本的都是当当网维护的就叫成dub ...

  4. orcal 数据库 maven架构 ssh框架 的全注解环境模版 maven中央仓库批量删除lastupdated文件后依然是lastupdated解决方法 mirror aliyun中央仓库

    批量删除文件,得用批处理文件,文件名随便,路径改成你的Repository,代码如下 rem 这里写你的仓库路径 set REPOSITORY_PATH=d:\repo rem 正在搜索... for ...

  5. SSH整合总结(xml与注解)

    本人自己进行的SSH整合,中间遇到不少问题,特此做些总结,仅供参考. 一.使用XML配置: SSH版本 Struts-2.3.31 Spring-4.3.5 Hibernate-4.2.21 引入ja ...

  6. Hibernate 注解时 hibernate.hbm.xml的配置方法 以及与SSH整合里的配置方式

    ①纯Hibernate开发: 当你在Bean中写入注解后,需要告诉hibernate哪些类使用了注解. 方法是在hibernate.hbm.xml文件中配置 <!DOCTYPE hibernat ...

  7. ssh整合之七注解结合xml形式

    1.我们之前的纯xml的方式,我们的配置文件很多,我们可以使用注解结合xml的方式进行开发,这样的话,我们的配置文件,会少很多,同时,我们可以直接在类中看到配置,这样,我们就可以快速地搭建一个ssh整 ...

  8. SSH全注解开发

    web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&quo ...

  9. 20.SSM整合-全注解开发

    全注解开发 1.将SpringMVC改为注解 修改spring-mvc.xml 2.将Spring改为注解 将Service改为注解,完成Dao的注入 将事务以注解方式织入到Service 1.修改s ...

随机推荐

  1. yar框架使用笔记

    Yar是什么 Yar是并行的RPC框架(Concurrent RPC framework),Laruence开发. 安装 下载地址:http://pecl.php.net/package/yar wi ...

  2. PHP分布式中Redis实现Session

    方法一:找到配置文件php.ini,修改为下面内容,保存并重启服务 session.save_handler = redis session.save_path = "tcp://127.0 ...

  3. Highchart.js

    Highcharts所有的源代码及例子均可通过官网下载得到.初学者只需要简单的修改官方提供的例子即可了解Highcharts. 下载 最新版本:Highcharts 3.0.10.Highstock ...

  4. Python标准库的threading.Thread类(转自别人的翻译)

    这个类表示在单独的控制线程中运行的活动.有两种方法可以指定这种活动,给构造函数传递回调对象,或者在子类中重写run() 方法.其他方法(除了构造函数)都不应在子类中被重写.换句话说,在子类中只有__i ...

  5. QUOTED_IDENTIFIER 选项对 index 的影响

    在修改或创建Index时,有时会收到一些Error Message,指明Set options设置错误,最常见的选项是:SET QUOTED_IDENTIFIER 选项 当创建或修改的index包含c ...

  6. jQuery控制tabs打开的数量

  7. AngularJS之Scope及Controller(一)

    前言 之前有接触过基本的AngularJS,未过多涉及,于是乎本系列我们来着重讲讲AngularJS,对AngularJS中重要的几大内容进行梳理并进行一些小的例子的书写.在之前项目过程中用到过ava ...

  8. 最好的简明NodeJS学习材料

    http://www.nodebeginner.org/index-zh-cn.html http://debuggable.com/posts/understanding-node-js:4bd98 ...

  9. 基于表的数据字典构造MySQL建表语句

    表的数据字典格式如下: 如果手动写MySQL建表语句,确认麻烦,还不能保证书写一定正确. 写了个Perl脚本,可快速构造MySQL脚本语句. 脚本如下: #!/usr/bin/perl use str ...

  10. EntityFramework 分页问题探讨之 OrderBy

    应用场景 最近被应用程序中页面加载慢的问题所折磨,看似容易的问题,其实并不容易(已经持续两天时间了),经过"侦查",发现了两个"嫌疑犯": EntityFram ...