菜鸟学习SpringBoot——(五)集成mysql数据库

/*本人菜鸟一只,刚开始学习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方式访问数据库

  • 用注解

https://blog.csdn.net/wwwzydcom/article/details/116229214?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162803993216780366593694%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162803993216780366593694&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-116229214.first_rank_v2_pc_rank_v29&utm_term=mybatis-plus%E7%94%A8%E6%B3%A8%E8%A7%A3%E8%AE%BF%E9%97%AE%E6%95%B0%E6%8D%AE%E5%BA%93&spm=1018.2226.3001.4187

  • 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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值