SpringBoot+Maven项目实战(4):集成Mybatis
2016-11-03 17:00
751 查看
1.构建测试数据库(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 ;
调用:
call autoInsert
2.pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" 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"> <modelVersion>4.0.0</modelVersion> <groupId>com.blog</groupId> <artifactId>blog</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.7</java.version> </properties> <dependencies> <!--支持 Web 应用开发,包含 Tomcat 和 spring-mvc。 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--模板引擎--> <!-- <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <!--springboot 集成Mybatis所需jar配置 start--> <!--支持使用 JDBC 访问数据库--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!--Mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <!--Mysql / DataSource--> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <!--springboot 集成Mybatis所需jar配置 end--> <!--Json Support--> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.43</version> </dependency> <!--springboot中修改完文件后自动reload的插件,修改完文件Ctrl + F9 Make一下就可以--> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.3.RELEASE</version> </dependency> <!--springboot中修改完文件后自动reload的插件 end--> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.3.RELEASE</version> </dependency> </dependencies> </plugin> </plugins> </build> <!--配置远程仓库地址--> <repositories> <repository> <id>spring-milestone</id> <url>https://repo.spring.io/libs-release</url> </repository> </repositories> <!--配置远程仓库地址--> <pluginRepositories> <pluginRepository> <id>spring-milestone</id> <url>https://repo.spring.io/libs-release</url> </pluginRepository> </pluginRepositories> </project>
3.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
4.程序主函数(Applaction.java)
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文件*
5.Mapper.java、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<Message> findMessageInfo(); }
<?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.blog.mapper.MessageMapper"> <resultMap id="message_map" type="com.blog.model.Message"> <id property="id" column="ID" jdbcType="INTEGER"></id> <result property="ip" column="IP" jdbcType="VARCHAR"></result> <result property="insertDate" column="INSERT_TIME" jdbcType="DATE"></result> <result property="nickName" column="NICK_NAME" jdbcType="VARCHAR"></result> </resultMap> <select id="findMessageInfo" resultMap="message_map"> select * from message </select> </mapper>
6.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"; } }
7.测试视图结果
相关文章推荐
- SpringBoot+Maven项目实战(2):集成SpringBoot
- SpringBoot+Maven项目实战(5):集成分页插件
- SpringBoot+Maven项目实战(2):集成SpringBoot
- Springboot整合dubbo构建maven多模块项目(四) - 集成mybatis
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
- SpringBoot+Maven项目实战(3):整合Freemark模板
- spring boot+maven+mybatis+IDE+git项目搭建
- Maven+Spring+Spring MVC+Mybatis项目实战
- SpringBoot+Maven项目实战(6):整合Log4j和Aop,实现简单的日志记录
- Spring+SpringMVC+Mybatis+Restful+Maven多模块项目集成
- SpringBoot+Maven项目实战(1):新建Maven项目
- SpringBoot项目实战--mybatis
- 04(maven+SSH)网上商城项目实战之Spring mybatis项目搭建
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
- 【SSMS】springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制
- springmvc+spring+mybatis+maven项目集成shiro进行用户权限控制【转】
- 详解 集成Maven Spring Mybatis项目打包生成Bat文件
- SpringBoot创建maven多模块项目(实战)
- 从零学spring boot--集成mybatis--项目--使用注解方式