springBoot作为现在的主流框架之一,将很多框架进行了融合,本编笔记记录的是mybatis的融合,SpringBoot+MyBatis融合有两种方式——原生xml方式和注解方式,,下面通过案例将两种方式都了解一下 。 。ps:我用的eclipse
创建好项目,首先导入jar包
<!-- springBoot父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<!-- 阿里数据连接池 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!-- jsp的支持依赖 -->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!-- mybaits依赖 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<!-- this is needed or IntelliJ gives junit.jar or junit-platform-launcher:1.3.2 not found errors -->
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
application.properties配置文件,下面过滤器是用来做log日志监控的(可以忽视)。配置文件也可以用.yml文件配置,不过我操作的时候出了一点问题,就是.yml文件里面不能写注释,所以就用的.properties文件,如果有大佬知道我的问题,请帮我解决一下。。感谢
#连接池
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/spring_aop?useUnicode=true&characterEncoding=utf8
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#修改连接池类型
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#过滤器
spring.datasource.druid.filters=stat,wall
#允许重写数据库连接池
spring.main.allow-bean-definition-overriding:true
#springmvc
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp
#配置mybatis
#扫描对象类 定义别名
mybatis.type-aliases-package=com.vp.springBoot_mybatis.domain
#xml实现,,载入接口的映射文件
#mybatis.mapper-locations=classpath:com/vp/springBoot_mybatis/config/*.xml
#控制台显示sql
logging.level.com.vp.springBoot_mybatis.mapper=debug
——xml的方式,不用再mapper注解类中写注解,通过映射类映射:
<?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.vp.springBoot_mybatis.mapper.BankMapper">
<insert id="saveBank" parameterType="Bank">
insert into bank
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="#{bid!=0}">bid,</if>
<if test="#{bname!=null}">bname,</if>
<if test="#{money!=0}">money</if>
</trim>
values
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="#{bid!=0}">#{bid},</if>
<if test="#{bname!=null}">#{bname},</if>
<if test="#{money!=0}">#{money}</if>
</trim>
</insert>
</mapper>
——注解方式,直接在mapper接口类中写入注解实现:
@Mapper //去掉BankMapper.xml配置文件,用注解来实现
public interface BankMapper {
@Insert("insert into bank(bid,bname,money) values(#{bid},#{bname},#{money})")
public void saveBank(Bank bank);
@Delete("delete from bank where bid=#{bid}")
int deleteBank(int bid);
@Update("update bank set bname=#{bname},money=#{money} where bid=#{bid}")
int updateBank(Bank bank);
//根据bid查询
@Results({
@Result(property="bid",column="bid"),
@Result(property="bname",column="bname"),
@Result(property="money",column="money")
})
@Select("select * from bank where bid=#{bid}")
Bank findById(int bid);
//根据bname模糊查询
@Select("select * from bank where bname like concat('%',#{bname},'%')")
// @Select("select * from bank where bname like '%${bname}%'")
List<Bank> findByName(String bname);
//查询所有
@Select("select * from bank")
List<Bank> findAll();
}
下面用测试类来测试一下方法:
@SpringBootTest
public class ApplicationTest {
@Autowired
private BankService bankService;
@Test
public void testSave() {
Bank bank = new Bank();
bank.setBid(107);
bank.setBname("小七");
bank.setMoney(777);
bankService.saveBank(bank);
}
@Test
void testDelete() {
bankService.deleteBank(0);
}
@Test
void testUpdate() {
Bank bank = new Bank();
bank.setBid(107);
bank.setBname("小七");
bank.setMoney(7777);
bankService.updateBank(bank);
}
@Test
void testFindById() {
System.out.println(bankService.findById(107));
}
@Test
void testFindByName() {
List<Bank> banks = bankService.findByName("三");
for (Bank bank : banks) {
System.out.println(bank);
}
}
@Test
void testFindAll() {
List<Bank> banks = bankService.findAll();
for (Bank bank : banks) {
System.out.println(bank);
}
}
}
案例只是做了简单的方法然后测试,没有做页面,所以控制层就随便写点儿:
@Controller
@RequestMapping("/")
public class BankController {
@Autowired
private BankService bankService;
@RequestMapping("saveBank")
public String saveBank(Bank bank) {
bankService.saveBank(bank);
return "index";
}
}