springboot基础学习3: sparingboot和mybatis的基本使用

在mybatis和springboot时有两种方式,一种是使用传统的xml,还有一种是使用注解。
一、使用传统的xml配置可以灵活动态生成sql,方便调整sql. 先介绍xml的方式。
1、首先创建实体

package org.learn.boot.mybatis.demo.entity;

import lombok.Data;

import java.util.Date;

/**
 * ClassName: Bank
 * Description: 实体类
 * Date:     2019/3/21 15:50
 * History:
 * <version> 1.0
 * @author lin
 */
@Data
public class Bank {

    private Integer id;

    private String code;

    private String name;

    private Date createTime;


}

2、创建mapper

package org.learn.boot.mybatis.demo.mapper;


import org.learn.boot.mybatis.demo.entity.Bank;

import java.util.List;

/**
 * ClassName: BankMapper 使用 xml的配置方式
 * Description: 测试mybatis
 * Date:     2019/3/21 16:07
 * History:
 * <version> 1.0
 * @author lin
 */
public interface BankMapper {

    /**
     * 查询全部
     * @Description 查询全部
     * @param
     * @return java.util.List<com.base.entity.Bank>
     * @exception   
     * @author lin
     * @Date 16:09 2019/3/21
     **/
    List<Bank> findAll();

    /**
     * 根据id查询
     * @Description 根据id查询
     * @param id
     * @return com.base.entity.Bank
     * @exception   
     * @author lin
     * @Date 16:10 2019/3/21
     **/
    Bank getOne(Integer id);

    /**
     * 添加
     * @Description
     * @param bank
     * @return void
     * @exception   
     * @author lin
     * @Date 16:11 2019/3/21
     **/
    void insert(Bank bank);

    /**
     * 更新
     * @Description
     * @param bank
     * @return void
     * @exception   
     * @author lin
     * @Date 16:11 2019/3/21
     **/
    void update(Bank bank);

    /**
     * 删除
     * @Description
     * @param id
     * @return void
     * @exception   
     * @author lin
     * @Date 16:11 2019/3/21
     **/
    void delete(Integer id);
}

3、编写controller

package org.learn.boot.mybatis.demo.mapper;


import org.learn.boot.mybatis.demo.entity.Bank;

import java.util.List;

/**
 * ClassName: BankMapper 使用 xml的配置方式
 * Description: 测试mybatis
 * Date:     2019/3/21 16:07
 * History:
 * <version> 1.0
 * @author lin
 */
public interface BankMapper {

    /**
     * 查询全部
     * @Description 查询全部
     * @param
     * @return java.util.List<com.base.entity.Bank>
     * @exception   
     * @author lin
     * @Date 16:09 2019/3/21
     **/
    List<Bank> findAll();

    /**
     * 根据id查询
     * @Description 根据id查询
     * @param id
     * @return com.base.entity.Bank
     * @exception   
     * @author lin
     * @Date 16:10 2019/3/21
     **/
    Bank getOne(Integer id);

    /**
     * 添加
     * @Description
     * @param bank
     * @return void
     * @exception   
     * @author lin
     * @Date 16:11 2019/3/21
     **/
    void insert(Bank bank);

    /**
     * 更新
     * @Description
     * @param bank
     * @return void
     * @exception   
     * @author lin
     * @Date 16:11 2019/3/21
     **/
    void update(Bank bank);

    /**
     * 删除
     * @Description
     * @param id
     * @return void
     * @exception   
     * @author lin
     * @Date 16:11 2019/3/21
     **/
    void delete(Integer id);
}

