原文链接

我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件。然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我就不说了,集合了所有连接池的好处,并且还提供了监控等功能,加大了可扩展性等等。

  1. 创建一个springboot项目:

 

 2.可以看到的是我们除了引入web依赖之外还引入了三个依赖,分别是MySQL,JDBC,Mybatis,我们如下观看一下完整的依赖情况:    

  1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5
6 <groupId>com.example</groupId>
7 <artifactId>springboot-mybatis02</artifactId>
8 <version>0.0.1-SNAPSHOT</version>
9 <packaging>jar</packaging>
10
11 <name>springboot-mybatis02</name>
12 <description>Demo project for Spring Boot</description>
13
14 <parent>
15 <groupId>org.springframework.boot</groupId>
16 <artifactId>spring-boot-starter-parent</artifactId>
17 <version>2.0.1.RELEASE</version>
18 <relativePath/> <!-- lookup parent from repository -->
19 </parent>
20
21 <properties>
22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
24 <java.version>1.8</java.version>
25 </properties>
26
27 <dependencies>
28 <dependency>
29 <groupId>org.springframework.boot</groupId>
30 <artifactId>spring-boot-starter-jdbc</artifactId>
31 </dependency>
32
33 <!--web依赖-->
34 <dependency>
35 <groupId>org.springframework.boot</groupId>
36 <artifactId>spring-boot-starter-web</artifactId>
37 </dependency>
38
39 <!--这个依赖已经包括JDBC依赖-->
40 <dependency>
41 <groupId>org.mybatis.spring.boot</groupId>
42 <artifactId>mybatis-spring-boot-starter</artifactId>
43 <version>1.3.2</version>
44 </dependency>
45
46 <!--数据库连接-->
47 <dependency>
48 <groupId>mysql</groupId>
49 <artifactId>mysql-connector-java</artifactId>
50 <scope>runtime</scope>
51 </dependency>
52
53 <!--需要手动添加的依赖-->
54 <!--使用durid连接池的依赖-->
55 <dependency>
56 <groupId>com.alibaba</groupId>
57 <artifactId>druid-spring-boot-starter</artifactId>
58 <version>1.1.1</version>
59 </dependency>
60   
61     <!--热部署依赖-->
62     <dependency>
63      <groupId>org.springframework.boot</groupId>
64     <artifactId>spring-boot-devtools</artifactId>
65     </dependency>
66
67     <!--thymeleaf依赖-->
68     <dependency>
69      <groupId>org.springframework.boot</groupId>
70     <artifactId>spring-boot-starter-thymeleaf</artifactId>
71     </dependency>
72
73
74 <!-- 分页插件 -->
75 <dependency>
76 <groupId>com.github.pagehelper</groupId>
77 <artifactId>pagehelper-spring-boot-starter</artifactId>
78 <version>4.1.6</version>
79 </dependency>
80
81 <dependency>
82 <groupId>org.springframework.boot</groupId>
83 <artifactId>spring-boot-starter-test</artifactId>
84 <scope>test</scope>
85 </dependency>
86 </dependencies>
87
88 <build>
89 <plugins>
90 <plugin>
91 <groupId>org.springframework.boot</groupId>
92 <artifactId>spring-boot-maven-plugin</artifactId>
93 </plugin>
94
95 <!-- mybatis generator 自动生成代码插件 -->
96 <plugin>
97 <groupId>org.mybatis.generator</groupId>
98 <artifactId>mybatis-generator-maven-plugin</artifactId>
99 <version>1.3.2</version>
100 <configuration>
101 <configurationFile>${basedir}/src/main/resources/generator/generatorConfig.xml</configurationFile>
102 <overwrite>true</overwrite>
103 <verbose>true</verbose>
104 </configuration>
105 </plugin>
106 </plugins>
107 </build>
108
109
110 </project>

 3.依赖引入完成以后我们再对application.properties配置文件进行编辑:  

 1 #设置访问端口
