然后怎么写可以把页面的数据存入数据库中
模块说明:Spring是一站式的框架,对web、service、dao层都提供了实现技术,本模块就是使用Spring框架对各层实现技术的搭建过程。。
登录模块功能简介:从实现上将模块分为web层、Dao层、Service层,数据库使用mysql 。 。
1.创建需要用到的数据库表
2.使用Spring的JDBC模板JdbcTemplate完成dao层的设计(也就是完成对数据库的访问操作)
本模块涉及到对两张数据表的操作,故有两个dao的类,分别对每个表执行相应的操作:
UserDao.java
@Repository(value="userDao") //通过Spring注解定义一个Dao
public class UserDao{
@Autowired
private JdbcTemplate jdbcTemplate;
//根据用户名和密码查询是否在数据库中存在记录,若存在返回1,否则返回0
public int getMatchCount(String userName,String password){
String sql = "select count(*) from spring_login "+
" where username=? and password=?";
return jdbcTemplate.queryForObject(sql, new Object[]{userName,password},Integer.class);
}
//根据用户名查找定位到指定的用户
public User findUserByUserName(final String userName){
String sql = "select userid,username,credits "
+" from spring_login where username=?";
final User user = new User();
jdbcTemplate.query(sql,new Object[]{userName},
new RowCallbackHandler(){
public void processRow(ResultSet rs) throws SQLException{
user.setUserid(rs.getInt("userid"));
user.setUsername(userName);
user.setCredits(rs.getInt("credits"));
}
});
return user;
}
//更新用户信息
public void updateLoginInfo(User user){
String sql = "update spring_login set last_visit=?,credits=? "
+" where userid=?";
jdbcTemplate.update(sql, new Object[]{user.getLast_visit(),user.getCredits(),user.getUserid()});
}
}
LoginLogDao.java
@Repository(value="loginLogDao")
public class LoginLogDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void insertLog(LoginLog loginLog){
String sql = "insert into spring_loginlog(userid,ip,login_datetime)"
+" values(?,?,?)";
Object[] args={loginLog.getUserid(),loginLog.getIp(),loginLog.getLoginDate()};
jdbcTemplate.update(sql, args);
}
}
3.在完成对数据库操作的dao层编码后,编写service层代码,用来调用dao层,实现业务逻辑处理
UserService.java
@Service(value="userService")
public class UserService {
@Autowired
private UserDao userDao;
@Autowired
private LoginLogDao loginLogDao;
//根据用户名密码判断数据库中是否有对应的记录
public boolean hasMatchUser(String userName,String password){
int matchCount = userDao.getMatchCount(userName, password);
return matchCount > 0;
}
//按用户名查找用户
public User findUserByUserName(String userName){
return userDao.findUserByUserName(userName);
}
public void loginSuccess(User user){
user.setCredits(5+user.getCredits());
LoginLog loginLog = new LoginLog();
loginLog.setUserid(user.getUserid());
loginLog.setLoginDate(user.getLast_visit());
userDao.updateLoginInfo(user);
loginLogDao.insertLog(loginLog);
}
}
4.接下来就到了web层的编码, 使用SpringMVC
LoginController.java
@Controller //标注成为一个Spring MVC的controller
public class LoginController {
@Autowired
private UserService userService;
//负责处理/index.html的请求
@RequestMapping(value="/index.html")
public String loginPage(){
return "login";
}
//负责处理/loginCheck.html的请求
@RequestMapping(value="/loginCheck.html")
public ModelAndView loginCheck(HttpServletRequest request,LoginCommand loginCommand){
boolean isValidUser = userService.hasMatchUser(loginCommand.getUserName(), loginCommand.getPassword());
if(!isValidUser){
return new ModelAndView("login","error","用户名或密码错误。");
}else{
User user = userService.findUserByUserName(loginCommand.getUserName());
user.setLast_visit(new Date());
userService.loginSuccess(user);
request.getSession().setAttribute("user", user);
return new ModelAndView("main");
}
}
}
以上就已经是完成了登录模块的实现,其上提供的都是模块中最核心的类。至于配置文件就不再一一给出,下面给出Spring的配置文件:
applicationContext.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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 指定扫描类包,使相应注解生效 -->
<context:component-scan base-package="com.baobaotao"/>
<!--配置数据源DataSource-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!--指定连接数据库的驱动-->
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<!--指定连接数据库的URL-->
<property name="url" value="jdbc:mysql://localhost:3306/mytest"></property>
<!--指定连接数据库的用户名-->
<property name="username" value="root"></property>
<!--指定连接数据库的密码-->
<property name="password" value="546784"></property>
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource">
<ref bean="dataSource"/>
</property>
</bean>
<!-- 通过aop配置提供事务增强,让service包下的所有bean的所有方法拥有事务 -->
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution(* com.baobaotao.service..*(..))" id="serviceMethod"/>
<aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"/>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
</beans>
也可以参考这篇博文:https://blog.csdn.net/daleiwang/article/details/8100800