springboot入门教程01

1)在idea中如何使用maven创建springboot工程

第一步安装 Intellij IDEA

点击菜单栏 File ➤New➤Project ➤ 选择 Spring Initializr 创建界面如下图,可以看到图中 default 指定的 Initializr Service URL 就是 Spring 官方提供的 Spring Initializr 工具地址,一般默认即可,所以这里创建的工程实际上也是基于它的 Web 工具来实现的。

 

点击 next 进入下一步,可以看见这里要我们选择的就是关于工程的一些信息:

  • Group 顾名思义就是你的公司名,一般是填写com.公司名。
  • Artifact groupId 和 artifactId 是maven管理项目包时用作区分的字段,就像是地图上的坐标。这里填写项目名即可。
  • Type 就是构建的项目类型,意思就是你希望你的项目使用什么工具构建,可选 maven 和 gradle 一般选 maven。
  • Language 顾名思义就是你的项目用啥语言开发,可选 Java、Groovy、Kotlin
  • Packaging 就是你希望你的项目打成什么形式的包,可选 Jar、War SpringBoot 项目一般选 Jar
  • Java Version 意指项目使用的 java 版本,根据你的需要选择。
  • Version 项目的初始版本,默认即可。
  • Name 项目名称。
  • Description 项目描述,默认即可。
  • Package 包名,填完 Group 和 Artifact 后自动生成,默认即可。

点击 Next 进入下一步,这一步就是选你的项目依赖包,前文所说的「约定大于配置」就体现在这里。进入选择S pring Boot 版本和依赖管理的窗口。在这里值的我们关注的是,它不仅包含了 Spring Boot Starter POMs 中的各个依赖,还包含了 Spring Cloud 的各种依赖。

比如,你需要集成前端模板功能,你就到 Template Engines 选项卡上,勾选你想要访问的前端模板引擎 ,项目需要访问数据库,就到 SQL 选项卡,旋转你项目里使用的数据库类型。选择完成并加以简单的配置,项目就具备了集成前端模板能力与数据库访问能力。

这里注意一下,无论你选择哪些依赖包,其中 web 选项卡下的 Web 是必选的。这个包是整个项目的基础。这个包里面集成了 Spring 、WebMvc 、tomcat 以及其他各种基本能力。

点击 Next 进入下一步,这一步没啥好说的。就是让你确认自己的项目名以及项目路径。确认无误,点 Finish 完成创建即可。

 

 

2)编写第一个controller

使用idea工具创建一个maven工程,该工程为普通的java工程即可

 

 

 

 

 

 

 

 

 

 

3)restful接口如何编写

接口

测试代码

 

 

 

 

4)springboot常用注解以及作用

1、@SpringBootApplication
这个注解是Spring Boot最核心的注解,用在 Spring Boot的主类上,标识这是一个 Spring Boot 应用,用来开启 Spring Boot 的各项能力。实际上这个注解是@Configuration,@EnableAutoConfiguration,@ComponentScan三个注解的组合。由于这些注解一般都是一起使用,所以Spring Boot提供了一个统一的注解@SpringBootApplication。

2、@EnableAutoConfiguration
允许 Spring Boot 自动配置注解,开启这个注解之后,Spring Boot 就能根据当前类路径下的包或者类来配置 Spring Bean。
如:当前类路径下有 Mybatis 这个 JAR 包,MybatisAutoConfiguration 注解就能根据相关参数来配置 Mybatis 的各个 Spring Bean。
@EnableAutoConfiguration实现的关键在于引入了AutoConfigurationImportSelector,其核心逻辑为selectImports方法,逻辑大致如下:
 ● 从配置文件META-INF/spring.factories加载所有可能用到的自动配置类;
 ● 去重,并将exclude和excludeName属性携带的类排除;
 ● 过滤,将满足条件(@Conditional)的自动配置类返回;

3、@Configuration
用于定义配置类,指出该类是 Bean 配置的信息源,相当于传统的xml配置文件,一般加在主类上。如果有些第三方库需要用到xml文件,建议仍然通过@Configuration类作为项目的配置主类——可以使用@ImportResource注解加载xml配置文件。

4、@ComponentScan
组件扫描。让spring Boot扫描到Configuration类并把它加入到程序上下文。
@ComponentScan注解默认就会装配标识了@Controller,@Service,@Repository,@Component注解的类到spring容器中。

