Spring框架基础之SpringBoot应用
SpringBoot 关系型数据库访问
SpringBoot 支持JdbcTemplate,mybatis 、JPA、Hibernate等技术。提供了大量相关的自动配置组件实现对象创建。
创建连接池对象
-
创建maven project ,在pom.xml文件中导入jar包
-
在src/main/source文件夹下新建application.properties文件,并配置参数
- spring.datasource.username=test - spring.datasource.password=test - spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe - spring.datasource.driverclassname=oracle.jdbc.OracleDriver - spring.datasource.maxIdle=10 //最大空闲数 - spring.datasource.minIdle=3 //最小空闲数 - spring.datasource.InitialSize=10//初始连接数 - spring.datasource.maxActive=100 //最大活动数 - spring.datasource.maxWait=1000 //最长等待时间
-
编写配置类,使用@SpringBootApplication开启组件扫描,自动配置等服务
JdbcTemplate 应用
-
根据表定义实现类
-
定义Dao接口
-
定义Dao实现类,并将JdbcTemplate注入Dao实现类
常用的JdbcTemplate对象的API - jdbcTemplate.update() //增删改 - JdbcTemplate.query() //多行查询 - JdbcTemplate.queryForObject() //单行查询 - BeanPropertiesRowMapper // 映射器,将记录映射成实体对象,同名映射规则。 注:除18种简单值类型外,均需使用映射器 接受返回值
mybatis 应用
- SpringBoot+mybatis 结合使用
-
导入Boot 和 mybatis相关jar包
-
编写application.properties文件,放入src/main/resources文件下
注:需添加mybaties.mapper-locations属性 spring.datasource.username=test spring.datasource.password=test spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe mybaties.mapperLocations = classpath:sql/*.xml
-
编写SQL定义文件放入src/main/resources/sql 文件夹下(分页查询语句)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <!-- namespace指定和哪个Mapper映射器接口对应 --> <mapper namespace="cn.xdl.mapper.Mapper"> <!-- pageSize 每页显示条数 page 页数 <select id="findByPage" resultType="cn.xdl.bean.Emp"> select * from (select e.* ,rownum r from emp e where rownum < #{arg0} * #{arg1}+1 order by id desc) where r > #{arg0} * (#{arg1}-1) </select> </mapper>
-
编写Mapper 映射器接口方法,与Sql定义文件对应
-
编写启动类RunBoot,在类定义前加@SpringBootApplication 和@MapperScan(basePackage=“cn.xdl.mapper”)
@SpringBootApplication @MapperScan(basePackages= {"cn.xdl.mapper"}) public class MyBootApplication { public static void main(String[] args) { ApplicationContext app = SpringApplication.run(MyBootApplication.class); Mapper map = app.getBean("mapper",Mapper.class); //按页数查找全部用户 List<Emp> emps = map.findByPage(5, 3); for( Emp emp : emps) { System.out.println(emp); } } }
- 基于标注形式的SpringBoot+mybatis
-\
-
JPA 访问数据库
-
概念:
Java Persistent API 是Java持久层API技术。(基于反射技术)
JPA 实现对象 和关系映射ORM,程序员对对象操作从而实现对数据库表操作。(封装了底层的JDBC+SQL使用过程)。 -
使用:
-
创建连接池对象;
-
在pom.xml添加spring-boot-start-data-jpa工具包;
-
根据表定义实体类,使用注解标记追加实体类;
@Entity @Table(name="对应数据库表名") public class BankUser implements Serializable { /**/ private static final long serialVersionUID = 1L; @Id //对应主键列名 @Column //若表中列名与实体类属性名相同可省略 private Integer id; @Column(name="num")//若名称不同需加name指定表中列名称 private String acc_no;
-
定义接口,继承JpaRepository (可以实现增删该查排序分页等功能);
import org.springframework.data.jpa.repository.JpaRepository; //泛型必须是引用类型的参数 public interface BankDao extends JpaRepository<BankUser, Integer>{ }// 可以选择继承:JpaRepository、PagingAndSortingRepository、CrudRepository。
-
分页操作
public void ss(){ Sort sort = new Sort( Direction.DESC , " id ") ; Pageable pageable = PageRequest . of ( page, size, sort);//page参数从0 开始 Page<BankUser> list = BankDao.findAll( pageable); Iterator<BankUser> it = list . iterator(); while(it.hasNext()){ BankUser user = it. next(); System.out.println(user.getId()+" "+user.getName()); } }
注:分页查询需要在application.properties文件中配置dialect 方言,指定生成那种数据库类型分页Sql
Spring.jpa.show-sql = true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.oracle10gdialect
-
SpringBoot 测试类
- 导入junit和spring-boot-starter-test包
- 在src\test\java 文件夹下编写测试类,并添加相关标注
@RunWith(SpringRunner.class) @SpringBootTest(classes = {RunBoot.class}) public class TestNewRepository{ @Autowired private BankDao bankDao; @Test public void test(){ List<BankUser> list = bankDao.findAll(); for(BankUser user:list){ System.out.println(user.getId()+" "+user.getName()) } } }
SpringBoot MVC 应用
设计spring-boot-starter-web工具集合。包含Springmvc、restfull、tomcat服务器等。
开发restful 服务
- 创建maven项目,在pom.xml 添加spring-boot-starter-web 等工具集合;
- 在application.properties文件中定义tomcat端口,并配置,数据库连接池等参数信息;
server.port = 8888 //配置端口号 #datasource 相关 spring.datasource.username=test spring.datasource.password=test spring.datasource.url=jdbc:oracle:thin:@localhost:1521:xe #pagehelper 分页查询相关 spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
- 编写配置类@SpringBootApplication,启动应用
@SpringBootApplication public class RunBoot{ public static void main (String [] args){ SpringApplication.run(RunBoot.class,args); } }
- 定义Controller,使用@RestController、@RequestMapping/@GetMapping、@Autowired
@RestController public class HelloController { @Autowired private BankDao dao; @GetMapping("/hello") public Map hello() { Map<String,String> map = new HashMap<String, String>(); map.put("name", "liming"); map.put("age","buzhidao"); return map; } @GetMapping("/user/list")//分页 排序查询 public List<BankUser> findAll(int page,int size,Sort sort){ Pageable pageable = PageRequest.of(page, size,sort); List<BankUser> users = dao.findAll(pageable).getContent(); return users; } }
开发html响应应用(jsp)(不常使用)
- maven 开发项目时,自带tomcat服务器,但这个tomcat不支持JSP,所以如果使用JSP开发,需要导入相关JAR包 tomcat-embed-jasper
- 在application.properties 文件中 需配置viewResolver 相关
-
JSP文件需放在src\main\webapp 文件夹下 spring.mvc.view.prefix= / spring.mvc.view.suffix= .jsp
开发html响应模板(thymeleaf)应用
1. thymeleaf 是什么
简单说 ,Thymeleaf 是一个 跟Veloccity 、FreeMarker 类似的 模板引擎,它可以完全代替JSP
2.Thymeleaf 优点
1. Thymeleaf 在是否有网络的情况下皆可运行。
3. Thymeleaf 开箱即用的特性。可以直接套用模板 实现JSTL,OGNL表达式效果,同时也可扩展和自定义方言。
4. Thymeleaf 提供spring标准方言和一个与 SpringMVC 完美集成的可选模块,可以快速的实现表单绑定、属性编辑器、国际化等功能
3. JSP和thymeleaf 模板输出区别:***
- 运行机制
- JSP: JSP—> servlet ----> html
- 模板: 模板文件 + 模型数据 ---- > html
- 复杂度不同
- JSP 支持语法 复杂
- 模板 支持模板 表达式
4.模板使用方式***
- 引入依赖: 可直接导入Jar包spring-boot-starter-thymeleaf
- 默认的模板映射路径是: src/main/resources/templates
- 可配置参数
#thymeleaf start
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
#开发时关闭缓存,不然没法看到实时页面
spring.thymeleaf.cache=false
#thymeleaf end
- 常用标签使用案例