[TOC]html
因为框架以及一些兼容性问题,咱们采用你们通用的 JAVA 1.8 sdk。前端
下载地址: http://www.oracle.com/technet...java
安装完成以后须要设置环境变量。git
设置完成以后,验证系统是否能够正常运行JAVAgithub
这个就不简述了,你们自由发挥。可是推荐入正版。web
下载地址: https://maven.apache.org/down...spring
下载以后解压到文件夹,而后与Java sdk同样配置一个环境变量。
验证命令sql
> mvn -v Apache Maven 3.5.4 (1edded0938998edf8bf061f1ceb3cfdeccf443fe; 2018-06-18T02:33:1 4+08:00) Maven home: D:\JAVA_TOOLS\apache-maven-3.5.4\bin\.. Java version: 1.8.0_181, vendor: Oracle Corporation, runtime: E:\Java\jre Default locale: zh_CN, platform encoding: GBK OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
打开IDEA,而后新建项目。在左侧选择Spring Initializr,右侧SDK选择1.8。
点击Next
进入下一个界面。
在这个界面上,能够按照本身的发挥编写点东西。可是做为新手建议不作任何修改,接着Next
这个界面上,要选择 1. WEB -> WEB 2. SQL -> MyBatis 。 点击Next
,配置项目存放地址。点击Finish
建立项目,并由IDEA载入项目。数据库
这个时候你能够稍微休息一下,等待Maven初始化载入所须要的包。apache
这个就是项目初始化完成的目录。
在main
目录下方新建一个DB
目录,而且在目录上右键点击,新建一个Sqlite数据库。
在右侧DataBase
中点击数据库,右键Open Console
,运行以下脚本,建立一个表:
create table hello ( id INTEGER primary key, title varchar(150), text TEXT );
打开pom.xml
文件,在dependencies
节点中增长如下节点
<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.21.0.1</version> </dependency>
保存以后,稍等一会,IDEA会经过MAVEN拉取指定版本的包。
若是没有成功拉取到包,能够尝试手动拉取。
点击刷新,查看dependencies是否多了Sqlite包。
建立config
目录。新增MyBatisConfig
文件,代码以下
package com.example.demo.Config; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.sqlite.SQLiteDataSource; import javax.sql.DataSource; @Configuration public class MyBatisConfig { @Autowired private DataSourceProperties dataSourceProperties; @Bean(name="dataSource") public DataSource dataSource() { SQLiteDataSource dataSource = new SQLiteDataSource(); dataSource.setUrl(dataSourceProperties.getUrl()); return dataSource; } public SqlSessionFactory sqlSessionFactory() throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource()); return sqlSessionFactoryBean.getObject(); } }
增长MyBatis的扫描配置文件,新建文件MyBatisMapperScannerConfig
,代码以下:
package com.example.demo.Config; import org.mybatis.spring.mapper.MapperScannerConfigurer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyBatisMapperScannerConfig { @Bean public MapperScannerConfigurer mapperScannerConfigurer() { MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); //com.example.demo.dal.mapper 这个包名是全部的Mapper.java文件所在的路径,该包下面的子包里面的文件一样会扫描到。 //此包名与具体的应用的名称相关 mapperScannerConfigurer.setBasePackage("com.example.demo.Mapper"); return mapperScannerConfigurer; } }
打开DemoApplication
文件。增长新的注解
package com.example.demo; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; // 下面这一行为新增数据库关联注解 @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) @MapperScan("com.example.demo.mapper") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
在目录中建立Model
目录,而且添加HelloModel
类文件。
在文件中输入数据库对象结构。
package com.example.demo.Model; public class HelloModel { private long Id; private String Title; private String Text; }
在文件中,点击右键,选择Generate
选择 Getter and Setter
自动生成对象的GET,SET。
处理完成以后的文件应该是这样的
package com.example.demo.Model; public class HelloModel { private long Id; public long getId() { return Id; } public void setId(long id) { Id = id; } public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getText() { return Text; } public void setText(String text) { Text = text; } private String Title; private String Text; }
与Model同目录建立文件夹Mapper
,新建一个HelloMapper
类文件,编写如下内容。
package com.example.demo.Mapper; import com.example.demo.Model.*; import org.apache.ibatis.annotations.*; import org.springframework.stereotype.Component; import java.util.List; @Mapper @Component public interface HelloMapper { // 插入 并查询id 赋给传入的对象 @Insert("INSERT INTO hello(key, value) VALUES(#{key}, #{value})") @SelectKey(statement = "SELECT seq id FROM sqlite_sequence WHERE (name = 'hello')", before = false, keyProperty = "id", resultType = int.class) int insert(HelloModel model); // 根据 ID 查询 @Select("SELECT * FROM hello WHERE id=#{id}") HelloModel select(int id); // 查询所有 @Select("SELECT * FROM hello") List<HelloModel> selectAll(); // 更新 value @Update("UPDATE hello SET value=#{value} WHERE id=#{id}") int updateValue(HelloModel model); // 根据 ID 删除 @Delete("DELETE FROM hello WHERE id=#{id}") int delete(Integer id); }
同目录建立Service
文件夹,新建HelloService
类文件。编写如下代码
package com.example.demo.Service; import com.example.demo.Mapper.HelloMapper; import com.example.demo.Model.HelloModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @Service public class HelloService { private final HelloMapper dao; @Autowired public HelloService(HelloMapper dao) { this.dao = dao; } public boolean insert(HelloModel model) { return dao.insert(model) > 0; } public HelloModel select(int id) { return dao.select(id); } public List<HelloModel> selectAll() { return dao.selectAll(); } public boolean updateValue(HelloModel model) { return dao.updateValue(model) > 0; } public boolean delete(Integer id) { return dao.delete(id) > 0; } }
整个项目的Mapper,DAL文件架构看起来应该是这个样子的。
打开src\main\resources\application.properties
文件,配置数据库信息。
spring.datasource.driver-class-name=org.sqlite.JDBC spring.datasource.url=jdbc:sqlite:E:/Java/demo1/src/main/db/myDb spring.datasource.username=root spring.datasource.password=root
新建一个HelloWorld
的类。
将内容替换成以下
package com.example.demo.Controller; import org.springframework.web.bind.annotation.*; @RestController public class HelloWorld { @RequestMapping("/") public String Index() { return "Hello World"; } }
增长了一个名为Index
的方法,而且经过注解设置了如何访问此方法的路径。
点击右上角按钮,运行这个项目。
打开浏览器,输入http://localhost:8080
能够看到第一个控制器显示的内容。
双击hello
表,显示表内容
在表界面中,右键点击Add New Row
,伪造几条数据进去
在Controller/HelloWorld
文件中,新建List
方法。
package com.example.demo.Controller; import com.example.demo.Model.HelloModel; import com.example.demo.Service.HelloService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController public class HelloWorld { private final HelloService HelloService; @Autowired public HelloWorld(HelloService HelloService) { this.HelloService = HelloService; } @RequestMapping("/") public String Index() { return "Hello World"; } @RequestMapping("/list") public List<HelloModel> List() { return HelloService.selectAll(); } }
注意咱们建立了HelloWorld
的DAL层依赖注入。
从新运行整个项目,咱们输入http://localhost:8080/list
能够看到,服务端将数据库内容组合成了JSON输出给咱们了。
在model
文件夹中新建ReqBody
类文件。输入如下内容
package com.example.demo.Model; import com.fasterxml.jackson.annotation.JsonProperty; public class ReqBody { /** * 分支名 */ private String Name; public String getName() { return Name; } @JsonProperty(value="Name") public void setName(String name) { Name = name; } public String getEmail() { return Email; } @JsonProperty(value="Email") public void setEmail(String email) { Email = email; } private String Email; }
注意,关注JsonProperty这个注解,我看不少教程都只是说了,使用@RequestBody就能够将POST对象映射出来,可是,通过屡次尝试,发现必须增长这个注解而且指定解析名字。@RequestBody才会正确的解析提交的Application/Json数据格式。
咱们回到HelloWorld
这个Controller上。新增一个Post方法,而且指定他的访问路径。
@RequestMapping(value = "/post", method = RequestMethod.POST) public String Post( @RequestBody ReqBody map ) throws IOException { return "输入的姓名是" + map.getName() + ",电子邮件是:" + map.getEmail(); }
打开POSTMAN,POST请求这个接口。
做为有必定的.net开发基础的前端攻城狮,对于写JAVA仍是略有不擅长。主要须要知道什么是依赖注入,和控制反转。还有AOP编程。了解这些以后,对于写项目有莫大的帮助。
另外,十分感谢Java开发的朋友帮助解析困惑。@Alex @青龙
https://www.jianshu.com/p/418...