/*本人菜鸟一只,刚开始学习spring boot,按照导师给的学习计划整理的学习内容,希望能对和我一样是菜鸟,刚学习spring boot的童鞋有帮助。由于菜鸟一只,以下内容没有能力原创,里面的内容都是各种百度整理出来的(东拼西凑),所以作者数量太多,不方便注明,如有冒犯,我立马删帖。请各位大佬多多海涵!*/
1、集成mysql
连接数据库
引入maven配置文件:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.26</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
配置文件配置数据库:
spring: profiles: active: dev datasource: driver-class-name: com.mysql.jdbc.Driver //SpringBoot 2.x 则改为 com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test username: root password: 123456 jpa: hibernate: ddl-auto: update show-sql: true
ddl-auto:create----每次运行该程序,没有表格会新建表格,表内有数据会清空 ddl-auto:create-drop----每次程序结束的时候会清空表 ddl-auto:update----每次运行程序,没有表格会新建表格,表内有数据不会清空,只会更新 ddl-auto:validate----运行程序会校验数据与数据库的字段类型是否相同,不同会报错
创建一个简单的表和对象
创建数据库test:
create database test
定义一个java类,并使用@Entity便签定义:
@Entity public class Test { private Integer id; private Integer age; private String name; @Id @GeneratedValue public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
然后发现数据库中自动生成这个表了
模拟GET、POST、PUT、DELETE等请求操作
-
查询数据(GET请求)
先在数据库test表中添加两条数据
先建立两个java类,一个是controller,一个是respository
@RestController public class TestController { @Autowired private TestRepository testRepository; @GetMapping(value="/tests") public List<Test> testList(){ return testRepository.findAll(); } }
public interface TestRepository extends JpaRepository<Test,Integer> { }
启动程序,浏览器输入http://localhost:5678/tests,可以以看到查询的结果
-
增加(POST请求)
@PostMapping(value="/tests") public Test testAdd(@RequestParam("age")Integer age,@RequestParam("name")String name){ Test test = new Test(); test.setAge(age); test.setName(name); return testRepository.save(test); }
-
修改(PUT操作)
@PutMapping(value="/tests/{id}") public Test testUpdate(@PathVariable("id") Integer id,@RequestParam("age") Integer age,@RequestParam("name")String name){ Test test = new Test(); test.setId(id); test.setAge(age); test.setName(name); return testRepository.save(test); }
-
删除(DELETE操作)
@DeleteMapping(value="/tests/{id}") public void testDelete(@PathVariable("id") Integer id){ Test test = testRepository.findById(id).get(); testRepository.delete(test); }
2、整合Mybatis-Plus
集成整合Mybatis-plus
https://blog.csdn.net/stronglyh/article/details/80951718
https://blog.csdn.net/stronglyh/article/details/80955432
用Mybatis-plus方式访问数据库
-
用注解
-
XML
https://blog.csdn.net/Zongzhe520/article/details/117216325
条件构造器
父类:AbstractWrapper
-
更新
使用UpdateWrapper
@SpringBootTest public class ControllerTest { @Autowired private EmployeeMapper employeeMapper; /** * 需求:将id=1的员工name改为scorpio 会造成数据丢失 因为 age 和 * admin 字段是基本类型 有默认值 0 * 当进行updateById 的时候 会默认添加进去 */ @Test public void testUpdate(){ Employee employee = new Employee(); employee.setId(1L); employee.setName("scorpio"); employeeMapper.updateById(employee); } /** * 需求:将id=9的员工name改为scorpio * UPDATE employee SET name=? WHERE (id = ?) * * wrapper.eq() 表示条件 * wrapper.set() 表示修改内容 */ @Test public void testUpdate2(){ UpdateWrapper<Employee> wrapper = new UpdateWrapper<>(); wrapper.eq("id",9L); wrapper.set("name","scorpio"); employeeMapper.update(null,wrapper); } /** * 需求:将id=9的员工age改为20, 如果传入uname变量值不等于null * 或者“”,修改为员工name为uname变量值 * UPDATE employee SET age=?,name=? WHERE (id = ?) */ @Test public void testUpdate3(){ String uname = "xxx"; UpdateWrapper<Employee> wrapper = new UpdateWrapper<>(); wrapper.eq("id",9L); wrapper.set("age",20); /*if (StringUtils.hasLength(uname)){ wrapper.set("name",uname); }*/ // 等价于上面的操作 wrapper.set(StringUtils.hasLength(uname),"name",uname); employeeMapper.update(null,wrapper); } /** * setSql * 需求:将id=9的用户name改为scorpio * UPDATE employee SET name='scorpio' WHERE (id = ?) */ @Test public void testUpdate4(){ UpdateWrapper<Employee> wrapper = new UpdateWrapper<>(); wrapper.eq("id",9L); wrapper.setSql("name='scorpio'");// 使用sql 片段 直接插入 employeeMapper.update(null,wrapper); } }
使用LambdaUpdateWrapper
/** * LambdaUpdateWrapper * 需求:将id=9的用户name改为scorpio */ @Test public void testUpdate5(){ LambdaUpdateWrapper<Employee> wrapper = new LambdaUpdateWrapper<>(); wrapper.eq(Employee::getId,9L); wrapper.set(Employee::getName,"scorpio"); employeeMapper.update(null,wrapper); }
-
查询操作
使用QueryWrapper和LambdaQueryWrapper
/** * QueryWrapper * 需求:查询name=scorpio, age=20的用户 * SELECT id,name,password,email,age,admin,dept_id * FROM employee WHERE (name = ? AND age = ?) */ @Test public void testQuery1(){ QueryWrapper<Employee> wrapper = new QueryWrapper<>(); /*wrapper.eq("name","scorpio"); wrapper.eq("age",20);*/ // 等价于上面 代码 wrapper.eq("name", "scorpio").eq("age", 20); System.out.println(employeeMapper.selectList(wrapper)); } /** * LambdaQueryWrapper * 需求:查询name=scorpio, age=20的用户 * SELECT id,name,password,email,age,admin,dept_id * FROM employee WHERE (name = ? AND age = ?) * * 开发中推荐使用 */ @Test public void testQuery2(){ LambdaQueryWrapper<Employee> wrapper = new LambdaQueryWrapper<>(); /*wrapper.eq(Employee::getName,"scorpio"); wrapper.eq(Employee::getAge,20);*/ // 等价于上面 代码 wrapper.eq(Employee::getName, "scorpio").eq(Employee::getAge, 20); System.out.println(employeeMapper.selectList(wrapper)); }
分页插件
<!-- 分页插件 --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.5</version> </dependency>
数据库连接驱动和连接池
datasource: name: mysql_test type: com.alibaba.druid.pool.DruidDataSource #druid相关配置 druid: #监控统计拦截的filters filters: stat driver-class-name: com.mysql.cj.jdbc.Driver #基本属性 url: jdbc:mysql://127.0.0.1:3306/test?charset=utf8mb4&useSSL=true username: root password: 123456 <!-- alibaba的druid数据库连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.9</version> </dependency>