5、@Repository
用于标注数据访问组件,即DAO组件。
使用@Repository注解可以确保DAO或者repositories提供异常转译,这个注解修饰的DAO或者repositories类会被ComponetScan发现并配置,同时也不需要为它们提供XML配置项。

6、@Service
一般用于修饰service层的组件

7、@RestController
用于标注控制层组件(如struts中的action),表示这是个控制器bean,并且是将函数的返回值直 接填入HTTP响应体中,是REST风格的控制器;它是@Controller和@ResponseBody的合集。

8、@ResponseBody
表示该方法的返回结果直接写入HTTP response body中
一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据。

9、@Component
泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

10、@Bean
相当于XML中的,放在方法的上面,而不是类,意思是产生一个bean,并交给spring管理。

11、@AutoWired
byType方式。把配置好的Bean拿来用,完成属性、方法的组装,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
当加上(required=false)时,就算找不到bean也不报错。

12、@Qualifier
当有多个同一类型的Bean时,可以用@Qualifier("name")来指定。与@Autowired配合使用

13、@Resource(name="name",type="type")
没有括号内内容的话,默认byName。与@Autowired干类似的事。

14、@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解;提供路由信息,负责URL到Controller中的具体函数的映射,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

15、@RequestParam
用在方法的参数前面。例:
@RequestParam String a =request.getParameter("a")。

16、@PathVariable
路径变量。参数与大括号里的名字一样要相同。例:
RequestMapping("user/get/mac/{macAddress}")
public String getByMacAddress(@PathVariable String macAddress){
  //do something;
}

17、@Profiles
Spring Profiles提供了一种隔离应用程序配置的方式,并让这些配置只能在特定的环境下生效。
任何@Component或@Configuration都能被@Profile标记,从而限制加载它的时机。
@Configuration
@Profile("prod")
public class ProductionConfiguration {
// ...
}

18、@ConfigurationProperties
Spring Boot可使用注解的方式将自定义的properties文件映射到实体bean中,比如config.properties文件。
@Data
@ConfigurationProperties("rocketmq.consumer")
public class RocketMQConsumerProperties extends RocketMQProperties {
private boolean enabled = true;
private String consumerGroup;
private MessageModel messageModel = MessageModel.CLUSTERING;
private ConsumeFromWhere consumeFromWhere = ConsumeFromWhere.CONSUME_FROM_LAST_OFFSET;
private int consumeThreadMin = 20;
private int consumeThreadMax = 64;
private int consumeConcurrentlyMaxSpan = 2000;
private int pullThresholdForQueue = 1000;
private int pullInterval = 0;
private int consumeMessageBatchMaxSize = 1;
private int pullBatchSize = 32;

}

 

5)如何使用mybaits-plus

(1)创建一个spring boot web工程

(2)引入依赖

 

 

3)配置文件application.yml

(4)实体类User

(5)创建Mapper接口

(6)创建Service接口

UserService

 

 

 UserServiceImpl
(7)创建controller
(8)用户列表页面
(9)启动类
(10)测试访问

 

 

6)mybaits常用注解以及作用

一、顶级标签
1、sql – 可被其他语句引用的可重用语句块
<sql id="valid"> where valid = 1 </sql>

