Springboot入门笔记05——springboot 注解整合mybatis

springboot 注解整合mybatis

springboot 持久化数据方式介绍

1、原始java访问数据库
开发流程麻烦
(1)注册驱动/加载驱动
Class.forName(“com.mysql.jdbc.Driver”)
(2)建立连接
Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/dbname”,“root”,“root”);
(3)创建Statement
(4)执行SQL语句
(5)处理结果集
(6)关闭连接,释放资源
2、apache dbutils框架
比上一步简单点
官网:https://commons.apache.org/proper/commons-dbutils/
3、jpa框架
spring-data-jpa
jpa在复杂查询的时候性能不是很好
4、Hiberante 解释:ORM:对象关系映射Object Relational Mapping
企业大都喜欢使用hibernate
5、Mybatis框架
互联网行业通常使用mybatis
不提供对象和关系模型的直接映射,半ORM

springboot 集成mybatis 的步骤

1、pom.xml添加依赖
2、配置文件配置 jdbc 数据库连接地址、以及数据源等等
3、分包进行分层,编码结构清晰
4、创建表和相应的pojo类
5、实现mapper或者叫dao 层的功能编码,sql注入
6、实现service层的编码,调用dao层实现操作数据库
7、实现controller 层的代码,编写外部调用接口,内部调用service层方法处理mapper层的数据
8、添加@MapperScan注解,运行程序,调试bug,可能会修改配置比如mysql serverTimezone的影响,测试

1、首先来添加mybatis的相关依赖

			<!-- 引入starter-->
					<dependency>
					    <groupId>org.mybatis.spring.boot</groupId>
					    <artifactId>mybatis-spring-boot-starter</artifactId>
					    <version>1.3.2</version>
					    <scope>runtime</scope>			    
					</dependency>
		 			
		 	<!-- MySQL的JDBC驱动包	-->	
		 			<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<scope>runtime</scope>
					</dependency> 
			<!-- 引入第三方数据源 -->		
					<dependency>
						<groupId>com.alibaba</groupId>
						<artifactId>druid</artifactId>
						<version>1.1.6</version>
					</dependency>

2、修改配置文件application.properties

#可以自动识别,所以下面这行可写可不写
#spring.datasource.driver-class-name =com.mysql.jdbc.Driver
spring.datasource.driver-class-name =com.mysql.cj.jdbc.Driver
#数据库的连接地址,用户名,密码
spring.datasource.url=jdbc:mysql://localhost:3306/movie?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username =root
spring.datasource.password =112233
#数据源
#如果不使用默认的数据源 (com.zaxxer.hikari.HikariDataSource)
spring.datasource.type =com.alibaba.druid.pool.DruidDataSource

这里简单讲解下配置文件:
1、首先,声明jdbc的驱动这个可以写也可以不写,springboot 会自动识别当前的jdbc,这里仅供参考
2、配置好数据库的连接地址:修改为自己的本地或者远程数据库,这里注意,如果你的表里有time字段,最好设置下serverTimezone ,不设置的话 可能会有错误。。然后是数据库用户名和密码
3、数据源:这个可以改也可以不改,默认的是com.zaxxer.hikari.HikariDataSource;但是如果想改的话也可以改为淘宝的这个。

3、分包

一般写代码都要进行分层,这里最起码我们简单分一下包
在这里插入图片描述
一个简单的项目,打开分为这么几个包,
controller:主要方我们的api接口
domain:放一些实体类,同javaBean 、pojo 都可以,是我们的module层。
mapper:是存放所有访问数据库的接口,同dao.
service :业务逻辑层,我们的业务代码都放在这,service 又可以分为 接口 和实现类 两个包进行分类
utils:是我们的工具类
大家可以根据自己的习惯进行分一下包,然后就开始创建相关类了。

4、创建表和相应的pojo类

创建表,就打开数据库创建就行了。不管用什么方法,图形界面,命令行都可以。我们这里创建了一个movie数据库,一个user表。 有 id 、name 、create_time、age、phone 这几个字段
可以这样建 mysql -u root -p 密码 连接数据

create database movie;
use movie;
create table user(
	id int(32) primary key auto_increment,
	name varchar(32) ,
	age  int(32),
	phone varchar(32),
	create_time  datetime
);

然后创建相应的javaBean User,字段类型一定要和表相对应

5、实现mapper或者叫dao 层的功能编码,sql注入

在mapper包下创建 UserMapper 类,主要来操作User这个表

package com.mybatis.mapper;
import com.mybatis.domain.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
/**
 * 访问数据库的接口
 */
public interface UserMapper   {
    /**
     * @param user
     * @return 注意: 这里的#{}内容必须和User 类的属性一一对应;推荐使用#{}取值,不要用${},因为存在注入的风险
     */
    @Insert("INSERT INTO USER(name,phone,create_time,age) VALUES(#{name},#{phone},#{createTime},#{age})")
    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
    int insert(User user);


}

@Insert()注解可以将sql 映射user类,然后将数据写入user表 sql语句 values() 值以 #{属性名} 进行一一匹配
@Options配置,主键id是自增长的,我们如果要想把id映射到user类中,需要表明使用主键true,属性名和列名
useGeneratedKeys=true表示使用主键,true就可以返回。 keyProperty java对象的属性;keyColumn表示数据库的字段
mapper方法写完后,就可以写service 层方法进行调用

6、实现service层的编码,调用dao层实现操作数据库

一般先创建一个UserService 的接口,声明操作数据库的方法,比如需要有增删改查的方法,就在接口中声明。
然后创建一个impl 包,用来存放具体实现service的实现类 。比如现在创建一个UserServiceImpl.java 类。
这两个类的代码如下:

package com.mybatis.service;
import com.mybatis.domain.User;
public interface UserService {
    public int add(User user);
    //其他方法。
    //删
    //改
    //查
}

UserServiceImpl :

package com.mybatis.service.impl;


import com.mybatis.domain.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {


    @Autowired
    private UserMapper userMapper;
    @Override
    public int add(User user) {
        userMapper.insert(user);
        int id = user.getId();
        return id;
    }
}

UserServiceImpl首先实现了 UserService 接口,重写了操作方法
有两个注解 @Service@Autowired 通过注解声明,springmvc就能扫描到这个类,@Autowired封装了自动装配UserMapper 。调用 mapper层的insert() 方法进行注入,还可以拿到id

7、实现controller 层的代码,编写外部调用接口,内部调用service层方法处理mapper层的数据

package com.mybatis.controller;

import com.mybatis.domain.JsonData;
import com.mybatis.domain.User;
import com.mybatis.service.impl.UserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;

@RestController
@RequestMapping("/api/v1/user")
public class UserController {
    
    @Autowired
    private UserServiceImpl userService;
    
    /**
     * 功能描述: user 保存接口
     *
     * @return
     */
    @GetMapping("add")
    public Object add() {

        User user = new User();
        user.setAge(22);
        user.setCreateTime(new Date());
        user.setName("我最帅");
        user.setPhone("17615881722");
        int id = userService.add(user);
        return JsonData.buildSuccess(id);
    }

}

和前面一样,@RestController
@RequestMapping指定路径
方法get post根据情况自己定,这里就简单的将一个user对象写入user 表, 至于结果返回 自己定吧。

8、添加@MapperScan注解,运行主程序,进行测试,调用接口,查看数据库表。

必须在主程序中添加注解@MapperScan(“com.mybatis.mapper”)
告诉程序要扫描mapper包,不然写的dao层的代码无法找到

package com.mybatis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.mybatis.mapper")
public class ActionApplication  {

    public  static void main(String[] args){
        SpringApplication.run(ActionApplication.class,args);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值