一、开发工具IAEA的简单使用和项目的创建
-
file-->new-->Project -->Spring Initializr 如下图:
2.然后一路next,到下面界面,选择配置如下:
Spring Web MyBaits Framework MySql Driver 基本可以开发web界面和连接数据库写页面
3.设置字体和代码自动联想
字体:Preferences-->Editor-->Font-->Size
联想:Preferences-->Editor-->General-->Code Completion 选中First letter only 去掉Match case
二、application.yml的简单配置和简单的mybaits使用
1.配置application.yml,新创建的项目是application.property,我们可以删除,在同样的位置创建application.yml文件
配置文件的内容如下:#自定义属性配置 author: name: eden age: 18 desc: 个人立志不掉发 #关于端口的配置 server: port: 8080 address: localhost #关于spring的配置 spring: # 数据库连接配置 datasource: name: test driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/rms?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC username: root password: root # 设置放入静态资源可直接访问权限 resources: static-locations: classpath:/META-INF/resources/, classpath:/resources/, classpath:/static/, classpath:/public/, classpath:/templates/ # 热部署 devtools: restart: enabled: true #热部署生效 exclude: /templates/ #设置需要重启的目录 additional-paths: src/main/java #该目录下的文件不需要重启 # 热部署配置 #mybaits配置 mybatis: mapper-locations: classpath*:mybatis/mapper/*.xml type-aliases-package: com.example.demo.entity
2.项目常见构成目录如下图:
3.controller简单使用
@Controller //说明此类是控制器
@RequestMapping(value = "/user") //第一层路径
public class UserController {
//返回内容,用@ResponseBody注解
@RequestMapping(value = "/content")
@ResponseBody
public String getUser(){
return "2345678";
}
// 返回json字符串
@RequestMapping(value = "/json",method = RequestMethod.GET)
@ResponseBody
public User getJson(){
User user = new User();
user.setName("eden");
user.setAge("18");
user.setDesc("个人立志不掉发");
return user;
}
// 返回json字符串
@GetMapping("/json1")
@ResponseBody
public User getJson1(){
User user = new User();
user.setName("eden");
user.setAge("18");
user.setDesc("个人立志不掉发");
return user;
}
//重定向页面
@GetMapping(value = "/page")
public String page(){
return "test";
}
//重定向页面传参
@GetMapping(value = "/page1")
public String page1(ModelMap map){
map.addAttribute("name","孙见伟");
return "test";
}
}
templates/test.html获取传入的参数如下:
<!DOCTYPE html>
//模版的链接
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
我是测试页面
<h1 th:text="${name}">Hello World</h1>
</body>
</html>
⚠️:定向页面需要导入模版依赖库,否则报错,依赖库如下:
<!--页面重定向模版-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
4.两种种方法获取配置属性
第一种:
@Value("${author.name}")
private String name;
//单个属性获取
@GetMapping(value = "/property")
@ResponseBody
public String property(){
return this.name;
}
第二种:
@Autowired
private User user;
//一个类的属性获取
@GetMapping(value = "/author")
@ResponseBody
public String authorProperty(){
return user.getName() + " : " + user.getAge() + " : " + user.getDesc();
}
对应实体代码如下:
@Component //表明当前类是一个java bean
@ConfigurationProperties(prefix = "author") //表示获取前缀为anthor的配置信息
public class User {
private String name;
private String age;
private String desc;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getAge() { return age;}
public void setAge(String age) { this.age = age; }
public String getDesc() { return desc; }
public void setDesc(String desc) { this.desc = desc; }
}
⚠️:请求返回页面不能用注解@ResponseBody
请求返回内容必须用注解@ResponseBody
5.文件上传和下载
-
手写dao文件
CommentController.java@RestController @RequestMapping(value = "/comment") public class CommentController { @Autowired CommentMapper commentMapper; @Autowired HotelMapper hotelMapper; //list @RequestMapping(value = "/list",method = RequestMethod.GET) public ResultEntity getData(@RequestParam(value = "hotel_id") int hotel_id){ ResultEntity result = new ResultEntity(); List<CommentEntity> datas = commentMapper.selectAll(hotel_id); result.setCode(0); result.setData(datas); return result; } //add @RequestMapping(value = "/add",method = RequestMethod.POST) public ResultEntity addComment(int hotel_id,int user_id,String comment,String grade) throws Exception{ ResultEntity result = new ResultEntity(); CommentEntity commentEntity = new CommentEntity(); commentEntity.setHotel_id(hotel_id); commentEntity.setUser_id(user_id); commentEntity.setContent(comment); commentEntity.setGrade(Float.valueOf(grade)); commentEntity.setAddtime(new Date()); int addId = commentMapper.insert(commentEntity); //grade Integer avgGrade = commentMapper.avgGrade(hotel_id); HotelEntity hotelEntity = new HotelEntity(); hotelEntity.setGrade(avgGrade + ""); hotelEntity.setHotel_id(hotel_id); hotelMapper.updateByPrimaryKey(hotelEntity); result.setCode(0); result.setMsg("add comment success!"); return result; } }
CommentMapper.java
public interface CommentMapper {
int deleteByPrimaryKey(Integer id);
int insert(CommentEntity record);
CommentEntity selectByPrimaryKey(Integer id);
List<CommentEntity> selectAll(Integer hotel_id);
Integer avgGrade(Integer hotel_id);
}
CommentMapper.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.example.demo.mapper.CommentMapper">
<resultMap id="BaseResultMap" type="com.example.demo.entity.CommentEntity">
<id column="comment_id" jdbcType="INTEGER" property="comment_id" />
<id column="hotel_id" jdbcType="INTEGER" property="hotel_id" />
<id column="user_id" jdbcType="INTEGER" property="user_id" />
<result column="content" jdbcType="VARCHAR" property="content" />
<result column="addtime" jdbcType="TIMESTAMP" property="addtime" />
<result column="grade" jdbcType="INTEGER" property="grade" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="account" jdbcType="VARCHAR" property="account" />
<result column="img" jdbcType="VARCHAR" property="userImg" />
</resultMap>
<!-- 增 -->
<insert id="insert" parameterType="com.example.demo.entity.CommentEntity">
<selectKey keyProperty="comment_id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
insert into comment (hotel_id, user_id, `content`, `addtime`,
grade)
values (#{hotel_id,jdbcType=INTEGER}, #{user_id,jdbcType=INTEGER}, #{content,jdbcType=VARCHAR},
#{addtime,jdbcType=TIMESTAMP},#{grade,jdbcType=INTEGER})
</insert>
<!-- 删 -->
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
delete from comment
where comment_id = #{comment_id,jdbcType=INTEGER}
</delete>
<!-- 改 -->
<update id="updateByPrimaryKey" parameterType="com.example.demo.entity.UserEntity">
update user set
<if test="name!= null" >
name = #{name,jdbcType=VARCHAR},
</if>
<if test="img!= null" >
img = #{img,jdbcType=VARCHAR},
</if>
<if test="gender!= null" >
gender = #{gender,jdbcType=VARCHAR}
</if>
where account = #{account,jdbcType=VARCHAR}
</update>
<!-- 查 -->
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select * from comment
where comment_id = #{comment_id,jdbcType=INTEGER}
</select>
<select id="selectAll" parameterType="java.lang.Integer" resultMap="BaseResultMap" useCache="true">
select * from comment, user
where comment.hotel_id = #{hotel_id,jdbcType=INTEGER} and comment.user_id = user.account order by addtime desc
</select>
<!-- 求平均 -->
<select id="avgGrade" parameterType="java.lang.Integer" resultType="java.lang.Integer" useCache="true">
select AVG(grade) AS grade from comment
where comment.hotel_id = #{hotel_id,jdbcType=INTEGER}
</select>
</mapper>
7.遇到注解的解释
@SpringBootApplication //表明是SpringBoot项目
@MapperScan("com.example.demo.mapper") //与dao层的@Mapper二选
@Value("${author.name}") //自动获取配置属性
@Component //表明当前类是一个java bean
@ConfigurationProperties(prefix = "author") //表示获取前缀为anthor的配置信息
@Controller //表明该类是控制器
@RestController //是@Controller和@ResponseBody之和
@Resource //自动创建一个对象
@Autowired //自动创建一个对象
@RequestMapping(value = "/event") //一个请求
@RequestMapping(value = "/json",method = RequestMethod.GET) //一个get请求
@PostMapping(value = "insert") //一个post请求
@GetMapping(value = "/one") //一个get请求
@ResponseBody //返回数据,非页面
@Param("name") String name //输入的参数
三、自动生成dao文件的配置和使用
自动生成dao文件
1.依赖库的引入,在pom.xml添加热部署依赖库如下:
<!-- mysql自动生成实体类-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
2.在resources文件夹创建mybatis-generator.xml,目录如下图
内容如下(在里面配置好自己的实体类,map.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>
<context id="DB2Tables" targetRuntime="MyBatis3Simple">
<commentGenerator>
<property name="suppressDate" value="true"/>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<!-- 这个注释是generator的注释。不是建表时手输的,没什么卵用-->
<property name="suppressAllComments" value="true"/>
</commentGenerator>
<!--数据库链接URL,用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/rms?characterEncoding=utf-8"
userId="root" password="2012715Aa">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false"/>
</javaTypeResolver>
<!-- 设置Java类生成的位置 -->
<javaModelGenerator targetPackage="com.example.demo.entity"
targetProject="./src/main/java">
<!-- 是否允许子包,即targetPackage.schemaName.tableName -->
<property name="enableSubPackages" value="true"/>
<!-- 是否对model添加 构造函数 -->
<property name="constructorBased" value="true"/>
<!-- 是否对类CHAR类型的列的数据进行trim操作 -->
<property name="trimStrings" value="true"/>
<!-- 建立的Model对象是否 不可改变 即生成的Model对象不会有 setter方法,只有构造方法 -->
<property name="immutable" value="false"/>
</javaModelGenerator>
<!-- 生成映射文件的包名和位置 ***mapper.xml-->
<sqlMapGenerator targetPackage="/mybatis/mapper"
targetProject="./src/main/resources">
<property name="enableSubPackages" value="true"/>
</sqlMapGenerator>
<!-- 生成DAO的包名和位置 ***mapper.java-->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.demo.mapper"
targetProject="./src/main/java">
<property name="enableSubPackages" value="true"/>
</javaClientGenerator>
<!-- 所有要生成的表名 -->
<table tableName="event"></table>
</context>
</generatorConfiguration>
3.在test文件夹下新建java类,目录如下图
代码如下:
package com.example.demo;
import org.mybatis.generator.api.ShellRunner;
public class GetAutoEntityAndDao {
// 该配置文件放在src\\main\\resources\\该路径下即可
public static void main(String[] args) {
//路径一定要配置正确
args = new String[] { "-configfile", "src//main//resources//mybatis-generator.xml", "-overwrite" };
ShellRunner.main(args);
}}
四、热部署的配置和使用
使用场景:修改项目下的静态文件(html,css,js,img)等需要重新运行项目才可以访问,这个时候采用热加载,可以不用重新运行项目也可以访问,达到在开发中节省时间的作用。
1.依赖库的引入,在pom.xml添加热部署依赖库如下:
<!--热部署依赖库-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
2.application.yml配置热加载路径代码如下:
# 热部署配置
spring:
devtools:
restart:
enabled: true #热部署生效
exclude: /templates/ #设置需要重启的目录
additional-paths: src/main/java #该目录下的文件不需要重启