普通方式

新建spring模块时引入如下内容:

启用devtools插件(热部署插件)

idea需要做如下配置

settings-build-compiler->勾选build project autoxxx选项

shift+alt+ctrl+/ ->registry->勾选compiler.automake.allow.when.app.running

在springboot插件里做如下配置

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--必须配置devtools-->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>

启用lombok(通过注解生成get/set等方法)

settings-plugins-搜索lombok-安装lombok插件

结构:

使用lombok插件的实体类

package com.example.bootssm1.domain;

import lombok.*;

import java.math.BigDecimal;
import java.util.Date;
//使用了lombok插件
@Data //自动生成get/set/toString等方法
@AllArgsConstructor//生成包含所有变量的构造方法
@NoArgsConstructor//生成无参的构造方法
public class BookInfo {
private Integer bookId;
private String bookName;
private String bookAuthor;
private BigDecimal bookPrice;
private Date bookDate;
}

Mapper类

package com.example.bootssm1.mapper;

import com.example.bootssm1.domain.BookInfo;
import org.apache.ibatis.annotations.Mapper; import java.util.List; @Mapper // 把该接口生成的代理类的实例交给spring容器控制
public interface BookMapper {
BookInfo getBookById(Integer bookId);
int saveBook(BookInfo bookInfo);
int batchBook(List<BookInfo> books);
}

Mapper配置xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC
"-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.bootssm1.mapper.BookMapper">
<select id="getBookById" resultType="bookInfo">
select book_id, book_name, book_author, book_price, book_date
from t_book where book_id = #{id}
</select> <insert id="saveBook" parameterType="bookInfo">
insert into t_book(book_name, book_author, book_price, book_date)
values(#{bookName}, #{bookAuthor}, #{bookPrice}, #{bookDate})
</insert> <insert id="batchBook" parameterType="list">
insert into t_book(book_name, book_author, book_price, book_date)
values
<foreach collection="books" item="val" open="(" close=")" separator=",">
#{val.bookName}, #{val.bookAuthor}, #{val.bookPrice},#{val.bookDate}
</foreach>
</insert>
</mapper>

application.yml

spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///testdb?useSSL=true
username: root
password: 123
mybatis:
configuration:
map-underscore-to-camel-case: true # book_id => bookId,book_name=> bookName 映射字段名到实体类的属性
mapper-locations: classpath:mapper/*Mapper.xml #指定mapper.xml的路径
type-aliases-package: com.example.bootssm1.domain # 定义别名名称 默认为实体类类名首字母小写

测试类:

package com.example.bootssm1;

import com.example.bootssm1.domain.BookInfo;
import com.example.bootssm1.mapper.BookMapper;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.Resource; @RunWith(SpringRunner.class)
@SpringBootTest
public class BootSsm1ApplicationTests { @Resource
private BookMapper bookMapper; @Test
public void selectOne() {
BookInfo book = bookMapper.getBookById(2);
System.out.println(book);
} @Test
public void save() {
BookInfo book = bookMapper.getBookById(2);
book.setBookName("新书");
int row = bookMapper.saveBook(book);
Assert.assertEquals(1, row);
} }

整合tk.mybatis

结构:

pom引入依赖

        <dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>

BaseMapper

package com.example.bootssm2.common;

import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper; /**
* 项目中所有Mapper类的父类
* @param <T>
*/
public interface BaseMapper<T> extends Mapper<T>, MySqlMapper<T> {
}

实体类:

package com.example.bootssm2.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor; import javax.persistence.Id;
import javax.persistence.Table;
import java.math.BigDecimal;
import java.util.Date; @Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "t_book")//设定表名
public class BookInfo {
@Id // 设定为主键
private Integer bookId;
private String bookName;
private String bookAuthor;
private BigDecimal bookPrice;
private Date bookDate;
}

具体Mapper(只要继承BaseMapper即可)

package com.example.bootssm2.mapper;

import com.example.bootssm2.common.BaseMapper;
import com.example.bootssm2.domain.BookInfo; public interface BookInfoMapper extends BaseMapper<BookInfo> { }

application.yml

spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///testdb?useSSL=true
username: root
password: 123
mapper:
identity: MYSQL
not-empty: true
mappers:
- tk.mybatis.mapper.common.Mapper
- tk.mybatis.mapper.common.MySqlMapper
#启用日志打印SQL语句
logging:
level:
com.example.bootssm2.mapper: debug

测试类:

package com.example.bootssm2;

import com.example.bootssm2.domain.BookInfo;
import com.example.bootssm2.mapper.BookInfoMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import tk.mybatis.spring.annotation.MapperScan; import java.util.Arrays; @SpringBootApplication
@MapperScan("com.example.bootssm2.mapper")
public class BootSsm2Application { public static void main(String[] args) {
ConfigurableApplicationContext
context = SpringApplication.run(BootSsm2Application.class, args);
BookInfoMapper mapper = context.getBean(BookInfoMapper.class);
BookInfo book1 = mapper.selectByPrimaryKey(2);
BookInfo book2 = mapper.selectByPrimaryKey(4);
BookInfo book3 = mapper.selectByPrimaryKey(5); mapper.insertList(Arrays.asList(book1, book2, book3));
}
}

最新文章

  1. 基于trie树做一个ac自动机
  2. Play jQuery with Node.js
  3. c中三大区的解析
  4. [Xamarin] 使用LayoutInflater.Inflate載入預先設計好的Layout並使用 (转帖)
  5. Eclipse 编译错误 Access restriction: The type &#39;JPEGCodec&#39; is not API (restriction on required library &#39;C:\Program Files\Java\jre7\lib\rt.jar&#39;)
  6. [Redux] Extracting Presentational Components -- Footer, FilterLink
  7. iOS图片设置圆角
  8. 仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表中为标识列指定显式值问题
  9. 201621123031 《Java程序设计》第13周学习总结
  10. Python爬虫入门教程 16-100 500px摄影师社区抓取摄影师数据
  11. ----关于JS中迭代的三个“FOR”----
  12. 【Java核心技术】类型信息(Class对象 反射 动态代理)
  13. angular的异步处理$q的使用(promise)
  14. Source Insight 查找的选择项
  15. Java 装饰器模式详解
  16. python singleton design pattern super() 多继承
  17. Eclipse CDT 配置C /C ++ 标准库 (UBUNTU 12 )
  18. 「小程序JAVA实战」小程序视频组件与api介绍(51)
  19. 014-CallbackServlet代码
  20. java中加密的方式概述

热门文章

  1. ASCII, UNICODE, UTF-8, 字符集理解
  2. day7 RHCE
  3. underscore.js 分析 第三天
  4. 二、Web框架实现
  5. TensorFlow深度学习实战---MNIST数字识别问题
  6. CentOS7.2最小化安装后系统优化
  7. nodejs的路径问题
  8. 深度学习论文笔记:Deep Residual Networks with Dynamically Weighted Wavelet Coefficients for Fault Diagnosis of Planetary Gearboxes
  9. PayPal接洽苹果 欲承接手机支付外包
  10. Fulfilling Work: The Shippers More entrepreneurs hire &#39;fulfillment&#39; outfits to store and ship their products