<select id = 'queryUser'>select * from user <include refid = 'valid'></include>
2、insert – 映射插入语句
<insert id = "saveUser">insert into User (id,name,sex) values (#{id},#{name},#{sex})<insert>
3、update – 映射更新语句
<update id="updateUser">
update User set
name = #{name},
sex= #{sex}
where id = #{id}
</update>
4、delete – 映射删除语句
<delete id="deleteUser">
delete from User where id = #{id}
</delete>
二、动态sql标签
1、if
<select id="findUserByName"
resultType="User">
SELECT * FROM User
WHERE valid = 1
<if test="name!= null">
AND name like #{name}
</if>
</select>
2、choose (when, otherwise)
<select id="findUser"
resultType="User">
SELECT * FROM User WHERE age = 26
<choose>
<when test="name!= null">
AND name like #{name}
</when>
<when test="sex!= null ">
AND sex like #{sex}
</when>
<otherwise>
AND valid = 1
</otherwise>
</choose>
</select>
3、trim (where, set)
//prefixOverrides 属性会忽略通过管道分隔的文本序列(注意此例中的空格也是必要的)。它的作用是移除所有指定在 prefixOverrides 属性中的内容,并且插入 prefix 属性中指定的内容。
<trim prefix="WHERE" prefixOverrides="AND |OR ">
...
</trim>

//set 元素会动态前置 SET 关键字,同时也会删掉无关的逗号
<trim prefix="SET" suffixOverrides=",">
...
</trim>
4、foreach
//collection="要遍历的集合"
//item = "可以在元素体内使用的集合项"
//index = "索引"
//open = "开始字符串"
//separator = "分隔符"
//close = "结束字符串"
<select id="selectUser" resultType="User">
SELECT *
FROM User
WHERE ID in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
5、bind
//bind可以创建一个变量并将其绑定到上下文
<select id="selectUser" resultType="user">
<bind name="pattern" value="'%' + _parameter.getTitle() + '%'" />
SELECT * FROM User
WHERE name LIKE #{pattern}
</select>
6、xml中的timestamp比较
第一种写法:

原符号 < <= > >= & ' "
替换符号 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot;


例如:sql如下:
create_date_time &gt;= #{startTime} and create_date_time &lt;= #{endTime}
第二种写法:
大于等于
<![CDATA[ >= ]]>
小于等于
<![CDATA[ <= ]]>


例如:sql如下:
create_date_time <![CDATA[ >= ]]> #{startTime} and create_date_time <![CDATA[ <= ]]> #{endTime}
<select id="getUser"
resultType="java.lang.String" >
select name from user
where birthday &lt; TO_TIMESTAMP(#{start}, 'yyyy-mm-dd hh24:mi:ss')
and birthday &gt;= TO_TIMESTAMP(#{end}, 'yyyy-mm-dd hh24:mi:ss') order by start desc LIMIT 1;
</select>
7、@Param
@Param是MyBatis所提供的(org.apache.ibatis.annotations.Param),作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,一般在2=<参数数<=5时使用最佳。

(1)原始的方法

当只有一个参数时,没什么好说的,传进去一个值也只有一个参数可以匹配。当存在多个参数时,传进去的值就区分不开了,这时可以考虑用Map,例如接口

public List<Role> findRoleByMap(Map<String, Object> parameter);
<select id="findRoleByMap" parameterType="map" resultType="role">
SELECT id,name FROM t_role
WHERE roleName=#{roleName}
AND note=#{note}
<select>
(2) 使用@Param

很明显上面的缺点就在于可读性差,每次必须阅读他的键,才能明白其中的作用,并且不能限定其传递的数据类型,下面是使用@Param的情况,需要将接口改为

public List<Role> findRoleByAnnotation(@Param("roleName") String roleName, @Param("note") String note);
这样我们就可以直接传入对应的值了。

当然也可以使用Java Bean来传递多个参数,定义一个POJO

public class RoleParam {
private String roleName;
private String note;
/*getter和setter*/
}
此时接口就变为

public List<Role> findRoleByBean(RoleParam role);
这样对应的xml文件与1处的区别就在于id和parameterType发生了变化,id对应的方法和parameterType对应该类的权限定名。

而使用更多的场景可能是这样的,对应多个POJO

public List<Role> findRoleByMix(@Param("roleP") RoleParam role, @Param("permissionP") PermissionParam permission);
这样就可以进行如下映射

<select id="findRoleByMix" resultType="role">
SELECT id,name FROM t_role
WHERE roleName=#{roleP.roleName}
AND note=#{rolep.note}
AND level=#{permissionP.level}
<select>
注意此时并不需要写出parameterType属性,Mybatis会进行自动搜索。

(3)总结

当你不使用@Param注解来声明参数时,必须使用使用 #{}方式;
便于传多个参数;
类似于别名之类的功能;
三、批量插入
<?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.center.manager.mapper.FundMapper">

<insert id="insertForeach" parameterType="java.util.List" useGeneratedKeys="false">
insert into fund
( id,fund_name,fund_code,date_x,data_y,create_by,create_date,update_by,update_date,remarks,del_flag)
values
<foreach collection="list" item="item" index="index" separator=",">
(
#{item.id},
#{item.fundName},
#{item.fundCode},
#{item.dateX},
#{item.dataY},
#{item.createBy},
#{item.createDate},
#{item.updateBy},
#{item.updateDate},
#{item.remarks},
#{item.delFlag}
)
</foreach>
</insert>
</mapper>
四、useGeneratedKeys参数
1、在settings元素中设置useGeneratedKeys参数
对于支持自动生成记录主键的数据库,如:MySQL,SQL Server,此时设置useGeneratedKeys参数值为true,在执行添加记录之后可以获取到数据库自动生成的主键ID。
实际上,在settings元素中设置useGeneratedKeys是一个全局参数,但是只会对接口映射器产生影响,对xml映射器不起效。

<settings>
<!--
允许JDBC支持自动生成主键,需要驱动兼容。
如果设置为true则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。 -->
<setting name="useGeneratedKeys" value="true" />
</settings>
此时,在接口映射中添加记录之后将返回主键ID。

public interface UserMapper {
// 受全局useGeneratedKeys参数控制,添加记录之后将返回主键id
@Insert("insert into user(id,name,age) values(#{id},#{name},#{age})")
Integer insertUser(User user);
}
另外,在settings元素中设置的全局useGeneratedKeys参数对于xml映射器无效。如果希望在xml映射器中执行添加记录之后返回主键ID,则必须在xml映射器中明确设置useGeneratedKeys参数值为true。

2、在xml映射器中配置useGeneratedKeys参数
<!-- 插入数据:返回记录的id值 -->
<insert id="insertUser" parameterType="com.guor.bean.User" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
insert into user(id,name,age) values(#{id},#{name},#{age})
</insert>
xml映射器中配置的useGeneratedKeys参数只会对xml映射器产生影响,且在settings元素中设置的全局useGeneratedKeys参数值对于xml映射器不产生任何作用。

3、在接口映射器中设置useGeneratedKeys参数
// 设置useGeneratedKeys为true,返回数据库自动生成的记录主键id
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert("insert into user(id,name,age) values(#{id},#{name},#{age})")
Integer insertUser(User user);
请注意如果此时在接口映射器中又明确设置了useGeneratedKeys参数,那么注解映射器中的useGeneratedKeys参数值将覆盖settings元素中设置的全局useGeneratedKeys参数值。
举个例子:先在settings元素中设置全局useGeneratedKeys参数值为true,再在接口映射器中设置useGeneratedKeys参数值为false,添加记录之后将不能返回注解ID。

五、MyBatis xml文件中postgres数据库字符串转timestamp写法
<select id="getName" resultType="java.lang.String" >
SELECT name
FROM user
WHERE birthdaey &lt; TO_TIMESTAMP(#{start}, 'yyyy-mm-dd hh24:mi:ss')
AND birthdaey &gt;= TO_TIMESTAMP(#{end}, 'yyyy-mm-dd hh24:mi:ss')
ORDER BY birthdaey DESC
LIMIT 1;
</select>
六、鉴别器
<resultMap type="com.gong.mybatis.bean.Employee" id="MyEmpDis">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="gender" property="gender"/>
<result column="email" property="email"/>
<discriminator javaType="string" column="gender">
<case value="0" resultType="com.gong.mybatis.bean.Employee">
<association property="dept" select="com.gong.mybatis.dao.DepartmentMapper.getDeptById"
column="d_id">
</association>
</case>
<case value="1" resultType="com.gong.mybatis.bean.Employee">
<id column="id" property="id"/>
<result column="last_name" property="lastName"/>
<result column="gender" property="gender"/>
<result column="last_name" property="email"/>
</case>
</discriminator>
</resultMap>
<select id="getEmpByIdStep" resultMap="MyEmpDis">
select * from tbl_employee where id=#{id}
</select>

7)编写一个简单的登陆注册功能

1.添加依赖

在这里插入图片描述

2.在yml文件中进行配置

3.编写实体类与Dao层

dao层:

实体类

4.在Mapper中实现dao层的功能

5.最后编写Services层

登录:

注册:
在这里插入图片描述

6.最后验证成功

 

 

在这里插入图片描述

posted @ 2021-08-18 00:35  小阿古  阅读(158)  评论(0编辑  收藏  举报