2 server.port=80
3
4 #thymeleaf配置,这里是可以省略的,因为默认配置已经足够
5 #关闭缓存,及时刷新页面,这一点很重要
6 spring.thymeleaf.cache=false
7 #注释的部分是Thymeleaf默认的配置,如有其它需求可以自行更改
8 #spring.thymeleaf.prefix=classpath:/templates/
9 #spring.thymeleaf.suffix=.html
10 #spring.thymeleaf.mode=HTML5
11 #spring.thymeleaf.encoding=UTF-8
12 #spring.thymeleaf.servlet.content-type=text/html
13
14
15 #设置热部署
16 #开启热部署
17 spring.devtools.restart.enabled=true
18 #重启范围
19 spring.devtools.restart.additional-paths=src/main/java
20
21 #设置数据源
22 #数据库连接用户名
23 spring.datasource.username=root
24 #数据库连接密码
25 spring.datasource.password=123
26 #驱动
27 spring.datasource.driver-class-name= com.mysql.jdbc.Driver
28 #数据库连接路径
29 spring.datasource.url=jdbc:mysql://localhost:3306/bysj
30 #连接池类型
31 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
32
33 #连接池配置,因为springboot默认是开启了连接池的,它有默认配置,这一段可以忽略
34 # 初始化大小,最小,最大
35 spring.datasource.initialSize=5
36 spring.datasource.minIdle=5
37 spring.datasource.maxActive=20
38 # 配置获取连接等待超时的时间
39 spring.datasource.maxWait=60000
40 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
41 spring.datasource.timeBetweenEvictionRunsMillis=60000
42 # 配置一个连接在池中最小生存的时间,单位是毫秒
43 spring.datasource.minEvictableIdleTimeMillis=300000
44 spring.datasource.validationQuery=SELECT 1 FROM DUAL
45 spring.datasource.testWhileIdle=true
46 spring.datasource.testOnBorrow=false
47 spring.datasource.testOnReturn=false
48 # 打开PSCache,并且指定每个连接上PSCache的大小
49 spring.datasource.poolPreparedStatements=true
50 spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
51 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
52 spring.datasource.filters=stat,wall,log4j
53 # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
54 spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
55
56 #配置mybatis
57 mybatis.mapper-location=classpath:mapping/*.xml
58 #全局的映射,不用在xml文件写实体类的全路径
59 mybatis.type-aliases-package=com.zsl.pojo
60 #开启驼峰映射
  mybatis.configuration.map-underscore-to-camel-case=true
61 #配置分页插件
62 #pagehelper分页插件
  pagehelper.helper-dialect=mysql
  pagehelper.reasonable=true
  pagehelper.support-methods-arguments=true
  pagehelper.params=count=countSql

 4. 配置generator自动生成代码:文件放置的位置就在pom.xml文件里面一如插件的位置${basedir}/src/main/resources/generator/generatorConfig.xml

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE generatorConfiguration
3 PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
4 "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
5 <generatorConfiguration>
6 <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
7 <classPathEntry location="C:\mysql-connector-java-5.1.41.jar"/>
8 <context id="DB2Tables" targetRuntime="MyBatis3">
9 <commentGenerator>
10 <property name="suppressDate" value="true"/>
11 <!-- 是否去除自动生成的注释 true:是 : false:否 -->
12 <property name="suppressAllComments" value="true"/>
13 </commentGenerator>
14 <!--数据库链接URL,用户名、密码 -->
15 <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost/bysj" userId="root" password="123">
16 </jdbcConnection>
17 <javaTypeResolver>
18 <property name="forceBigDecimals" value="false"/>
19 </javaTypeResolver>
20 <!-- 生成模型的包名和位置-->
21 <javaModelGenerator targetPackage="com.zsl.pojo" targetProject="src/main/java">
22 <property name="enableSubPackages" value="true"/>
23 <property name="trimStrings" value="true"/>
24 </javaModelGenerator>
25 <!-- 生成映射文件的包名和位置-->
26 <sqlMapGenerator targetPackage="mapping" targetProject="src/main/resources">
27 <property name="enableSubPackages" value="true"/>
28 </sqlMapGenerator>
29 <!-- 生成DAO的包名和位置-->
30 <javaClientGenerator type="XMLMAPPER" targetPackage="com.zsl.mapper" targetProject="src/main/java">
31 <property name="enableSubPackages" value="true"/>
32 </javaClientGenerator>
33 <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
34 <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
35 </context>
36 </generatorConfiguration>

  5.创建数据库以及表格  

CREATE DATABASE bysj;

CREATE TABLE user(
user_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
user_name VARCHAR(255) NOT NULL ,
password VARCHAR(255) NOT NULL ,
phone VARCHAR(255) NOT NULL
) ENGINE=INNODB AUTO_INCREMENT=1000 DEFAULT CHARSET=utf8;

  6. 操作IDEA生成代码:Run-->Edit Configurations

  

  回到下图所示页面的时候点击三角即可:

  

  7.查看项目情况以及生成代码:

    7.1:生成的mapper:

     

    7.2:生成的pojo实体类:

     

     7.3生成的mapper的xml文件:在这里务必要注意namespace是否正确,请注意查看这一点

 1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
3 <mapper namespace="com.zsl.mapper.UserMapper" >
4 <resultMap id="BaseResultMap" type="com.zsl.pojo.User" >
5 <id column="user_id" property="userId" jdbcType="INTEGER" />
6 <result column="user_name" property="userName" jdbcType="VARCHAR" />
7 <result column="password" property="password" jdbcType="VARCHAR" />
8 <result column="phone" property="phone" jdbcType="VARCHAR" />
9 </resultMap>
10 <sql id="Base_Column_List" >
11 user_id, user_name, password, phone
12 </sql>
   <!--自己写的-->
   <select id="selectAllUser" resultType="user">
     select
    <include refid="Base_Column_List" />
    from user;
   </select>
13 <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
14 select
15 <include refid="Base_Column_List" />
16 from user
17 where user_id = #{userId,jdbcType=INTEGER}
18 </select>
19 <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer" >
20 delete from user
21 where user_id = #{userId,jdbcType=INTEGER}
22 </delete>
23 <insert id="insert" parameterType="com.zsl.pojo.User" >
24 insert into user (user_id, user_name, password,
25 phone)
26 values (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR},
27 #{phone,jdbcType=VARCHAR})
28 </insert>
29 <insert id="insertSelective" parameterType="com.zsl.pojo.User" >
30 insert into user
31 <trim prefix="(" suffix=")" suffixOverrides="," >
32 <if test="userId != null" >
33 user_id,
34 </if>
35 <if test="userName != null" >
36 user_name,
37 </if>
38 <if test="password != null" >
39 password,
40 </if>
41 <if test="phone != null" >
42 phone,
43 </if>
44 </trim>
45 <trim prefix="values (" suffix=")" suffixOverrides="," >
46 <if test="userId != null" >
47 #{userId,jdbcType=INTEGER},
48 </if>
49 <if test="userName != null" >
50 #{userName,jdbcType=VARCHAR},
51 </if>
52 <if test="password != null" >
53 #{password,jdbcType=VARCHAR},
54 </if>
55 <if test="phone != null" >
56 #{phone,jdbcType=VARCHAR},
57 </if>
58 </trim>
59 </insert>
60 <update id="updateByPrimaryKeySelective" parameterType="com.zsl.pojo.User" >
61 update user
62 <set >
63 <if test="userName != null" >
64 user_name = #{userName,jdbcType=VARCHAR},
65 </if>
66 <if test="password != null" >
67 password = #{password,jdbcType=VARCHAR},
68 </if>
69 <if test="phone != null" >
70 phone = #{phone,jdbcType=VARCHAR},
71 </if>
72 </set>
73 where user_id = #{userId,jdbcType=INTEGER}
74 </update>
75 <update id="updateByPrimaryKey" parameterType="com.zsl.pojo.User" >
76 update user
77 set user_name = #{userName,jdbcType=VARCHAR},
78 password = #{password,jdbcType=VARCHAR},
79 phone = #{phone,jdbcType=VARCHAR}
80 where user_id = #{userId,jdbcType=INTEGER}
81 </update>
82 </mapper>

    7.4项目的总体结构:

    

    7.5 自己用于测试分页,驼峰映射,实体类映射等配置的controller,service

 1 package com.zsl.controller;
2
3 import com.zsl.pojo.User;
4 import com.zsl.service.impl.UserServiceImpl;
5 import org.springframework.stereotype.Controller;
6 import org.springframework.web.bind.annotation.RequestMapping;
7 import org.springframework.web.bind.annotation.ResponseBody;
8
9 import javax.annotation.Resource;
10 import java.util.List;
11
12 @Controller
13 public class Userontroller {
14
15 @Resource
16 private UserServiceImpl userService;
17
18 //增加用户
19 @ResponseBody
20 @RequestMapping("/insertUser")
21 public String insertUser(User user){
22 return userService.insertUser(user);
23 }
24
25 //查询所有的用户
26 @ResponseBody
27 @RequestMapping("/selectAllUser")
28 public String getAllUser(){
29 List<User> list = userService.selectAllUser();
30 System.out.println(list.size());
31 System.out.println(list);
32 System.out.println(list.get(1).getUserId());
33 return null;
34 }
35 }

 1 package com.zsl.service.impl;
2
3 import com.zsl.mapper.UserMapper;
4 import com.zsl.pojo.User;
5 import com.zsl.service.UserService;
6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Service;
8
9 import java.util.List;
10
11 @Service
12 public class UserServiceImpl implements UserService {
13
14 @Autowired
15 private UserMapper userMapper;//报错不影响
16 /*
17 * 增加/修改用户
18 * */
19 @Override
20 public String insertUser(User user) {
21 //增加用户
22 if(user.getUserId() == null){
23 Integer i = userMapper.insert(user);
24 if(i != 0 && i != null){
25 return "success";
26 }
27 }
28 return null;
29 }
30
31 @Override
32 public List<User> selectAllUser() {
33 //PageHelper.startPage(1, 3);
34 List<User> list = userMapper.selectAllUser();
35 return list;
36 }
37 }

 

