java项目集成mybatis_SpringBoot项目实战(4):集成Mybatis

前三节为开发SpringBoot项目的基础工作,接下来就正式开发web项目开发。本篇文章介绍SpringBoot如何集成Mybatis,往后会慢慢整理,比如整合logback日志记录、Aop、Filter、读取自定义配置文件、如何使用Idea+Maven构建SpringBoot多模块项目以及如何打包部署等等文章。

OK,继续。整合Mybatis前的准备工作:建数据库(mysql)

构建测试数据库(Mysql)

CREATE TABLE `message` (

`ID` int(50) NOT NULL AUTO_INCREMENT COMMENT 'ID',

`NICK_NAME` varchar(50) DEFAULT NULL COMMENT '昵称',

`IP` varchar(50) DEFAULT NULL COMMENT 'IP',

`INSERT_TIME` datetime DEFAULT NULL COMMENT '提交时间',

PRIMARY KEY (`ID`)

) ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8;

插一下哈: 是否有小伙伴经常遇到过这种情况:主键为自增,我开发期间插入了100条测试数据,开发完成后,直接通过工具导出mysql表,然后导入的生产线上的数据库中,当插入数据时,主键并不是从预想的0开始增加。曾经我就被这整懵逼过,后来下决心仔细看了看建表语句才发现了一些端倪。仔细看上面的建表语句,主键是自增的,并且在语句最后有这么一句:ENGINE=InnoDB AUTO_INCREMENT=51 DEFAULT CHARSET=utf8;这句的意思依次是:使用InnoDB 引擎,自增键的起始序号为51,默认编码为UTF-8。看到了吧?就是这个东西AUTO_INCREMENT。你建表的时候改成0哈,否则你懵逼了别怨我。

另附一个批量插入的存储过程

DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `autoInsert`()

BEGIN

DECLARE

i INT DEFAULT 0 ; -- 开始

SET autocommit = 0 ; -- 结束

WHILE (i < 1000) DO

REPLACE INTO message (

`ID`,

`NICK_NAME`,

`IP`,

`INSERT_TIME`

)

VALUE

(

i,

'zhangyd',

'127.0.0.1',

NOW()

) ;

SET i = i + 1 ;

END

WHILE ;

SET autocommit = 1 ; COMMIT ;

END

;;

DELIMITER ;

POM.xml配置

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

com.blog

blog

1.0-SNAPSHOT

org.springframework.boot

spring-boot-starter-parent

1.4.0.RELEASE

UTF-8

UTF-8

1.7

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

org.springframework.boot

spring-boot-starter-freemarker

org.springframework.boot

spring-boot-starter-jdbc

org.mybatis

mybatis-spring

1.2.2

org.mybatis

mybatis

3.2.8

org.apache.tomcat

tomcat-jdbc

mysql

mysql-connector-java

com.alibaba

fastjson

1.1.43

org.springframework

springloaded

1.2.3.RELEASE

org.springframework.boot

spring-boot-maven-plugin

org.springframework

springloaded

1.2.3.RELEASE

spring-milestone

https://repo.spring.io/libs-release

spring-milestone

https://repo.spring.io/libs-release

application.properties文件配置

spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true

spring.datasource.username=root

spring.datasource.password=root

spring.datasource.driver-class-name=com.mysql.jdbc.Driver

SB程序主函数

package com.blog;

import org.apache.ibatis.session.SqlSessionFactory;

import org.apache.tomcat.jdbc.pool.DataSource;

import org.mybatis.spring.SqlSessionFactoryBean;

import org.mybatis.spring.annotation.MapperScan;

import org.mybatis.spring.mapper.MapperScannerConfigurer;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.boot.context.properties.ConfigurationProperties;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.ComponentScan;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import org.springframework.transaction.PlatformTransactionManager;

import org.springframework.transaction.annotation.EnableTransactionManagement;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**

* blog

* Created by yadong.zhang on com.blog.application

* User:yadong.zhang

* Date:2016/10/20

* Time:18:15

*/

/**

* 1).@SpringBootApplication标注启动配置入口,run()方法会创建一个Spring应用上下文(Application Context)。

* SpringBoot通过启动内嵌的Servlet容器(默认tomcat)用来处理Http请求。

* 2).@RestController是特殊的Controller,他的返回值直接作为Http Response的Body部分返回给浏览器

* 3).Spring WebMvc框架会将Servlet容器里收到的Http请求根据路径分发到对应的@Controller下进行处理。

*/

@EnableAutoConfiguration

@SpringBootApplication

@ComponentScan

//指定扫描的mapper接口所在的包

@MapperScan("com.blog.mapper")

//启动注解事务管理

@EnableTransactionManagement

//@RestController

public class Applaction {

private static final String TYPE_ALIASES_PACKAGE = "com.blog.model";

private static final String MAPPER_LOCATION = "classpath:/mybatis/*.xml";

@Bean

@Autowired

public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {

final SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();

sqlSessionFactoryBean.setDataSource(dataSource);

//mybatis.typeAliasesPackage:指定domain类的基包,即指定其在*Mapper.xml文件中可以使用简名来代替全类名(看后边的UserMapper.xml介绍)

sqlSessionFactoryBean.setTypeAliasesPackage(TYPE_ALIASES_PACKAGE);

/*

mybatis.mapperLocations:指定*Mapper.xml的位置

如果不加会报org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.blog.mapper.MessageMapper.findMessageInfo异常

因为找不到*Mapper.xml,也就无法映射mapper中的接口方法。

*/

sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));

return sqlSessionFactoryBean.getObject();

}

public static void main(String[] args) {

SpringApplication.run(Applaction.class, args);

}

}

注:sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));这一句话一定要有,就是指定程序去哪儿查找Mapper.xml文件

Mapper、Mapper.xml

package com.blog.mapper;

import com.blog.model.Message;

import org.springframework.stereotype.Repository;

import java.util.List;

/**

* blog

* Created by yadong.zhang on com.blog.mapper

* User:yadong.zhang

* Date:2016/10/21

* Time:11:19

*/

@Repository

public interface MessageMapper{

public List findMessageInfo();

}

select * from message

Controller(中间还有Service层以及其实现,此处略)

package com.blog.controller;

import com.blog.service.IMessageService;

import org.springframework.stereotype.Controller;

import org.springframework.ui.Model;

import org.springframework.web.bind.annotation.PathVariable;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

/**

* blog

* Created by yadong.zhang on com.blog.controller

* User:yadong.zhang

* Date:2016/10/20

* Time:18:26

*/

@Controller

public class HelloController {

@Resource

private IMessageService messageService;

@RequestMapping("/message")

public String message(Model model){

model.addAttribute("messages", messageService.findMessageInfo());

return "message";

}

}

message.ftl

Spring Boot 集成Mybatis 测试例子

Spring Boot 集成Mybatis 测试例子

${.now}

${message.id}${message.ip}${message.nickName}${message.insertDate?date}

#list>

#if>

视图结果

AAffA0nNPuCLAAAAAElFTkSuQmCC

OK,整合Mybatis到此结束,下节总结Spring Boot 集成分页插件

我可以对一个人无限的好,前提是值得。 ——慕冬雪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值