原文链接

我们这一篇博客讲的是如何整合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. BufferedImage操作图片笔记(转)

    BufferedImage是Image的一个子类,BufferedImage生成的图片在内存里有一个图像缓冲区,利用这个缓冲区我们可以很方便的操作这个图片,通常用来做图片修改操作如大小变换.图片变灰. ...

  2. Object-C-内存管理 对象生命周期

    autoreleasepool 池子被销毁的时候被标记 autorelease 的对象调用一次release Person *p2=[[[Person alloc]init]autorelease]; ...

  3. python isinstance用法

    isinstance(object,type) 其第一个参数(object)为对象,第二个参数(type)为类型名(int...)或类型名的一个列表((int,list,float)是一个列表). 其 ...

  4. linux常用命令:date 命令

    在linux环境中,不管是编程还是其他维护,时间是必不可少的,也经常会用到时间的运算,熟练运用date命令来表示自己想要表示的时间,肯定可以给自己的工作带来诸多方便. 1.命令格式: date [参数 ...

  5. quartz-job实现实时或定时发送短信任务

    存放调度器(Job 和 Trigger)信息的xml配置文件: 这是某个指定的要实现的定时任务: <!-- 每天给项目经理发送短信避免短信服务挂了 定时每天08:30执行--> <j ...

  6. python 四种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,直接修改类属性的值

    三种方法修改类变量,实例对象调用类方法改变类属性的值,类对象调用类方法改变类属性的值,调用实例方法改变类属性的值,类名就是类对象,city就是类变量, #coding=utf-8 class empl ...

  7. 20145316许心远《网络对抗》EXP7网络欺诈技术防范

    20145316许心远<网络对抗>EXP7网络欺诈技术防范 实验后回答问题 通常在什么场景下容易受到DNS spoof攻击 公共共享网络里,同一网段可以ping通的网络非常容易被攻击 在日 ...

  8. 移动互联网消息推送原理:长连接+心跳机制(MQTT协议)

    互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了 ...

  9. troubleshooting-When importing query results in parallel, you must specify --split-by.

    原因分析 -m 4 \ 导数命令中map task number=4,当-m 设置的值大于1时,split-by必须设置字段(需要是 int 类型的字段),如果不是 int类型的字段,则需要加上参数- ...

  10. 04: Mysql性能优化

    MySQL其他篇 目录: 参考网站 1.1 Mysql数据库的优化技术 1.2 数据库表设计 1.3 SQL优化 1.为查询缓存优化你的查询 2.EXPLAIN 你的 SELECT 查询 3. 当只要 ...