简单基于idea使用注解实现SSH集成

简单使用注解实现SSH集成

上一篇文章讲到了学习使用idea搭建SSH框架,并实现简单的登录功能
但是上文中没有写到User这个实体类,这篇文章补上注解版的实体类。

运用的Oracle数据库中的数据表:User

--创建user表
CREATE TABLE USER(
	ID NUMBER(4) NOT NULL,
	NAME NVARCHAR2(50),
	PASSWORD NVARCHAR2(50)
)
--导入数据
INSERT INTO USER (ID,NAME,PASSWORD) VALUES(1000,'admin','123456');
INSERT INTO USER (ID,NAME,PASSWORD) VALUES(1001,'blue','123456');
INSERT INTO USER (ID,NAME,PASSWORD) VALUES(1002,'cyan','111111');
COMMINT;

首先使用idea超级强大的自动生成实体类的功能创建好实体类
如果要引入注解包的话,需要加入jar包:hibernate-jpa-2.0-api-1.0.1.Final.jar,否则会报错。(明天或者后天会写到使用maven构建工具搭建SSH框架的web项目,相关于jar包)

//创建实体类
import javax.persistence.*; //引入注解包
@Entity
@Table(name="user")
public class User{
	@Id
	 @Column(name="ID")
	private Integer id;
	private String name;
	private String password;
	
	//省略相关的getter,setter方法和其他自动生成的方法
}

以上的改造就完成了Spring容器对Hibernate注解的支持,减少了对ORM映射文件的依赖。(可以不创建hibernate映射文件

其次在Spring配置文件中,在定义SessionFactory Bean的<bean>中加载由注解定义的持久化类
实例代码如下:

<!--省略Spring其他的配置-->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
	<!--hibernate配置参数-->
	<property name="hibernateProperties">
		<pros>
			<prop key="hibernate.dialect">
				org.hibernate.dialect.Oracle10gDialect
			</prop>
			<prop key="hibernate.show_sql">true</prop>
			<prop key="hibernate.format_sql">true</prop>
		</pros>
	</property>
	<!--添加对象关系映射-->
	<property name="mappingDirectoryLocations">
		<list>
			<value>classpath:cn/cyan/entity/</value>
		</list>
	</property>
</bean>

然后,开启Spring注解扫描。(我们需要在使用前需引用context命名空间:xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd")。
实例代码如下:

<context:component-scan base-package="cn.cyan"/>

还有需要配置的是:注解在事务处理方面也可以进行配置,实例代码如下:

<!--开启事务的注解支持-->
<tx:annotation-driven transaction-manager="tx-Manager"/>
<!--去掉aop切面配置,在这里省略其他的配置-->

不过一般个人不是很喜欢注解事务,多写写相关aop代码也有助于记忆哈

在DAO,业务类还有Action类中使用注解代码。
DAO的关键代码如下:

@Repository
public class UserDaoImpl extends HibernateDaoSupport implements UserDao{
	//无参构造方法
	public UserDaoImpl(){}
	//使用注解构造注入
	@Autowired
	
	@Override
	public List<User> login(String username,String password){
		String hql = "from User where name=? and password=?";
		return this.getHibernateTemplate().find(hql,username,password);
	}
}

业务类的实例代码如下:

@Service
@Transactional  //使用注解处理事务
public class UserBizImpl implements UserBiz{
	@Autowired
	private UserDao userDao;

	//登录方法省略。。。
}

Action类的实例代码中,提到了一个Spring在配置Action Bean时出现的scope属性,Scope是指作用域,分别有session,request,global session,property,singleton(默认)

  • singleton:是默认的采用的作用域,相当于单例模式,采用这个方式可以大大减少创建对象的开销,提高运行效率;
  • property:对于存在线程安全问题的组件,,比如Struts2的Action,则不能使用singleton模式,可以使用property,它是在每次获取该组件时,都会创建一个新的实例,避免因为共用同一个实例而产生问题。
  • request:对于每一次请求都创建一个新的实例,避免受到上一次请求状态的影响,Atruts2的Action也可以采用该作用域;
  • session:是指在会话范围内共享Bean的实例,实现有状态的操作;
  • global session在这里就不做介绍了,一般用的少,我这里用的是session,节约资源。

代码如下:

@Controller
@Scope("session") 
public class UserAction extends ActionSupport{
	@Autowired
	private UserBiz userBiz;
	
	//省略其他属性和登录方法。。。
}

最后,修改struts.xml和spring的applicationContext.xml
实例代码如下:

<!--修改struts.xml中的Action配置-->
<action name="userAction" class="userLoginAction">
<!--省略result-->
</action>

删除 有关配置dao,业务层和相关配置Action的代码(留着也没关系,不过占用资源,最好养成良好的编程习惯哈)

注解差不多到这里可以了,本来是可以一起写的,由于时间的原因推到了今天emmm,下次一定写快点!
有什么不足或者错误的地方欢迎指正!谢谢大家!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值