注册页面的代码如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
<link rel="stylesheet" href="../css/init.css">
<link rel="stylesheet" href="../css/register.css">
<script src="../js/jquery.min.js"></script>
<script src="../js/register.js"></script>
</head>
<body>
<div class=" content">
<div class="login-header">
<div class="logo">
<h1>
<a href="#"><img src="../images/logo.png" alt=""></a>
</h1>
<p class="company-name">公司名</p>
</div>
<div class="search"><img src="../../images/black-search.png"/></div>
<div class="back-index"><a href="/">官网</a></div>
</div>
<div class=" registerbox">
<div class="registerbox-header">
<p>账号注册</p>
</div>
<p class="register-description">已有账号?
<a href = "/init/login" >立即登录</a>
</p>
<form action="/createUser" method="get" autocomplete="off" class="info" onsubmit="return registerCheck()">
<input type="text" name="mail" id="mail" class="register-mail" placeholder="请输入邮箱"/><br/>
<div class="div_c_r"><input style="float: right;border:none; text-align: center;font-size: 11px;padding: 4px 9px;width:calc(50% - 16px);background: #05a0e0;color: #fff;" id="generate_code" value="获取验证码" type="button" onclick="sendmail()">
<input style="border: none;" type="tel" name="code" onblur="sub();" onkeydown="" id="checkcode" placeholder="请输入邮箱验证码" >
</div>
<input type="text" name="password" class="register-password" placeholder="请输入密码"/><br/>
<input type="text" name="repassword" class="register-repassword" placeholder="请再次输入密码"><br/>
<div class ="remember">
<input type ="checkbox" name="rememberPW"/>
<p class="ps">我已阅读并同意<a href="/"> 使用条款</a>和 <a href="/">隐私政策</a></p>
</div>
<input type="submit" value="注册" class="button" />
</form>
</div>
</div>
</body>
</html>
可以看到,这个页面底下传了两个值,mail 和 password 。由form action 指向 /createUser,在控制层中,代码如下
@Controller
public class UserController {
@Autowired
private IUser userService; //记得注入userservice
@GetMapping("/createUser")
@ResponseBody
public String CreateUser(User user){
int result = userService.insertUser(user); //调用service的insertuser方法
return "1";
}
}
在service底下,insertuser的方法如下,
@Service
public class UserImp implements IUser {
@Autowired
private UserMapper userMapper;
@Override
public int insertUser(User user){
// int result=userMapper.insert(user);
// Example example = new Example(User.class);
// Example.Criteria criteria = example.createCriteria();
// criteria.andEqualTo("mail",user.getMail());
// criteria.andEqualTo("password",user.getPassword());
int result = userMapper.insertSelective(user);
return result;
}
}
insertSelective和insert方法的区别是,insertselective可以对插入的值进行判断,不为空的值会插入,而insert是对所有的值都插一遍,不为空的插入,为空的插入null。
之于dao以及model,我们使用的是mybatis的逆向工程,编写generatorConfig.xml文件。在这边注意一下,数据库的命名规则,例如用户名应该是user_id ,这样子后台生成的User类的对应的id为userId(注意一下这是自动生成的)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
<!-- 引入数据库连接配置 -->
<properties resource="jdbc.properties"/>
<context id="Mysql" targetRuntime="MyBatis3Simple" defaultModelType="flat">
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>
<!-- 配置 tk.mybatis 插件 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.MyMapper"/>
</plugin>
<!-- 配置数据库连接 -->
<jdbcConnection
driverClass="${jdbc.driverClass}"
connectionURL="${jdbc.connectionURL}"
userId="${jdbc.username}"
password="${jdbc.password}">
</jdbcConnection>
<!-- 生成模型的包名和位置 -->
<javaModelGenerator targetPackage="com.txy.portal.model" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 配置 XML 存放路径 -->
<sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources"/>
<!-- 生成DAO的包名和位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.txy.portal.dao" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 配置需要指定生成的数据库和表,% 代表所有表 -->
<!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
<table tableName="user" domainObjectName="User" enableCountByExample="true"
enableUpdateByExample="true" enableDeleteByExample="true" enableSelectByExample="true"
selectByExampleQueryId="true"/>
</context>
</generatorConfiguration>
使用maven的
进行生成。
最后是mapper文件,
<mapper namespace="com.txy.portal.dao.UserMapper">
<resultMap id="BaseResultMap" type="com.txy.portal.model.User">
<!--
WARNING - @mbg.generated
-->
<id column="user_id" jdbcType="INTEGER" property="userId" />
<result column="user_name" jdbcType="VARCHAR" property="userName" />
<result column="mail" jdbcType="VARCHAR" property="mail" />
<result column="gender" jdbcType="CHAR" property="gender" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="mobile" jdbcType="INTEGER" property="mobile" />
</resultMap>
一些总结:
1、数据库中,主键的定义不能为空,当插入数据库的值不包含id(主键)的时候,它会默认自增一成为id号。
2、了解mybatis逆向工程的方法,在编写dao和model(实体)的时候,可以省去很多麻烦。
3、前端往后端传值的时候,可以直接使用对象作为接收,因为传的值会自动注入到对象当中,与此同时,insert和insertselective方法也是要求 后面的括号内是一个对象。
4、在往数据库怼 密码 这个数据的时候,考虑使用base64 、md5做简单的加密处理。