4、编写Bank映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.learn.boot.mybatis.demo.mapper.BankMapper" >
     <resultMap id="BaseResultMap" type="org.learn.boot.mybatis.demo.entity.Bank">
         <id column="id" property="id" javaType="INT"/>
         <result column="name" property="name" jdbcType="VARCHAR"/>
         <result column="code" property="code" jdbcType="VARCHAR"/>
         <result column="create_time" property="createTime" jdbcType="DATE"/>
     </resultMap>

    <sql id="Base_Column_List">
        id, code, name, create_time
    </sql>

    <select id="findAll" resultMap="BaseResultMap">
        SELECT 
        <include refid="Base_Column_List"/>
             FROM c_bank
    </select>

    <select id="getOne" parameterType="java.lang.Integer" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
           FROM c_bank
           WHERE id=#{id}
    </select>
 <!--在插入时字段要和数据库的字段对应,不然会报错-->
    <insert id="insert" parameterType="org.learn.boot.mybatis.demo.entity.Bank">
        INSERT INTO
                  c_bank
                  (name,code,create_time)
          VALUES
                  (#{name},#{code},#{createTime})
    </insert>

    <update id="update" parameterType="org.learn.boot.mybatis.demo.entity.Bank">
        UPDATE
                c_bank
        SET
         <if test="name != null">name=#{name},</if>
         <if test="code != null">code=#{code},</if>
         WHERE
              id=#{id}
    </update>

    <delete id="delete" parameterType="java.lang.Integer">
          DELETE FROM
                   c_bank
          WHERE
                   id=#{id}
    </delete>
</mapper>

5、指定了 Mybatis 基础配置文件和实体类映射文件的地址
mybatis_config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <typeAliases>
       <typeAlias alias="Integer" type="java.lang.Integer"/>
       <typeAlias alias="String"  type="java.lang.String"/>
       <typeAlias alias="String"  type="java.lang.String"/>
       <typeAlias alias="Date"    type="java.util.Date"/>
   </typeAliases>
</configuration>

6、在application.properties中加入 mybatis的配置

//mybatis 配置 指定文件和实体映射文件地址
mybatis.config-location=classpath:mybatis_config.xml
mybatis.mapper-locations=classpath:mybatis/*.xml

二、使用注解的方式,首先要在pom文件中添加mybatis依赖
1、添加依赖配置,
使用了该Starter之后,只需要定义一个DataSource即可,它会自动创建使用该DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。会自动扫描你的Mappers,连接到SqlSessionTemplate,并注册到Spring上下文中。

<!--mybatis 依赖-->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.0.0</version>
		</dependency>

2、然后在application.properties中加入相关配置

server.port=8085
spring.banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/lin?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC&useSSL=true
spring.datasource.username=root
spring.datasource.password=123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
// 用来指定实体类的包路径
mybatis.type-aliases-package=org.learn.boot.mybatis.demo.entity

Spring Boot 会自动加载 spring.datasource.* 相关配置,数据源就会自动注入到 sqlSessionFactory 中,sqlSessionFactory 会自动注入到 Mapper 中我们就可以直接拿来用了。

在启动类中添加MapperScan注解用来扫描 mapper. 如果不在启动类中加入该注解,就要在mapper中添加@Mapper注解。但是如果多个mapper那么每一个都要添加就比较麻烦。所有的mapper接口类都在一个包下,还是使用@MapperScan注解更为方便。

package org.learn.boot.mybatis.demo;

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

@MapperScan("org.learn.boot.mybatis.demo.mapper")
@SpringBootApplication
public class LearnSpringBootMybatisDemoApplication {

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

}

3、编写mapper

package org.learn.boot.mybatis.demo.mapper;

import org.apache.ibatis.annotations.*;
import org.learn.boot.mybatis.demo.entity.Book;

import java.util.List;

/**
 * ClassName: BookMapper
 * Description: 测试 mybatis注解配置
 * Date:     2019/3/24 14:36
 * History:
 * <version> 1.0
 * @author lin
 */
public interface BookMapper {

    /**
     * @Description 查询全部
     * @param
     * @return java.util.List<com.base.entity.Book>
     * @exception
     * @author lin
     * @Date 14:41 2019/3/24
     **/
    @Select("SELECT * FROM c_book")
    @Results({@Result(property = "bookName",column = "book_name"),
    @Result(property = "bookNumber",column = "book_number"),
    @Result(property = "publishCompany",column = "publish_company")})
    List<Book> getAll();


    /**
     * @Description  根据id获取书信息
     * @param id
     * @return com.base.entity.Book
     * @exception   
     * @author lin
     * @Date 14:42 2019/3/24
     **/
    @Select("SELECT * FROM c_book WhERE id=#{id}")
    @Results({@Result(property = "bookName",column = "book_name"),
    @Result(property = "bookNumber",column = "book_number"),
    @Result(property = "publishCompany",column = "publish_company")})
    Book getOne(Integer id);


    /**
     * @Description  添加
     * @param book
     * @return int
     * @exception   
     * @author lin
     * @Date 14:48 2019/3/24
     **/
    @Insert("INSERT INTO c_book(book_name,book_number,publish_company) " +
            "VALUES(#{bookName},#{bookNumber},#{publishCompany})")
    void insert(Book book);

    /**
     * @Description 更新
     * @param book
     * @return void
     * @exception   
     * @author lin
     * @Date 14:54 2019/3/24
     **/
    @Update("UPDATE c_book SET book_name=#{bookName}, book_number=#{bookNumber}," +
            "publish_company=#{publishCompany} WHERE id=#{id}")
    void update(Book book);


    /**
     * @Description  删除
     * @param id
     * @return void
     * @exception   
     * @author lin
     * @Date 14:56 2019/3/24
     **/
    @Delete("DELETE FROM c_book WHERE id=#{id}")
    void delete(Integer id);
}

编写controller 层

package org.learn.boot.mybatis.demo.controller;

import org.learn.boot.mybatis.demo.entity.Book;
import org.learn.boot.mybatis.demo.mapper.BookMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * ClassName: BookController
 * Description: 测试 注解 mybatis
 * Date:     2019/3/24 15:03
 * History:
 * <version> 1.0
 * @author lin
 */
@RequestMapping(value = "/book")
@RestController
public class BookController {

    @Autowired
    private BookMapper bookMapper;

    /**
     * @Description 查询全部
     * @param
     * @return java.util.List<com.base.entity.Book>
     * @exception
     * @author lin
     * @Date 14:41 2019/3/24
     **/
    @RequestMapping(value = "getAll",method = RequestMethod.GET)
    public List<Book> getAll(){
        List<Book> books = bookMapper.getAll();
        return  books;
    }


    /**
     * @Description  根据id获取书信息
     * @param id
     * @return com.base.entity.Book
     * @exception
     * @author lin
     * @Date 14:42 2019/3/24
     **/
    @RequestMapping(value = "getOne",method = RequestMethod.GET)
    public Book getOne(Integer id){
        Book one = bookMapper.getOne(id);
        return  one;
    }


    /**
     * @Description  添加
     * @param book
     * @return int
     * @exception
     * @author lin
     * @Date 14:48 2019/3/24
     **/
    @RequestMapping(value = "save", method = RequestMethod.POST)
    public void insert(@RequestBody Book book){
         bookMapper.insert(book);
    }

    /**
     * @Description 更新
     * @param book
     * @return void
     * @exception
     * @author lin
     * @Date 14:54 2019/3/24
     **/
    @RequestMapping(value = "update", method = RequestMethod.POST)
    public  void update(@RequestBody Book book){
       bookMapper.update(book);
    }


    /**
     * @Description  删除
     * @param id
     * @return void
     * @exception
     * @author lin
     * @Date 14:56 2019/3/24
     **/
    @RequestMapping(value ="delete")
    public void delete(Integer id){
      bookMapper.delete(id);
    }
}

到这里就可以使用postman进行测试
在这里插入图片描述
查询所有书
在这里插入图片描述
sql文件

CREATE TABLE `c_book` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `book_name` varchar(24) DEFAULT NULL,
  `book_number` varchar(64) DEFAULT NULL,
  `publish_company` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=ut

参考:http://www.ityouknow.com/springboot/2016/11/06/spring-boot-mybatis.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值