开发环境:Idea2018
数据库:mysql 8.0.16
目的:学习SpringBoot
这是我学习Java编程的第二个实例,前面有个更加基础的,是为了学习Mybatis, 文章链接https://blog.youkuaiyun.com/taylor_gao/article/details/104566221 ,作为这两个实例后,我对Mybatis和Springboot的功能和用法有了基本认识。以后会把这两个框架的源码看一下,但按照一般学习规律,这个实例之后我会把基础知识再巩固一下,从并发编程开始。
不多写了,还是开始我的第二个实例吧。
- 环境准备
因为需要下载一些maven依赖包,使用apache原始网站会慢到无法承受,甚至最终报错。所以先配置maven国内镜像。
在这里可以看到settings.xml所在路径,去新建这个文件,内容如下。需要注意的是,这里面不能出现空格,Tab没问题,我在maven - build的时候报错了。(文件一直显示错误,于是我download source后,执行maven - build)
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
https://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
- 项目创建
File - New Project - Spring Initializr ,直接点击Next
填写Group和Artifact,继续Next
选择Web,勾选Spring Web;
选择Template Engines,勾选Thymeleaf
选择Sql,勾选Spring Data JDBC、Mybatis Framework、Mysql Driver;
这些都是项目需要的依赖包。继续Next,然后Finish.
Idea会提示下载依赖包,如果开始aliyu镜像配置成功的话,这个过程不会太长。
这里还是老规矩,先把项目的整体结构贴图上了,这个大家构建时好又个比较。3. 数据库表单
create table user
(
id int auto_increment
primary key,
username varchar(40) null,
password varchar(40) null,
age int null
);
4.在Resources文件夹下,会生成一个application.properties,主要用来存放参数配置。上图中我用的是application.yml,也是同样的功能,两个文件可以相互转换,我这里只贴出yml文件内容。
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.gbs.testspringboota.entity
server:
port: 8080
servlet:
session:
timeout: 30m
tomcat:
uri-encoding: utf-8
spring:
application:
name: springboot-demo
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
initial-size: 5
max-idle: 10
max-wait: 10000
min-idle: 5
password: 123456
url: jdbc:mysql://localhost:3306/tms?serverTimezone=UTC&useSSL=false
username: root
- 接下来我们在pom.xml里面添加MyBatis generator插件
<!-- mybatis generator 自动生成代码插件 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.0</version>
<configuration>
<configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
<overwrite>true</overwrite>
<verbose>true</verbose>
</configuration>
</plugin>
效果如下图:
6. 配置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>
<!--<properties resource="application.properties"/> -->
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
<classPathEntry location="/Users/taylorgao/.m2/repository/mysql/mysql-connector-java/8.0.19/mysql-connector-java-8.0.19.jar"/>
<context id="mtsTables" targetRuntime="MyBatis3">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库连接驱动类,URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/tms?useSSL=false"
userId="root"
password="123456">
<property name="nullCatalogMeansCurrent" value="true"/>
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 生成(实体)模型的包名和位置-->
<javaModelGenerator targetPackage="com.gbs.testspringboota.entity" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
<property name="trimStrings" value="true"/>
</javaModelGenerator>
<!-- 生成XML映射文件的包名和位置-->
<sqlMapGenerator targetPackage="resources.mapper" targetProject="src/main">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO接口的包名和位置-->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.gbs.testspringboota.mapper" targetProject="src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
<table tableName="user" domainObjectName="user" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
</context>
</generatorConfiguration>
- 现在我们就可以尝试生成实体类、XML映射文件,以及Dao接口了。点击菜单Run→Edit Configurations,点击+号,选择maven,在Command line填写mybatis-generator:generate,名称自己取,我这里叫generator, 点击OK。
这样在工具栏中的运行程序列表中,会增加刚刚配置的generator, 在列表中选择它,点击后边的执行按钮,就可生成实体类等信息了。新生成的三个文件分别是user.java, userMapper.java, userMapper.xml. 具体内容我就不贴上来了,只要生成了就不存在错误问题。
需要注意的一点,这里运行成功后,generatorConfig.xml文件末尾<table> **** </table>最好注释起来,以免后边误操作,再次生成,可能会覆盖自己的部分修改代码。
- 现在增加注册和登录的相关页面。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录成功</title>
</head>
<body>
<h1>用户名与密码正确,登录成功!!!</h1>
</body>
</html>
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="/user/uregister" method="post">
用户名:<input type="text" name="username" /></br>
密码:<input type="password" name="password" /></br>
确认密码:<input type="password" name="password2" /></br>
年龄:<input type="text" name="age" /></br>
<input type="submit" value="注册">
</form>
</body>
</html>
userLogin.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
请输入用户名与密码登录
<form action="/user/userLogin" method="post">
用户名:<input type="text" name="username" /><br>
密 码:<input type="password" name="password" /><br>
<input type="submit" value="登录" />
<a href="/user/registerpage" target="_blank">注册</a>
</form>
</body>
</html>
loginError.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录失败</title>
</head>
<body>
<h1>用户名或密码错误,登录失败!!!</h1>
</body>
</html>
- 然后还要完成相关的控制类/Dao接口/Xml映射代码。
userLoginController:
package com.gbs.testspringboota;
import com.gbs.testspringboota.entity.user;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
@Controller
@RequestMapping(value = {"/user"})
public class userLoginController {
/**
* 注入service
*/
@Autowired
private userLoginService userLoginService;
/**
* 跳转到用户登录页面
* @return 登录页面
*/
@RequestMapping(value = {"/loginHtml"})
public String loginHtml(){
return "userLogin";
}
/**
* 跳转到用户注册页面
* @return 注册页面
*/
@RequestMapping(value = {"/registerpage"})
public String registerpage(){
return "register";
}
/**
* 获取用户名与密码,用户登录
* @return 登录成功页面
*/
@RequestMapping(value = {"/userLogin"})
public String userLogin(@RequestParam("username") String username, @RequestParam("password") String password, HttpServletRequest request){
user user = userLoginService.userLogin(username,password);
if(user != null){ //登录成功
request.getSession().setAttribute("session_user",user); //将用户信息放入session
return "index";
}
return "loginError";
}
/**
* 注册新用户
* @return 注册结果
*/
@ResponseBody
@RequestMapping(value = {"/uregister"})
public String adduser(@RequestParam("username") String username,
@RequestParam("password") String password,
@RequestParam("password2") String password2,
@RequestParam("age") int age){
if(!password.equals(password2)){
return "两次密码不相同,注册失败!!";
}else {
int res = userLoginService.adduser(username,password,age);
if(res == 0){
return "注册失败!";
}else {
return "注册成功!";
}
}
}
}
userLoginService.java
package com.gbs.testspringboota;
import com.gbs.testspringboota.entity.user;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.gbs.testspringboota.mapper.userMapper;
@Service
public class userLoginService {
/**
* 注入dao
*/
@Autowired
private userMapper usermapper;
//用户登录
public user userLogin(String username, String password){
user user = usermapper.userlogin(username,password);
return user;
}
//注册新用户
public int adduser(String username,String password,int age){
return usermapper.adduser(username,password,age);
}
}
修改userMapper.java
package com.gbs.testspringboota.mapper;
import com.gbs.testspringboota.entity.user;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface userMapper {
user userlogin(user user);
int adduser(user user);
}
修改userMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gbs.testspringboota.mapper.userMapper">
<resultMap id="BaseResultMap" type="com.gbs.testspringboota.entity.user">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="username" jdbcType="VARCHAR" property="username" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="age" jdbcType="INTEGER" property="age" />
</resultMap>
<sql id="Base_Column_List">
id, username, password, age
</sql>
<!--用户登录验证-->
<select id="userlogin" parameterType="com.gbs.testspringboota.entity.user" resultMap="BaseResultMap">
SELECT <include refid="Base_Column_List"/>
FROM user
WHERE username = #{username} AND password = #{password}
</select>
<!--新用户注册-->
<insert id="adduser" keyProperty="id" parameterType="com.gbs.testspringboota.entity.user" useGeneratedKeys="false">
INSERT INTO user (username,password,age) VALUES (#{username},#{password},#{age})
</insert>
</mapper>
- 启动项目,然后再浏览器的地址栏输入映射路径,即可完成测试。
http://127.0.0.1:8080/user/registerpage
http://127.0.0.1:8080/user/loginHtml
O.K., 至此,这个测试实例圆满完成。这个过程中也遇到过一些问题。简单列举一下。
(1). 开始没有设置Maven库的国内镜像,无法下载依赖包。
(2). 一个问题,如果使用application.properties文件,就可以在generatorConfig.xml中直接使用配置信息(通过声明引用properties resource=“application.properties”,但使用yml格式后,我不知道怎样引用。希望有兄弟赐教。
(3). usrLoginService.java中声明private userMapper usermapper;这里曾经报错,查了百度,在启动程序中增加@MapperScan(value = “com.gbs.testspringboota.mapper”),确实解决了。但我后来把这句注释也,也能运行了。忘记了中间有改过什么地方。这里贴一下启动程序代码。
TestspringbootaApplication.java
package com.gbs.testspringboota;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
//@MapperScan(value = "com.gbs.testspringboota.mapper")
@SpringBootApplication()
public class TestspringbootaApplication {
public static void main(String[] args) {
SpringApplication.run(TestspringbootaApplication.class, args);
}
}
欢迎大家交流指教,谢谢!
by T.G.