spring mvc加上jdbctemplate实现把数据存入到数据库中

然后怎么写可以把页面的数据存入数据库中

 

模块说明: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