博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot使用Mybatis(xml和注解)全解析
阅读量:5795 次
发布时间:2019-06-18

本文共 7511 字,大约阅读时间需要 25 分钟。

  刚毕业的第一份工作是 java 开发,项目中需要用到 mybatis,特此记录学习过程,这只是一个简单 demo,mybatis 用法很多不可能全部写出来,有更复杂的需求建议查看 mybatis 的官方中文文档,。下面时项目环境/版本。

  • 开发工具:IDEA
  • jdk 版本:1.8
  • springboot 版本:2.03

其他依赖版本见下面 pom.xml:

4.0.0
com.example
mybatis-test
0.0.1-SNAPSHOT
jar
mybatis-test
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.3.RELEASE
UTF-8
UTF-8
1.8
org.springframework.boot
spring-boot-starter-web
mysql
mysql-connector-java
runtime
org.mybatis.spring.boot
mybatis-spring-boot-starter
1.3.2
com.alibaba
druid-spring-boot-starter
1.1.9
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.5
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
复制代码

1.创建项目

​ 使用 idea 中的 spring initializr 生成 maven 项目,项目命令为 mybatis-test,选择 web,mysql,mybatis 依赖,即可成功。(详细过程不赘述,如有需要学习 springboot 创建过程,可参考。

​ 然后依照上面的 pom 文件,补齐缺少的依赖。接着创建包 entity,service 和 mybatis 映射文件夹 mapper,创建。为了方便配置将 application.properties 改成 application.yml。由于我们时 REST 接口,故不需要 static 和 templates 目录。修改完毕后的项目结构如下:

  修改启动类,增加@MapperScan("com.example.mybatistest.dao"),以自动扫描 dao 目录,避免每个 dao 都手动加@Mapper注解。代码如下:

@SpringBootApplication@MapperScan("com.example.mybatistest.dao")public class MybatisTestApplication {    public static void main(String[] args) {        SpringApplication.run(MybatisTestApplication.class, args);    }}复制代码

修改 application.yml,配置项目,代码如下:

mybatis:  #对应实体类路径  type-aliases-package: com.example.mybatistest.entity  #对应mapper映射文件路径  mapper-locations: classpath:mapper/*.xml#pagehelper物理分页配置pagehelper:  helper-dialect: mysql  reasonable: true  support-methods-arguments: true  params: count=countSql  returnPageInfo: checkserver:  port: 8081spring:  datasource:    name: mysqlTest    type: com.alibaba.druid.pool.DruidDataSource    #druid连接池相关配置    druid:      #监控拦截统计的filters      filters: stat      driver-class-name: com.mysql.jdbc.Driver      url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true      username: root      password: 123456      #配置初始化大小,最小,最大      initial-size: 1      min-idle: 1      max-active: 20      #获取连接等待超时时间      max-wait: 6000      #间隔多久检测一次需要关闭的空闲连接      time-between-eviction-runs-millis: 60000      #一个连接在池中的最小生存时间      min-evictable-idle-time-millis: 300000      #打开PSCache,并指定每个连接上PSCache的大小。oracle设置为true,mysql设置为false。分库分表设置较多推荐设置      pool-prepared-statements: false      max-pool-prepared-statement-per-connection-size: 20  http:    encoding:      charset: utf-8      enabled: true复制代码

2.编写代码

​ 首先创建数据表,sql 语句如下:

CREATE TABLE `user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(255) NOT NULL,  `age` tinyint(4) NOT NULL DEFAULT '0',  `password` varchar(255) NOT NULL DEFAULT '123456',  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;复制代码

​ 然后在 entity 包中创建实体类 User.java

public class User {    private int id;    private String name;    private int age;    private String password;    public User(int id, String name, int age, String password) {        this.id = id;        this.name = name;        this.age = age;        this.password = password;    }    public User(){}    //getter setter自行添加}复制代码

​ 在 dao 包下创建 UserDao.java

public interface UserDao {    //插入用户    int insert(User user);    //根据id查询    User selectById(String id);    //查询所有    List
selectAll();}复制代码

​ 在 mapper 文件夹下创建 UserMapper.xml,具体的 xml 编写方法查看文首的官方文档。

user
id,name,age,password
INSERT INTO
name,password,
age
#{name,jdbcType=VARCHAR},#{password},
#{age}
复制代码

​ 至此使用 mybatis 的代码编写完了,之后要用时调用 dao 接口中的方法即可。

3.测试

​ 我们通过编写 service,controller 然后使用 postman 进行测试。

​ 首先编写 UserService.java,代码如下:

@Componentpublic class UserService {    @Autowired    private UserDao userDao;    public User getByUserId(String id){        return userDao.selectById(id);    }    //获取全部用户    public List
getAll(){ return userDao.selectAll(); } //测试分页 public PageInfo
getAll(int pageNum,int pageSize){ PageHelper.startPage(pageNum,pageSize); List
users = userDao.selectAll(); System.out.println(users.size()); PageInfo
result = new PageInfo<>(users); return result; } public int insert(User user){ return userDao.insert(user); }}复制代码

​ 编写 UserController.java

@RestControllerpublic class UserController {    @Autowired    private UserService userService;    @GetMapping("/user/{userId}")    public User getUser(@PathVariable String userId){        return userService.getByUserId(userId);    }    @GetMapping("/user")    public List
getAll(){ return userService.getAll(); } @GetMapping("/user/page/{pageNum}") public Object getPage(@PathVariable int pageNum, @RequestParam(name = "pageSize",required = false,defaultValue = "10") int pageSize){ return userService.getAll(pageNum,pageSize); } @PostMapping("/user") public Object addOne(User user){ userService.insert(user); return user; }}复制代码

​ 启动项目,通过 postman 进行请求测试,测试结果如下:

  • 插入数据:

  • 查询数据

  • 分页查询

4.注解编写 sql

​ 上面使用的是 xml 方式编写 sql 代码,其实 mybatis 也支持在注解中编写 sql,这样可以避免编写复杂的 xml 查询文件,但同时也将 sql 语句耦合到了代码中,也不易实现复杂查询,因此多用于简单 sql 语句的编写。

​ 要使用注解首先将 applicaton.yml 配置文件中的mapper-locations: classpath:mapper/*.xml注释掉。然后在 UserDao.java 中加入 sql 注解,代码如下:

public interface UserDao {    //插入用户    @Insert("insert into user(name,age,password) value(#{name},#{age},#{password})")    @Options(useGeneratedKeys=true,keyColumn="id",keyProperty="id")    int insert(User user);    //根据id查询    @Select("select * from user where id=#{id}")    User selectById(String id);    //查询所有    @Select("select * from user")    List
selectAll();}复制代码

然后重新启动项目测试,测试结果跟上面完全一样。

本文原创发布于:

源码地址:.

转载地址:http://bxdfx.baihongyu.com/

你可能感兴趣的文章
Java数据持久层框架 MyBatis之API学习九(SQL语句构建器详解)
查看>>
30分钟Git命令“从入门到放弃”
查看>>
nginx : TCP代理和负载均衡的stream模块
查看>>
MYSQL数据库间同步数据
查看>>
DevOps 前世今生 | mPaaS 线上直播 CodeHub #1 回顾
查看>>
iOS 解决UITabelView刷新闪动
查看>>
行为型模式:观察者模式
查看>>
让前端小姐姐愉快地开发表单
查看>>
Dubbo笔记(四)
查看>>
Web前端JQuery入门实战案例
查看>>
Android开发教程 - 使用Data Binding(一) 介绍
查看>>
java B2B2C Springboot电子商城系统- SSO单点登录之OAuth2.0 登出流程(3)
查看>>
12月26日云栖精选夜读:CDN新品发布:阿里云SCDN安全加速开放公测
查看>>
USB 通信原理
查看>>
7zZip zip RAR iOS
查看>>
ssh无密码登陆远程主机
查看>>
date命令的详细用法!
查看>>
分布式存储ceph集群部署
查看>>
UiAutomator源码分析之UiAutomatorBridge框架
查看>>
python 开发之selenium
查看>>