SpringBoot学习
yaml基本语法:
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
项目一直不能启动的原因
1.controller包要放在启动类目录下,才能扫描到。
2.yaml文件写错了
3.配置错误
很有可能是pom.xml的版本号报红的原因
折腾了一天原来是端口占用的问题,改成8081就好了
查看占用的端口
netstat -nao|findstr 8080
SpringBoot的主要优点
- 为所有Spring开发者更快的入门
- 开箱即用,提供各种默认配置来简化项目配置
- 内嵌式容器简化Web项目
- 没有冗余代码生成和XML配置的要求
第一个Spring Boot程序!
artifactID一般是项目名或模块名
groupID,第一段为域,第二段为公司名称
比如自己新建的项目:com.wey.TestJava
目录结构:
然后运行启动类就可以了
注意每次运行前要重启springboot
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
excludeFilters = {@Filter(
type = FilterType.CUSTOM,
classes = {TypeExcludeFilter.class}
), @Filter(
type = FilterType.CUSTOM,
classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
// ......
}
@ComponentScan
这个注解在Spring中很重要 ,它对应XML配置中的元素。
作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中
@SpringBootConfiguration
作用:SpringBoot的配置类 ,标注在某个类上 , 表示这是一个SpringBoot的配置类;
我们继续进去这个注解查看
// 点进去得到下面的 @Component@Configurationpublic @interface SpringBootConfiguration {}
@Componentpublic @interface Configuration {}
这里的 @Configuration,说明这是一个配置类 ,配置类就是对应Spring的xml 配置文件;
里面的 @Component 这就说明,启动类本身也是Spring中的一个组件而已,负责启动应用!
我们回到 SpringBootApplication 注解中继续看。
run方法流程分析
要解决的问题:
- 导入静态资源
- 首页
- jsp,模板引擎Thymeleaf
- 装配扩展SpringMVC
- 增删改查
- 拦截器
- 国际化
静态资源
总结:
- 在spring boot,我们可以使用以下方式处理静态资源
- webjars
localhost:8080/webjars/
- public,static,/**,resouces
localhost:8080/
- webjars
- 优先级:resouces>static>public
首页如何定制
- 导入thymeleaf 模板引擎
- 自动配置原理
- Web开发静态资源处理
Mysql基础知识复习
show databases; -- 显示数据库
show tables; -- 显示数据库表
use databases【表名】-- 使用数据库
create table 【if not exists】 genius;
drop table if exists genius;
desc tables; -- 显示表的结构
alter table teacher rename as teacher1; -- 修改表
alter table teacher1 add age int(11); -- 增加表的字段
altertable teacher modify age varchar(11); -- 修改约束
alter table teacher1 change age age1 int(1) --字段重命名
alter table teacher1 drop age1 -- 删除表的字段
drop table if exists teacher1 -- 删除表【谨慎操作】
关于数据库引擎
MYISAM | INNODNB | |
---|---|---|
事务支持 | 不支持 | 支持 |
数据行锁定 | 不支持 | 支持 |
外键约束 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 |
表空间的大小 | 较小 | 较大,约为2倍 |
常规使用操作:
- MYISAM 节约空间,速度较快
- INNODNB 安全性高,事务的处理,多表多用户操作
在启动项目时,要注意
直接点浏览器标志
其他一般的Spring boot就在启动类里启动
mybatis复习
把src删除
导入依赖
<dependencies>
<!--导入依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org/DTD Config 3.0//EN "
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=false&useUnicode=true&characterEncoding=UTF8"/>
<property name="username" value="root"/>
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="UserMapper.xml/"/>
</mappers>
</configuration>
MybatisUils.java
public class MybatisUils {
private static SqlSessionFactory sqlSessionFactory;
static {
try {
//使用Mybatis第一步:获取sqlSessionFactory对象
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
e.printStackTrace();
}
}
//获取Sqlsession的实例
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
}
User.java
package com.genius.pojo;
//实体类
public class User {
private int id;
private String name;
private String pwd;
public User(){
}
public User(int id, String name, String pwd) {
this.id = id;
this.name = name;
this.pwd = pwd;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
-
Dao接口
public interface UserDao { List<User> getUserList(); }
-
接口实现类由原来的UserDaoImpl转变为一个Mapper配置文件
<?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"> <!--namespace=绑定一个对应的Dao/Mapper接口--> <mapper namespace="com.genius.dao.UserDao"> <!--select查询语句--> <select id="getUserList" resultType="com.genius.pojo.User"> select * from mybatis.user </select> </mapper>
-
UserDaoTest.java
public class UserDaoTest { @Test public void test(){ //第一步:获得SqlSession对象 SqlSession sqlSession = MybatisUils.getSqlSession(); //方式一:getMapper UserDao userDao = sqlSession.getMapper(UserDao.class); List<User> userList = userDao.getUserList(); for (User user:userList){ System.out.println(user); } //关闭SqlSession sqlSession.close();; } }
报空指针错误
1.把ssl设置成false(没用)
2.把xml的注释去掉,或者把resource的xml文件的UTF-8改为utf8(没用)
3.把pom.xml的build的过滤改为false或者去掉(没用)
4.配置后记得刷新maven
5.把MybatisUils的19行改成sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); (成功了)但打印的是地址
User实体类中加重写方法
@Override public String toString() { return "User"+"["+"name="+name+" "+"id="+id+" "+"pwd="+pwd+"]"; }
6.重启idea(有用)
java.lang.ExceptionInInitializerError
1.版本问题
2.pom.xml添加build
3.把mybatis-config.xml的中文去掉
目录结构
查询
UserDaoTest.java
@Test
public void test(){
SqlSession sqlSession = MybatisUils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getUserList();
for (User user : userList){
System.out.println(user);
}
sqlSession.close();
}
UserMapper接口
public interface UserMapper {
List<User> getUserList();
User getUserById(int id);
int addUser(User user);
}
UserMapper.xml
</select>
<insert id="addUser" parameterType="com.genius.pojo.User">
insert into user(id,name,pwd)values(#{id},#{name},#{pwd})
</insert>
Mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org/DTD Config 3.0//EN "
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/genius/dao/UserMapper.xml"/>
</mappers>
</configuration>
User.java(实体类)
package com.genius.pojo;
public class User {
private int id; //id
private String name; //姓名
private String pwd; //密码
//构造,有参,无参
//set/get
//toString()
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
CRUD
增加
int addUser(User user);
public void testAddUser(){
SqlSession sqlSession = MybatisUils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.addUser(new User(4,"我","2234"));
sqlSession.commit();//记得提交事务
sqlSession.close();
}
<insert id="addUser" parameterType="com.genius.pojo.User">
insert into user(id,name,pwd)values(#{id},#{name},#{pwd})
</insert>
删除
@Test
public void deleteUser(){
SqlSession sqlSession = MybatisUils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
sqlSession.commit();
sqlSession.close();
}
int deleteUser(int id);
<delete id="deleteUser" parameterType="int">
delete from mybatis.user where id = #{id};
</delete>
更新
<update id="updateUser" parameterType="com.genius.pojo.User">
update mybatis.user set name=#{name},pwd=#{pwd} where id = #{id};
</update>
int updateUser(User user);
@Test
public void updateUser(){
SqlSession sqlSession = MybatisUils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.updateUser(new User(4,"我","423423"));
sqlSession.commit();
sqlSession.close();
}
查询(根据id查找姓名)
@Test
public void getUserById() {
SqlSession sqlSession = MybatisUils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.getUserById(1);
System.out.println(user);
sqlSession.close();
}
User getUserById(int id);
<select id="getUserById" parameterType="int" resultType="com.genius.pojo.User">
select * from mybatis.user where id = #{id}
</select>
可能错的地方
空指针错误是没有注册到资源,在pom.xml添加build
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9kagHLn9-1636175036448)(C:\Users\Genius\AppData\Roaming\Typora\typora-user-images\image-20211106114705389.png)]
<mapper resource="com/genius/dao/UserMapper.xml"/>
User实体类里没有写构造方法和toString方法(会出现地址)
<mapper namespace="com.genius.dao.UserMapper">
Git复习
linux常用命令
将项目通过git导入gitee可参考:
git init #把当前目录变成git可以管理的仓库
git add readme.txt #添加一个文件,也可以添加文件夹
git add -A #添加全部文件
git rm test.txt #删除一个文件,也可以删除文件夹
git commit -a -m "some commit" #提交修改
git status #查看是否还有未提交
git log #查看最近日志
git reset --hard HEAD^ #版本回退一个版本
git reset --hard HEAD^^ #版本回退两个版本
git reset --hard HEAD~100 #版本回退多个版本
git remote add origin +地址 #远程仓库的提交(第一次链接)
git push -u origin master #仓库关联
git push #远程仓库的提交(第二次及之后)
将gitee项目克隆到本地(IDEA)可参考:
Vue复习
第一个vue程序!
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<!--<script src="https://cdn.jsdeliver.net/npm/vue/vue@2.5.21/dist/vue.min.js"></script>-->
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
</head>
<body>
<div id="app">
{{message}}
<!-- <span v-bind:title="message">-->
<!-- 鼠标悬停几秒钟查看此处结果-->
<!-- </span>-->
</div>
<script>
var vm = new Vue({
el:"#app",//要注意前面有个#号
data:{
message:"hello"
}
});
</script>
</body>
</html>
顺序不能错了,script要放在div下面,引入的vue.js要放在最前面