注意:在实验的时候务必要在启动类上加上MapperScna注解,指定扫描mapper文件,或者可以在每个mapper文件上加mapper注解,不过这样太麻烦了: 

SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件的更多相关文章

  1. SpringBoot 添加mybatis generator 自动生成代码插件

    自动生成数据层代码,提高开发效率 1.pom添加插件,并指定配置文件路径 <!-- mybatis generator 自动生成代码插件 --> <plugin> <gr ...

  2. idea中mybatis generator自动生成代码配置 数据库是sqlserver

    好长时间没有写博客了,最近公司要用java语言,开始学习java,属于初学者,今天主要记录一下mybatis generator自动生成代码,首先在如下图的目录中新建两个文件,如下图 generato ...

  3. IDEA Maven Mybatis generator 自动生成代码

    IDEA Maven Mybatis generator 自动生成代码 一.安装配置maven以及在Idea中配置maven 安装过程步骤可以看上面的博文,里面介绍得很详细. 二.建数据表 DROP ...

  4. IDEA Maven Mybatis generator 自动生成代码(实例讲解)(转)

    IDEA Maven Mybatis generator 自动生成代码(实例讲解) MyBatis Generator • 简称MBG,是一个专门为MyBatis框架使用者定制的代码生成器,可以快速的 ...

  5. 使用Mybatis Generator自动生成代码

    MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器.它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码.它将内省数据库 ...

  6. Mybatis generator 自动生成代码(2)

    最近准备开始做一个项目,需要开始手动创建sql,于是将Mybatis generator 工具功能强化了下. 首先,这里引入到版本一点的包 <dependency> <groupId ...

  7. Mybatis generator 自动生成代码

    开发项目的时候,表很多,是不可能一点点的自己去写xml ,dao文件的,这里就需要用到代码的自动生成工具了. 第一步:导入jar包,当然,这之前,基本环境,像mybatis,数据库之类的都得搭建好. ...

  8. IDEA使用mybatis generator自动生成代码

    主要就三步: 1.pom 文件中引入jar包并配置 build 属性 <dependencies> <!-- 自动生产mapper Begin! --> <depende ...

  9. mybatis generator自动生成代码时 只生成了insert 而没有其他的

    mybatis框架提供了非常好用的逆向工程插件,但是在使用过程中会有很多问题. 我在使用中就遇到了只生成insert和insertSeletive方法,而不生成其他根据primary key查询更新删 ...

