玩转Spring Boot框架教程08之整合MyBatis注解方式

五、SpringBoot数据访问

SpringBoot整合MyBatis注解方式

1、环境搭建:

MySQL驱动jar包

MyBatis相关jar包

Druid连接池jar包

修改pom文件

<!-- mysql -->

       <dependency>

            <groupId>mysql</groupId>

           <artifactId>mysql-connector-java</artifactId>

       </dependency>

       <!--mybatis-->

       <dependency>

           <groupId>org.mybatis</groupId>

           <artifactId>mybatis</artifactId>

           <version>3.4.4</version>

       </dependency>

       <dependency>

           <groupId>org.mybatis.spring.boot</groupId>

           <artifactId>mybatis-spring-boot-starter</artifactId>

           <version>1.1.1</version>

       </dependency>

           <!--druid -->

       <dependency>

           <groupId>com.alibaba</groupId>

           <artifactId>druid</artifactId>

           <version>1.1.9</version>

       </dependency>

创建数据库及表

Sql语句

CREATE DATABASE springboot01;

USE springboot01

CREATE TABLE`user` (

  `id` INT(11) NOT NULL AUTO_INCREMENT,

  `name` VARCHAR(20) DEFAULT NULL,

  `age` INT(11) DEFAULT NULL,

  `sex` INT(11) DEFAULT NULL,

  `address` VARCHAR(50) DEFAULT NULL,

  PRIMARY KEY (`id`)

)ENGINE=INNODB DEFAULT CHARSET=utf8

INSERT INTO USER(NAME,age,sex,address)VALUES('张三',18,0,'北京');

INSERT INTO USER(NAME,age,sex,address)VALUES('李四',28,1,'上海');

 

目录结构:


2、代码编写

加入druid连接池配置

spring:

  #配置连接池druid

  datasource:

    type: com.alibaba.druid.pool.DruidDataSource

    driverClassName: com.mysql.jdbc.Driver

    url:jdbc:mysql://127.0.0.1:3306/springboot01?useUnicode=true&characterEncoding=utf8

    username: root

    password: 1234

    initialSize: 1

    minIdle: 3

    maxActive: 20

    # 配置获取连接等待超时的时间

    maxWait: 60000

    # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

    timeBetweenEvictionRunsMillis: 60000

    # 配置一个连接在池中最小生存的时间,单位是毫秒

    minEvictableIdleTimeMillis: 30000

    testWhileIdle:true

    testOnBorrow:false

    testOnReturn:false

 

编写控制器、业务逻辑层、数据持久层代码

dao:

@Mapper

publicinterface UserDao {

 

    @Insert("insert into user(name, age, sex, address)values(#{user.name},#{user.age},#{user.sex},#{user.address})")

    int add(@Param(value="user") User user);

 

    @Update("update user set name = #{user.name}, address =#{user.address} where id = #{user.id}")

    int update(@Param(value="user") User user);

 

    @Delete("delete from user where id = #{id}")

    int delete(intid);

 

    @Select("select id,name,age,sex,address from user where id =#{id}")

    UserfindUser(@Param("id") intid);

 

    @Select("select id,name,age,sex,address from user")

    List<User>findUserList();

 

}

Service:

@Service

publicclass UserServiceImpl implementsUserService{

   

    @Autowired

    private UserDao userDao;

 

    @Override

    public List<User> findUserList() {

        returnuserDao.findUserList();

    }

 

    @Override

    public User findUser(intid) {

   

        returnuserDao.findUser(id);

    }

 

    @Override

    publicint update(User user) {

        returnuserDao.update(user);

    }

 

    @Override

    publicint delete(intid) {

        returnuserDao.delete(id);

    }

 

    @Override

    publicint add(User u) {

        returnuserDao.add(u);

    }

 

}

Controller:

@RestController

@RequestMapping("/user")

publicclass UserController {

   

    @Autowired

    private UserService userService;

 

    @RequestMapping(value = "/list", method = RequestMethod.GET)

    public List<User> getUsers() {

       returnuserService.findUserList();

    }

 

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)

    public User getUserById(@PathVariable("id") intid) {

       returnuserService.findUser(id);

    }

 

    @RequestMapping(value = "/{id}", method = RequestMethod.PUT)

    public String updateUser(@PathVariable("id") Integer id,

                          @RequestParam(value = "name", required = true) String name,

                             @RequestParam(value = "sex", required = true) Integer sex,

                             @RequestParam(value = "age", required = true) Integer age,

                             @RequestParam(value = "address", required = true) String address

                             ) {

       User user = new User();

       user.setId(id);

       user.setName(name);

       user.setSex(sex);

       user.setAddress(address);

    intflag = userService.update(user);

       if(flag == 1) {

           return"success";

       }else {

           return"fail";

       }

 

    }

 

    @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)

    public String delete(@PathVariable(value = "id")intid) {

       intflag = userService.delete(id);

       if(flag == 1) {

           return"success";

        }else {

           return"fail";

       }

 

    }

 

    @RequestMapping(value = "", method = RequestMethod.POST)

    public String postUser(User user) {

    System.out.println("user的值:"+user);

       intflag = userService.add(user);

       if(flag ==1) {

          return"success";

      }else {

          return"fail";

      }

 

    }

}

 

SpringMvc注解:

@RestController:

@RestController注解相当于@ResponseBody + @Controller合在一起的作用;

@PathVariable:

@RequestMapping(value ="/{id}"中的{id}是个占位符,访问路径localhost:8080/user/110

想要获取110这个通过@PathVariable(value = "id")int id)即可;

@RequestParam:

@RequestParam是从request里面拿取值,@RequestParam(value ="name", required = true) String name;

支持下面四种参数

defaultValue如果本次请求没有携带这个参数,或者参数为空,那么就会启用默认值

name 绑定本次参数的名称,要跟URL上面的一样

required 这个参数是不是必须的

value 跟name一样的作用,是name属性的一个别名

MyBatis注解:

@Mapper

1、添加了@Mapper注解之后这个接口在编译时会生成相应的实现类,需要注意的是这个接口中不可以定义同名的方法,因为会生成相同的id,也就是说这个接口是不支持重载的;

    2、也是为了纳入Spring容器管理

@Insert

    插入语句

@Update

    更新语句

@Delete

    删除语句

@Select

  查询语句

@Param

接收参数绑定

@MapperScan注解:

@MapperScan(com.itcodeschool.dao)表示将扫描dao包下的所有类,可以替代每一个类上编写@Mapper注解。

3、运行测试:

测试工具Postman

增加:


查询:


查询所有:

修改:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值