打开原教程视频
注:本人是编程小白,这个是我第一个尝试的项目,编写该系列博客是为了记录第一次做项目的经历,其中肯定会有不少不成熟的操作甚至错误之处,如果可以,希望大神指出,谢谢大家。
使用mybatis逆向工程创建bean实体类和Mapper配置文件、接口
在上一章搭建好项目环境之后,那么就要开始实现网站的各项功能。简单的登录功能实际上就是一个数据库查询操作,此时我们就需要准备好关于bean实体类和Mapper等文件。但是由于表的数目较多,所以使用mybatis逆向工程能很好的提高项目开发的效率。
具体操作可参考此链接
如果使用的是maven进行jar包管理,可参考以下的文件配置。
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.bin</groupId>
<artifactId>MyBatis_Generator</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.3</version>
<configuration>
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
generatorConfig.xml文件
<?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>
<!-- 配置数据库连接的包 -->
<!-- <classPathEntry location="/Program Files/IBM/SQLLIB/java/db2java.zip" /> -->
<!-- context指定环境 -->
<context id="MyGenerator" targetRuntime="MyBatis3Simple">
<!-- 这个标签可以去掉MBG各类元素生成的注释,默认是全部生成的 -->
<commentGenerator>
<!-- 去掉注释 -->
<property name="suppressAllComments" value="true"/>
<!-- 去掉时间戳 -->
<property name="suppressDate" value="true"/>
</commentGenerator>
<!-- 数据库连接信息 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/crowdfunding?serverTimeZone=UTC&characterEncoding=UTF-8"
userId="root"
password="root">
</jdbcConnection>
<!-- JAVA JDBC数据类型转换,参照官方文档,不再细说 -->
<!-- 是否强制数据库的浮点类型转换成BigDecimal类型-->
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- javaModelGenerator javaBean配置
targetPackage 输入包名 输出路径
targetProject 输出项目位置
最好跟你要放在哪个module下的全包名一样,
否则后期要一个个改,而且没发现的话会出现一堆莫名奇怪的错误,
下面的mapper也一样
-->
<javaModelGenerator targetPackage="com.generator.bean" targetProject="src">
<!-- enableSubPackages 是否开启子包名称 是否在包名后边加上scheme名称 -->
<property name="enableSubPackages" value="false" />
<!-- 在Set方法中加入.trim
是否将数据库的字段值去掉两端空格,再封装到实体类
-->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- 映射文件mapper.xml配置 -->
<sqlMapGenerator targetPackage="com.generator.mapper" targetProject="src">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 动态代理类接口,和mapper.xml在要同一个路径 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.generator.mapper" targetProject="src">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<!-- 数据表 根据数据库中的表来生成 -->
<table tableName="t_account_type_cert" domainObjectName="AccountTypeCert"/>
<table tableName="t_advertisement" domainObjectName="Advertisement"/>
<table tableName="t_cert" domainObjectName="Cert"/>
<table tableName="t_dictionary" domainObjectName="Dictionary"/>
<table tableName="t_member" domainObjectName="Member"/>
<table tableName="t_member_address" domainObjectName="MemberAddress"/>
<table tableName="t_member_cert" domainObjectName="MemberCert"/>
<table tableName="t_member_project_follow" domainObjectName="MemberProjectFollow"/>
<table tableName="t_message" domainObjectName="Message"/>
<table tableName="t_order" domainObjectName="Order"/>
<table tableName="t_param" domainObjectName="Param"/>
<table tableName="t_permission" domainObjectName="Permission"/>
<table tableName="t_project" domainObjectName="Project"/>
<table tableName="t_project_tag" domainObjectName="ProjectTag"/>
<table tableName="t_project_type" domainObjectName="ProjectType"/>
<table tableName="t_return" domainObjectName="Return"/>
<table tableName="t_role" domainObjectName="Role"/>
<table tableName="t_role_permission" domainObjectName="RolePermission"/>
<table tableName="t_tag" domainObjectName="Tag"/>
<table tableName="t_type" domainObjectName="Type"/>
<table tableName="t_user" domainObjectName="User"/>
<table tableName="t_user_role" domainObjectName="UserRole"/>
<!-- 数据表更详细的属性参见官方文档,这里注释掉,不细讲 -->
<!-- <table schema="DB2ADMIN" tableName="ALLTYPES" domainObjectName="Customer" >
<property name="useActualColumnNames" value="true"/>
<generatedKey column="ID" sqlStatement="DB2" identity="true" />
<columnOverride column="DATE_FIELD" property="startDate" />
<ignoreColumn column="FRED" />
<columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" />
</table> -->
</context>
</generatorConfiguration>
执行类RunMBG
public class RunMBG {
public static void main(String[] args) throws Exception {
List<String> warnings = new ArrayList<String>();
boolean overwrite = true;
File configFile = new File("E:\\maven_projects\\projects\\MyBatis_Generator\\src\\main\\resources\\generatorConfig.xml");
ConfigurationParser cp = new ConfigurationParser(warnings);
Configuration config = cp.parseConfiguration(configFile);
DefaultShellCallback callback = new DefaultShellCallback(overwrite);
MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback, warnings);
myBatisGenerator.generate(null);
}
}
可以看到我设置的是绝对路径,因为相对路径一直报错说找不到generatorConfig.xml文件,出现此错误可以尝试一下这个方法。
运行结果:
主界面设计
这个直接找到资料中的index.html和login.html文件改成jsp文件,并将其放到jsp文件夹下。
另外需要复制同文件夹下的文件夹粘贴到webapp下。
我们在webapp文件夹下的index.jsp下编写:
<jsp:forward page="dispatcherController/index.htm"></jsp:forward>
然后创建前端控制器类DispatcherController,编写请求转发处理的方法体
@Controller
@RequestMapping(value = "dispatcherController")
public class DispatcherController {
/**
*
* @return
*/
@RequestMapping(value = "/index")
public String index(){
return "index";
}
启动服务器就能请求转发到主界面了。
接下来实现登录页面的跳转
在DispatcherController编写好登录界面跳转的方法体。
/**
* 跳转到登录界面
* @return
*/
@RequestMapping(value = "/login")
public String login(){
return "login";
}
打开主界面index.jsp文件找到登录按钮的超链接,配置好在路径跳转。
点击登录便可跳转到改页面。
简单的登录功能实现
首先我们观察下图的登录时序图并理解登录的流程。
根据上图就可以简单的看出,登录功能的实现就是接受前端的数据并进行封装,然后以其为条件(参数),各层传递进行数据库查询并判断是否存在此数据的操作。
前面我们已经使用mybatis逆向工程创建了实体类和Mapper.xml文件和dao层的接口,此时只需要补充service层的接口和是实现类。
接口类
public interface UserService {
User queryUserLogin(User user);
}
实现类
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
public User queryUserLogin(User user) {
User userLogin = userMapper.queryUserLogin(user);
if (userLogin==null){
throw new LoginFailException("账号或密码不正确!");
}
return userLogin;
}
}
到了这里我们就只剩下在DispatcherController类中接受数据并调用service层的方法进行数据查询。
/**
* 登录操作
* @param user
* @return
*/
@RequestMapping(value = "/doLogin")
public String doLogin(User user, HttpSession session){
User userLogin = userService.queryUserLogin(user);
session.setAttribute(Const.LOGIN_USER,userLogin);
System.out.println(user.getLoginacct());
System.out.println(user.getUserpswd());
System.out.println(userLogin.getLoginacct());
System.out.println(userLogin.getUserpswd());
return "main";
}
另外记得在dao层接口补充登录查询方法和Mapper.xml的查询语句
<select id="queryUserLogin" parameterType="com.bin.crowdfunding.bean.User" resultType="com.bin.crowdfunding.bean.User">
select * from t_user where loginacct=#{loginacct} and loginacct=#{loginacct}
</select>
在启动服务器之前,我们还需要检查一下login.jsp文件,要不然怎么知道它是否匹配好了和封装类一样的参数名字和路径。
还需要设置按钮提交操作
一切准备完毕,开始检验成果了,首先向数据库的t_user表插入一条数据并启动服务器
输入账户密码
点击登录便可出现404页面找不到的错误,这是因为还未在项目中配置登录成功的跳转页面。但根据上面编写的方法,我们可以在控制台上查看到封装的数据和查出来的数据是一样的,证明我们的登录的流程是完全跑通了。
谢谢阅读。