随机推荐

  1. python之路 socket、socket server

    一.socket socket的英文原义是“孔”或“插座”.作为BSD UNIX的进程通信机制,取后一种意思.通常也 称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可 ...

  2. ArcGIS 10——地理数据库管理GIS数据

    写本文的最初意向是当前正在进行的项目中有实现ESRI版本化数据管理的功能模块,碰到一些棘手的问题,几经周折还是决定系统学习ArcGIS10的帮助文档.(文章摘抄的比较多) 地理数据库是用于保存数据集集 ...

  3. Hive 中Join的专题---Join详解

    1.什么是等值连接? 2.hive转换多表join时,如果每个表在join字句中,使用的都是同一个列,该如何处理? 3.LEFT,RIGHT,FULL OUTER连接的作用是什么? 4.LEFT或RI ...

  4. python excel操作单元格复制和读取的两种方法

    操作单元格 新建一个sheet, 单元格赋值(两种方法) 单元格A1赋值为’xiaxiaoxu’ 单元格A2赋值为‘xufengchai’ 打印A1和A2单元格的值(两种方法) #coding=utf ...

  5. SpringBoot之集成WebSocket

    websocket是什么不做介绍.开发环境:jdk1.8,win7_64旗舰版,idea   1.初始化一个springboot项目   2.加入websocket依赖 <!-- springb ...

  6. HttpClient配置SSL绕过https证书

    https://blog.csdn.net/irokay/article/details/78801307 HttpClient简介 HTTP 协议可能是现在 Internet 上使用得最多.最重要的 ...

  7. LOJ10066 新的开始

    LOJ10066 新的开始 prim 典型题.碰到这种情况,只要建一个虚拟节点,和其他的点连边,按题目给权值即可 代码中把n+1当成虚拟节点 懒得写kruskal就用prim了 #include< ...

  8. Linux内核分析--系统调用【转】

    本文转载自:http://www.cnblogs.com/paperfish/p/5308505.html 前言:以下笔记除了一些讲解视频中的概念记录,图示.图示中的补充文字.总结.分析.小结部分均是 ...

  9. ubuntu16.04下firefly rk3288的编译安卓4.4

    一.背景 OS: ubuntu 16.04 二.配置交叉编译环境 2.1 安装openjdk sudo apt-get install openjdk-7-jdk 2.2 使在同一台机器上可以编译an ...

  10. ubuntu14.04禁止触摸板和恢复触摸板

    1.使用xinput list查看与触摸板相关的id,以下是本机的输出,没搞清楚为什么是Mouse!!! jello@jello:~$ xinput list⎡ Virtual core pointe ...