黑马旅游网学习记录(二)
今天学习三层结构的逻辑实现:dao,service,servlet;
servlet层的代码实现
在RegistUserServlet中的doPost 函数中写下如下的代码:
/**
* 首先需要明白这一层是用来干嘛的,servlet是用来对表单提交注册后的行为进行反应的。
* 也就是说,当浏览器前端提交表单以后,就会进入到RegistUserServlet中
* 那么步骤就明显了:
* 1、获取前端发送的数据
* 2、将该数据封装进实体对象
* 3、使用该对象进行注册
* 4、对注册结果进行判断
* 5、对注册结果进行序列化,返回给前端
*/
Map<String, String[]> map = request.getParameterMap();//获取对象
User user = new User();//封装对象
try {
BeanUtils.populate(user,map);//这里是将map中的键值对封装进user中。
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
UserService userService = new UserServiceImpl();//用户服务层的实现类
ResultInfo info = new ResultInfo();//domain中的返回结果对象。可以到domain中查看ResultInfo的声明等。
boolean flag = userService.regist();//这个时候UserServiceImpl中还没有regist方法,需要首先在接口中声明,然后再实现类中重写
//4、注册反馈
if(flag){
//注册成功
info.setFlag(true);
}else{
//注册失败
info.setFlag(false);
info.setErrorMsg("注册失败!");
}
//将info序列化
ObjectMapper objectMapper = new ObjectMapper();
String json = objectMapper.writeValueAsString(info);
//将json数据写回客户端
//设置context-type类型
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);//通过response返回给前端数据。
Dao层的实现
//UserDaoImpl
private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public User FindByUserName(String username) {
User user = null;
try {
String sql = "select * from tab_user where username = ?";
user = template.queryForObject(sql, new BeanPropertyRowMapper<User>(User.class), username);
}catch (Exception e){
}
return user;
}
@Override
public void Save(User user) {
String sql = "insert into tab_user (username,password,name,birthday,sex,telephone,email) values(?,?,?,?,?,?,?)";
template.update(sql,user.getUsername(),
user.getPassword(),
user.getName(),
user.getBirthday(),
user.getSex(),
user.getTelephone(),
user.getEmail()
);
}
这里有关键点:
1、表名不要写错 tab_user;
2、JDBCUtils的声明中,使用Druid连接池的时候,需要把前面的一个下划线删除。
3、修改数据库的用户名和密码
在druid.properties中修改数据库名称和密码。
service层的实现
private UserDao userDao;
/**
* 用户注册
* @return
* @param user
*/
@Override
public boolean regist(User user) {
UserDao userDao = new UserDaoImpl();
//1、根据用户名查询用户
User u = userDao.FindByUserName(user.getUsername());
if(u != null){
return false;
}
userDao.Save(user);
//2、保存用户信息
return true;
}