struts2+hibernate4+spring4整合登陆与增删改查

 

1.导入开发需要的jar包

struts2+hibernate4+spring4整合登陆与增删改查_第1张图片struts2+hibernate4+spring4整合登陆与增删改查_第2张图片

2.将struts.xml、spring的xml文件放在src下,配置基本环境

*web.xml中配置spring的监听器和文件位置

struts2+hibernate4+spring4整合登陆与增删改查_第3张图片

web.xml中配置struts2

struts2+hibernate4+spring4整合登陆与增删改查_第4张图片

在web.xml中插入


	
		openSessionInView
		org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
	

	
		openSessionInView
		/*
	

这段代码放在struts配置之后

3.spring与struts2的整合

*在struts.xml中添加


	

*创建action

其中BaseAction作为所有Action的父类,UserAction继承BaseAction,实现ModelDriven接口来接收界面传过来的值,且必须重写的方法:

struts2+hibernate4+spring4整合登陆与增删改查_第5张图片

BaseActio类中,在此类中实现request,session,application,response的获取,系统中所有的Action类都必须要继承BaseAction类

public class BaseAction extends ActionSupport{
	
	public HttpServletRequest getRequest(){
		return ServletActionContext.getRequest();
	}
	
	public HttpServletResponse getResponse(){
		return ServletActionContext.getResponse();
	}
	
	public HttpSession getSession(){
		return getRequest().getSession();
	}
}

*在struts.xml中添加action标签

struts2+hibernate4+spring4整合登陆与增删改查_第6张图片

 

*在app-context.xml中添加注册action组件

注意:action标签中class的名称应该与bean标签的id名称一致,bean标签中class写action的具体路径,我在这里出错,不仔细,UserAction写成USerAction,导致运行时报错找不到类

*创建一个index.xml登陆界面

form表单中action中名称应该与struts.中name名称一致

*整合后获取spring帮忙创建的service类对象的方法,需先在注册action组件添加注入标签,上面的图中有

public UserService getUserService() {
		return userService;
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

 

 UserAction的完整代码

public class UserAction extends BaseAction implements ModelDriven{

	private UserService userService;
	private User user = new User();
	
	public UserService getUserService() {
		return userService;
	}

	public void setUserService(UserService userService) {
		this.userService = userService;
	}


	public String login(){
		return null;
	}
	
	//界面传值进来的方法
	@Override
	public User getModel() {
		// TODO Auto-generated method stub
		return user;
	}
	 
}

至此整合完成

4.spring与hibernate的整合(此处用的方法是不需要hibernate.xml配置文件的方法)

在app-context.xml中配置连接数据库的相关信息:

* 连接数据库基本参数:

* Hibernate常用属性:

* 连接池:

* 映射:

代码如下:


	
		
		
		
		

		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	

	
	
		
		
		
		
			
				classpath*:cn/edu/abtc/model/User.hbm.xml
			
		
		
		
		
			
				true
				utf-8
				org.hibernate.dialect.MySQL5InnoDBDialect
				true
				update
			
		
	

	
	
	
		
	
	
	
	
	
	
	

 在model包下创建User类用于存放数据库对应的数据

public class User {
	
	private String id;
	private String name;
	private String username;
	private String password;
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
		
}

映射文件:


    
    
        
        
            
            
        
        
        
        
        
    

至此spring与hibernate结合完成

5.修改UserAction中login的方法完成登录操作

struts2+hibernate4+spring4整合登陆与增删改查_第7张图片

6.创建UserService接口

public interface UserService {

	public boolean checkLogin(User user);
	
}

创建UserService的实现类UserServiceImpl

public class UserServiceImpl implements UserService{
	
	private UserDao userDao;
	

	public UserDao getUserDao() {
		return userDao;
	}


	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}



	@Override
	@Transactional
	public boolean checkLogin(User user) {
		
		return userDao.checkLogin(user);
	}
	
}

在app-context.xml中配置创建UserServiceImpl对象的bean

 6.创建UserDao的接口

public interface UserDao {

	boolean checkLogin(User user);
	
}

创建UserDao的实现类UserDaoImpl

public class UserDaoImpl implements UserDao{
	
	private SessionFactory sessionFactory;
	
	
	public SessionFactory getSessionFactory() {
		return sessionFactory;
	}

	public void setSessionFactory(SessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	
	public boolean checkLogin(User user) {
		String hql = "from User u where u.username = '" + user.getUsername()
				+ "' and u.password = '" + user.getPassword() + "'";
		List l = this.getSessionFactory().getCurrentSession().createQuery(hql).list();
		if (l.size() > 0) {
			return true;
		}
		return false;
		
	}
	
}

checkLogin方法中,需注意hql语句,这里User是指的类,是区分大小写的,后面的小u测试了一下,有无都可以运行

在app-context.xml中配置创建UserDaoImpl对象的bean

struts2+hibernate4+spring4整合登陆与增删改查_第8张图片

app-context.xml中的全部代码;




	
	
		
		
		
		

		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	

	
	
		
		
		
		
			
				classpath*:cn/edu/abtc/model/User.hbm.xml
			
		
		
		
		
			
				true
				utf-8
				org.hibernate.dialect.MySQL5InnoDBDialect
				true
				update
			
		
	

	
	
	
		
	
	
	
	
	
	
	
	
	
	
	
	
	
		
	
	
	
	
	
		
	
	
	
	
	
		
	
	

登陆操作完成

7.查询所有人信息的功能:

UserAction中添加userList()方法

//用户列表显示
	public String userList() {
		List list = userService.userList();
		getRequest().setAttribute("user", list);//传值到界面
		return this.SUCCESS;
	}
	

UserService与UserServiceImpl代码

@Override
	public List userList() {
		
		return userDao.userList();
	}

UserDaoImpl中的代码,添加userList()方法:

public List userList() {
		String hql = "from User ";
		@SuppressWarnings("unchecked")
		List list = this.getSessionFactory().getCurrentSession().createQuery(hql).list();
		return list;
	}

struts.xml中的代码;


    	
            /user/{1}.jsp
        
    

userList.jsp中显示查询信息的代码:

struts2+hibernate4+spring4整合登陆与增删改查_第9张图片

 此时运行,会报如下错误:

Could not obtain transaction-synchronized Session for current thread

这个错误的原因是因为事物层在返回list后就会自动关闭,二后面action又去调用list,显示已经不行,

在web.xml中添加如下代码可随时调用;


	   SpringOpenSessionInViewFilter
	   org.springframework.orm.hibernate4.support.OpenSessionInViewFilter
  
  
    SpringOpenSessionInViewFilter
    /*
  

运行成功

8.用户添加功能的实现

和前面实现大致都相同,就看看dao的方法和遇到的一些错误:

@Override
	public void userAdd(User user) {
//		getHibernateTemplate().save(user);
		System.out.print(user+"dddd");
		this.getSessionFactory().getCurrentSession().save(user);
	}

a.插入的save方法中,当主键设置了自增且不是int类型时,会报错,因为自增只允许int类型

b.存入数据,页面跳转成功,查询数据库时,数据没有存入成功,

解决:在service的实现类中添加注释 @Transactional

struts2+hibernate4+spring4整合登陆与增删改查_第10张图片

存入成功

9.解决数据库乱码问题

我的问题是,存入数据库和显示数据库数据时不能显示中文

a.保证jsp或html时utf-8

b.保证数据库和表的编码格式都是utf-8

修改后即可解决问题;

我还有的问题是不能正常安装mysql5.7,每次在start service时就会报错

重装很多次都没有解决,原因是:最先前的mysql没有卸载干净

参考方法可https://blog.csdn.net/cxy_Summer/article/details/70142322

卸载完后重装则不会出现这个问题

你可能感兴趣的:(struts2+hibernate4+spring4整合登陆与增删改查)