SpringBoot+Mybatis+Jpa整合

1.新建一个Springboot的相关项目
在这里插入图片描述

2.选这所需要的配置文件
在这里插入图片描述

.(可有可无)Developer Tools : Spring Boot DevTools(热加载),如果有Jrebel推荐使用,没有则需要配置该热加载文件.
Lombok:实体类注解开发公具

在这里插入图片描述

在这里插入图片描述

3.配置 .XML配置文件

<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>2.1.1</version>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</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>
		<!--阿里巴巴Druid连接池-->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid-spring-boot-starter</artifactId>
			<version>1.1.10</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-aop</artifactId>
		</dependency>

		<dependency>
			<groupId>com.github.pagehelper</groupId>
			<artifactId>pagehelper-spring-boot-starter</artifactId>
			<version>1.2.3</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.44</version>
			<scope>runtime</scope>
		</dependency>



	</dependencies>
	<build>
		<resources>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>*.properties</include>
					<include>*.xml</include>
					<include>*.yml</include>
					<include>**/*.xml</include>
				</includes>
			</resource>
		</resources>

		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.2</version>
				<dependencies>
					<!--使用Mybatis-generator插件不能使用太高版本的mysql驱动 -->
					<dependency>
						<groupId>mysql</groupId>
						<artifactId>mysql-connector-java</artifactId>
						<version>5.1.44</version>
					</dependency>
				</dependencies>
				<configuration>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>
		</plugins>
	</build>

4,添加generatorConfig.xml文件至resources目录下
在这里插入图片描述
配置EditConfiguations的Maven启动方式命令:mybatis-generator:generate -e
配置文件内容如下:具体情况具体分析,^^


<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
            "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
    <generatorConfiguration>
        <!-- 引入配置文件 -->
        <properties resource="jdbc.properties"/>

        <!--指定数据库jdbc驱动jar包的位置-->
        <classPathEntry location="D:\Tomcats\MyRepository\maven\mysql\mysql-connector-java\5.1.44\mysql-connector-java-5.1.44.jar"/>

        <!-- 一个数据库一个context -->
        <context id="infoGuardian">
            <!-- 注释 -->
            <commentGenerator>
                <property name="suppressAllComments" value="true"/><!-- 是否取消注释 -->
                <property name="suppressDate" value="true"/> <!-- 是否生成注释代时间戳 -->
            </commentGenerator>

            <!-- jdbc连接 -->
            <jdbcConnection driverClass="${jdbc.driver}"
                            connectionURL="${jdbc.url}" userId="${jdbc.username}" password="${jdbc.password}"/>

            <!-- 类型转换 -->
            <javaTypeResolver>
                <!-- 是否使用bigDecimal, false可自动转化以下类型(Long, Integer, Short, etc.-->
                <property name="forceBigDecimals" value="false"/>
            </javaTypeResolver>

            <!-- 01 指定javaBean生成的位置 -->
            <!-- targetPackage:指定生成的model生成所在的包名 -->
            <!-- targetProject:指定在该项目下所在的路径  -->
            <javaModelGenerator targetPackage="com.study.jpa.model"
                                targetProject="src/main/java">
                <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
                <property name="enableSubPackages" value="false"/>
                <!-- 是否对model添加构造函数 -->
                <property name="constructorBased" value="true"/>
                <!-- 是否针对string类型的字段在set的时候进行trim调用 -->
                <property name="trimStrings" value="false"/>
                <!-- 建立的Model对象是否 不可改变  即生成的Model对象不会有 setter方法,只有构造方法 -->
                <property name="immutable" value="false"/>
            </javaModelGenerator>

            <!-- 02 指定sql映射文件生成的位置 -->
            <sqlMapGenerator targetPackage="mapper"
                             targetProject="src/main/resources">
                <!-- 是否允许子包,即targetPackage.schemaName.tableName -->
                <property name="enableSubPackages" value="false"/>
            </sqlMapGenerator>

            <!-- 03 生成XxxMapper接口 -->
            <!-- type="ANNOTATEDMAPPER",生成Java Model 和基于注解的Mapper对象 -->
            <!-- type="MIXEDMAPPER",生成基于注解的Java Model 和相应的Mapper对象 -->
            <!-- type="XMLMAPPER",生成SQLMap XML文件和独立的Mapper接口 -->
            <javaClientGenerator targetPackage="com.study.jpa.mapper"
                                 targetProject="src/main/java" type="XMLMAPPER">
                <!-- 是否在当前路径下新加一层schema,false路径com.oop.eksp.user.model, true:com.oop.eksp.user.model.[schemaName] -->
                <property name="enableSubPackages" value="false"/>
            </javaClientGenerator>
            <!-- 配置表信息 -->
            <!-- schema即为数据库名 -->
            <!-- tableName为对应的数据库表 -->
            <!-- domainObjectName是要生成的实体类 -->
            <!-- enable*ByExample是否生成 example类 -->
            <!--<table schema="" tableName="t_book" domainObjectName="Book"-->
                   <!--enableCountByExample="false" enableDeleteByExample="false"-->
                   <!--enableSelectByExample="false" enableUpdateByExample="false">-->
                <!--&lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;-->
                <!--&lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;-->
                <!--&lt;!&ndash; 指定列的java数据类型 &ndash;&gt;-->
                <!--&lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;-->
            <!--</table>-->

         <!--   <table schema="" tableName="t_books" domainObjectName="Book"
                   enableCountByExample="false" enableDeleteByExample="false"
                   enableSelectByExample="false" enableUpdateByExample="false">
                &lt;!&ndash; 忽略列,不生成bean 字段 &ndash;&gt;
                &lt;!&ndash; <ignoreColumn column="FRED" /> &ndash;&gt;
                &lt;!&ndash; 指定列的java数据类型 &ndash;&gt;
                &lt;!&ndash; <columnOverride column="LONG_VARCHAR_FIELD" jdbcType="VARCHAR" /> &ndash;&gt;
            </table>-->
        </context>
    </generatorConfiguration>

5.修改自动创建的实体类信息
这个类中的类名要在你的数据库中存在(不存在的话,springboot会逆向生成表),这里的id,name是表中的名称,要注意变量的类型与数据库名称类型一致;
另外,这里使用的@Entity 是声明映射Person这个实体类,@Id标注用于声明一个实体类的属性映射为数据库的主键列。,@GeneratedValue用于标注主键的生成策略 这里了解一下

@ToString
@Entity
@Table(name = "t_books")
public class Book {
    @Id
    @GeneratedValue
    @Column(name = "bid")
    private Integer bid;

    @Column(name = "bname")
    private String bname;

    @Column(name = "bpinyin")
    private String bpinyin;

    @Column(name = "typeid")
    private Integer typeid;

    @Column(name = "author")
    private String author;

    @Column(name = "price")
    private Float price;

    @Column(name = "docid")
    private Integer docid;

    @Column(name = "press")
    private String press;

    @Column(name = "breif")
    private String breif;

    @Column(name = "state")
    private Integer state;

    @Column(name = "tdate")
    private Date tdate;

    @Column(name = "sales")
    private Integer sales;

6 添加xxxJPA接口,例如BookJPA.java

package com.study.jpa.service;

import com.study.jpa.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;

public interface BookRepository extends JpaRepository<Book,Integer> {
}



测试之前需要配置application.yml(你的有能是application.properties,改一下后缀名即可,我比较喜欢.yml文件的简洁)

server:
  port: 8088
  servlet:
    context-path: /jpa

spring:
  datasource:
    #1.JDBC
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/0606?useUnicode=true&characterEncoding=utf8
    username: root
    password: 123
    druid:
      #2.连接池配置
      #初始化连接池的连接数量 大小,最小,最大
      initial-size: 5
      min-idle: 5
      max-active: 20
      #配置获取连接等待超时的时间
      max-wait: 60000
       #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      time-between-eviction-runs-millis: 60000
      # 配置一个连接在池中最小生存的时间,单位是毫秒
      min-evictable-idle-time-millis: 30000
      validation-query: SELECT 1 FROM DUAL
      test-while-idle: true
      test-on-borrow: true
      test-on-return: false
      # 是否缓存preparedStatement,也就是PSCache  官方建议MySQL下建议关闭   个人建议如果想用SQL防火墙 建议打开
      pool-prepared-statements: true
      max-pool-prepared-statement-per-connection-size: 20
      # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
      filter:
        stat:
          merge-sql: true
          slow-sql-millis: 5000
      #3.基础监控配置
      web-stat-filter:
        enabled: true
        url-pattern: /*
        #设置不统计哪些URL
        exclusions: "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"
        session-stat-enable: true
        session-stat-max-count: 100
      stat-view-servlet:
        enabled: true
        url-pattern: /druid/*
        reset-enable: true
        #设置监控页面的登录名和密码
        login-username: admin
        login-password: admin
        allow: 127.0.0.1
        #deny: 192.168.1.100
  redis:
    database: 0
    host: 192.168.68.128
    port: 6379
    password: 123
    jedis:
        pool:
            max-active: 100
            max-idle: 3
            max-wait: -1
            min-idle: 0
    timeout: 1000
mybatis:
     #配置SQL映射文件路径
     mapper-locations: classpath*:mapper/*.xml
     #配置别名
     type-aliases-package: com.zking.jpa.model

  #pagehelper分页插件配置
pagehelper:
   helperDialect: mysql
   reasonable: true
   supportMethodsArguments: true
   params: count=countSql

7.编写controller层

package com.study.jpa.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.study.jpa.model.Book;
import com.study.jpa.service.BookRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
public class BookController {

@Autowired
    private BookRepository bookRepository;

//    查看全部
    @RequestMapping(value = "/hello",method = RequestMethod.GET)
    public void sau(HttpServletResponse response) throws IOException{
        List<Book> list=bookRepository.findAll();
        Map<Integer,Object> map=new HashMap<>();
        for (Book book : list) {
            System.out.println(book);
            map.put(book.getBid(),book.getBname());
            ObjectMapper json=new ObjectMapper();
            String ss = json.writeValueAsString(map);
            PrintWriter out = response.getWriter();
            out.print(ss);
            out.flush();
            out.close();

        }



    }

 //添加一个
    @PostMapping(value = "/hello")
    public Person addPerson(@RequestParam("Bid") Integer id,@RequestParam("Bname") String name){
        Book b = new Book();
        b.setBid(id);
        b.setBname(name);
        return bookRepository.save(b);
    }
    @GetMapping(value = "/hello/add")
    public Person addPerson1(@RequestParam("id") Integer id,@RequestParam("name") Integer name){
        Book b = new Book();
        b.setId(id);
        b.setName(name);
        return  bookRepository.save(b);
    }
 
 
    //修改一个
    @PutMapping(value = "/hello/{id}")
    public Person updatePerson(@PathVariable("id") Integer id,@RequestParam("name") Integer name){
        Book b = new Book();
        b.setId(id);
        b.setName(name);
        return  bookRepository.save(b);
    }
    @GetMapping(value = "/hello/upd")
    public Person updPerson(@RequestParam("id") Integer id,@RequestParam("name") int name){//@PathVariable("id") Integer id){
        Book b = findOne(id);
        b.setName(name);
        return  bookRepository.save(b);
    }
 
    //查找一个
    @GetMapping(value = "/hello/{id}")
    public Person findOne(@PathVariable("Bid") Integer id){
        return  bookRepository.findById(id).orElse(null);
    }
 
    //删除
   @GetMapping(value = "/hello/del/{id}")
    public void deletePerson(@PathVariable("id") Integer id){
        Book b = findOne(id);
         bookRepository.delete(b);
    }

}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值