三大框架:持久层框架MyBatis基础入门

持久层框架MyBatis(中文音译:麦-波蒂斯)

上期内容:三大框架之spring框架+IoC控制反转、DI依赖注入

一、是什么?

是一个数据库框架
以前用的是hibernate

二、如何用?

1.创建springboot项目,添加mybatis,mysql依赖
2.使用代码生成sql,pojo类
3.创建controller,service

三、解决了什么问题?

以前是用jdbc操作数据库,需要我们创建连接,拼出sql,得到结果集resultSet,遍历resultSet,取数据,创建对象,给对象属性赋值,放到list中

传统框架的缺点

使用jdbc需要程序员创建连接,手写sql,处理结果集,使用了mybatis框架后,创建连接,结果集处理都由框架来完成。
在这里插入图片描述

mybatis介绍

mybatis它是轻量级持久层框架,由ibatis演化而来。它自动连接数据库,将数据库的结果集封装到对象中POJO。
POJO:
一个简单的Java类,这个类没有实现/继承任何特殊的java接口或者类,不遵循任何主要java模型,约定或者框架的java对象。在理想情况下,POJO不应该有注解。
JavaBean:
JavaBean是可序列化的,实现了serializable接口
具有一个无参构造器
有按照命名规范的set和gett,is(可以用于访问布尔类型的属性)方法

创建数据库

1.下载我提供的sql,
链接:https://pan.baidu.com/s/1vTavm9guToveOGeB7VFX4A
提取码:xwbc
复制这段内容后打开百度网盘手机App,操作更方便哦


2.打开sqlyog,打开执行sql语句窗口。
在这里插入图片描述

3.把sql拷贝到sqlyog中,执行
在这里插入图片描述在这里插入图片描述
4.选中服务器,右键refresh,看到一个库mall.里面有5张表
选中服务器右键刷新
在这里插入图片描述
在这里插入图片描述

以前使用的是hibernate

逆向工程

通过逆向工程生成sql语句。

生成sql,pojo类

在这里插入图片描述在这里插入图片描述

下载generator原始.rar

链接:https://pan.baidu.com/s/1dYIcscVoJuChRavHQEGcxQ
提取码:3u77

扫描二维码关注公众号,回复: 12366979 查看本文章

下载完成后 放到Eclipse工作区中
Eclipse中import →maven→Existing Maven projects
在这里插入图片描述

查看Mysql 的版本号

不同版本的mysql连接字符串不一样,先查看本机的mysql版本。
点击此电脑 > 右键 > 管理 > 服务和应用程序 >服务 >mysql
在这里插入图片描述

查出mysql的版本

在这里插入图片描述

quit退出mysql

在这里插入图片描述

修改根目录下的generatorConfig.xml配置文件

在这里插入图片描述

项目中的配置是针对mysql5的,如果是mysql8需要修改driverclass,增加4个property.
如果数据库是8.0以上的使用以下:

<?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>
	<context id="testTables" targetRuntime="MyBatis3">

		<!-- JavaBean 实现 序列化 接口 -->
		<plugin type="org.mybatis.generator.plugins.SerializablePlugin">
		</plugin>
		<!-- genenat entity时,生成toString -->
		<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
		<!-- 共用5处要修改 -->

		<!--修改1: 数据库连接的信息:驱动类、连接地址、用户名、密码  
		<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/mall" userId="root"
			password="root">			
		</jdbcConnection> -->
		<!-- 数据库是8.0+时,1,修改pom.xml 加载mysql8的驱动 2,使用下面的jdbcConnection -->
		  
		<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/mall" userId="root"
			password="root">
			<property name="useUnicode" value="true" />
			<property name="characterEncoding" value="utf-8" />
			<property name="serverTimezone" value="GMT" />
			<property name="nullCatalogMeansCurrent" value="true" />
		</jdbcConnection>

		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 
			和 NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!--修改2: targetProject:生成PO类的位置 -->
		<javaModelGenerator
			targetPackage="com.tedu.project_jt.pojo"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>

		<!--修改3: targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator
			targetPackage="com.tedu.project_jt.mapper"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>

		<!-- 修改4: targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.tedu.project_jt.mapper"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>

		<!--修改5: 指定数据库表 -->
		<table tableName="category" />
		<table tableName="item" />
		<table tableName="user" />
		<table tableName="jt_order" />
		<table tableName="admin" />

	</context>
</generatorConfiguration>

如果数据库是8.0以下的使用以下配置:

```java
<?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>
	<context id="testTables" targetRuntime="MyBatis3">

		<!-- JavaBean 实现 序列化 接口 -->
		<plugin type="org.mybatis.generator.plugins.SerializablePlugin">
		</plugin>
		<!-- genenat entity时,生成toString -->
		<plugin type="org.mybatis.generator.plugins.ToStringPlugin" />
		<!-- 共用5处要修改 -->

		<!--修改1: 数据库连接的信息:驱动类、连接地址、用户名、密码 -->
		<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/mall" userId="root"
			password="root">			
		</jdbcConnection> 
		<!-- 数据库是8.0+时,1,修改pom.xml 加载mysql8的驱动 2,使用下面的jdbcConnection -->
		<!--
		<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
			connectionURL="jdbc:mysql://localhost:3306/mall" userId="root"
			password="root">
			<property name="useUnicode" value="true" />
			<property name="characterEncoding" value="utf-8" />
			<property name="serverTimezone" value="GMT" />
			<property name="nullCatalogMeansCurrent" value="true" />
		</jdbcConnection>
-->
		<!-- 默认false,把JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true时把JDBC DECIMAL 
			和 NUMERIC 类型解析为java.math.BigDecimal -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!--修改2: targetProject:生成PO类的位置 -->
		<javaModelGenerator
			targetPackage="com.tedu.project_jt.pojo"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
			<!-- 从数据库返回的值被清理前后的空格 -->
			<property name="trimStrings" value="true" />
		</javaModelGenerator>

		<!--修改3: targetProject:mapper映射文件生成的位置 -->
		<sqlMapGenerator
			targetPackage="com.tedu.project_jt.mapper"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="false" />
		</sqlMapGenerator>

		<!-- 修改4: targetPackage:mapper接口生成的位置 -->
		<javaClientGenerator type="XMLMAPPER"
			targetPackage="com.tedu.project_jt.mapper"
			targetProject=".\src\main\java">
			<!-- enableSubPackages:是否让schema作为包的后缀 -->
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>

		<!--修改5: 指定数据库表 -->
		<table tableName="category" />
		<table tableName="item" />
		<table tableName="user" />
		<table tableName="jt_order" />
		<table tableName="admin" />

	</context>
</generatorConfiguration>

打开pox.xml

数据库低于8.0的朋友,不用操作这一步:
在这里插入图片描述

执行src/main/java/GeneratorApp生成xml和实体类

在这里插入图片描述

执行完成:
在这里插入图片描述

执行GeneratorApp后,选中项目右键refresh,查看生成的xml和类如下图
在这里插入图片描述

查看生成的sql

只查看sql

POJO(Plain Ordinary Java Object)简单的Java对象,也叫实体类。对象的另一种叫法,如一个人有多个名字
类中只包含属性和set(),get()方法。一般情况下一张表对应一个pojo

商品分类CRUD操作

mywbatis项目

1.打开工作区中的generator原始文件\src\main\java\com\tedu\project_jt

创建项目

项目是mybatis_01jt,添加Spring Web、MyBatis Framework、MySql Driver依赖。
包名是com.tedu.jt,包名要和逆向工程生成的包名一致。
在这里插入图片描述

解压到打工作区

在这里插入图片描述

导入eclipse

在这里插入图片描述
在这里插入图片描述



在这里插入图片描述

复制这2个文件夹到刚刚创建的项目文件中:
project_jt\src\main\java\com\tedu\project_jt
在这里插入图片描述

然后:选中项目project_jt右键>maven> Update Project>勾选上,刷新重新加载一下

在这里插入图片描述

打开数据库mall、打开user表添加2条数据

在这里插入图片描述


打开eclipse,打开复制application.properties,新建一个application.yml

然后打开application.yml,把这段代码复制粘贴进去

server:
  port: 8080

spring:     
    datasource:        
        driver-class-name: com.mysql.cj.jdbc.Driver        
        url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
        username: root        
        password: root
    
mybatis:
  mapperLocations: classpath:com.tedu.jtmall.mapper/*.xml

logging:
  path: ./logs
  level: 
    com.tedu.jtmall.mapper: debug

在这里插入图片描述

server:
  port: 8080

spring:     
    datasource:        
        driver-class-name: com.mysql.cj.jdbc.Driver        
        url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
        username: root        
        password: root
    
mybatis:
  mapperLocations: classpath:com.tedu.project_jt.mapper/*.xml

logging:
  path: ./logs
  level: 
    com.tedu.project_jt.mapper: debug

找到UserMapper类,打开复制包名
在这里插入图片描述

复制粘贴到application.yml中的12句上:后面。
在这里插入图片描述

打开ProjectJtApplication类添加一条注解

//mybatis框架会自动为mapper包下的所有接口创建代理类
@MapperScan(“com.tedu.project_jt.mapper”)

在这里插入图片描述



代理对象

选中com.tedu.project_jt.controller 包,右键创建一个新的包com.tedu.project_jt.controller

在这里插入图片描述

在包下创建一个类,类名为UserController

在这里插入图片描述

package com.tedu.project_jt.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.tedu.project_jt.mapper.UserMapper;
import com.tedu.project_jt.pojo.User;

@RestController
public class UserController {
    
    

	//从spring框架ioc容器中,拿UserMapper接口代理类的对象
	@Autowired
	UserMapper userMapper;
	@RequestMapping("lectAll")
	public List<User> selectAll() {
    
    
		return userMapper.selectByExample(null);
	}
}

然后打开ProjectJtApplication类 Run as执行:
http://localhost:8080/lectAll
在这里插入图片描述




下面我们继续练习(加深印象),新建项目,下载dbDemo文件

链接:https://pan.baidu.com/s/1VS8-ZkYC9HXXjOMYhlyeTA
提取码:fjmf
拷贝到eclipse工作区,解压,更改名字为mybatis02
在这里插入图片描述
打开eclipse,导入maven项目
在这里插入图片描述

打开generator原始\src\main\java\com 把com复制到mybatis02的java中

在这里插入图片描述

然后新建一个包

在这里插入图片描述

更改包名显示样式

在这里插入图片描述在这里插入图片描述

找到我们的sql查询语句
在这里插入图片描述

复制 application.properties文件
在这里插入图片描述

打开application.yml

复制粘贴一下代码进去

server:
  port: 8080

spring:     
    datasource:        
        driver-class-name: com.mysql.cj.jdbc.Driver        
        url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
        username: root        
        password: root
    
mybatis:
  mapperLocations: classpath:com.tedu.jtmall.mapper/*.xml

logging:
  path: ./logs
  level: 
    com.tedu.jtmall.mapper: debug

在这里插入图片描述

server:
  port: 8080

spring:     
    datasource:        
        driver-class-name: com.mysql.cj.jdbc.Driver        
        url: jdbc:mysql://localhost:3306/mall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2b8
        username: root        
        password: root
    
mybatis:
  mapperLocations: classpath:com.tedu.project_jt.mapper/*.xml

logging:
  path: ./logs
  level: 
    com.tedu.project_jt.mapper: debug

打开DbDemoApplication类

在这里插入图片描述

添加注解

package com.tedu.project_jt;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
//mybatis框架会为mapper包下的接口创建代理类
//$Proxy0 implements UserMapper
//为$Proxy0创建一个对象,叫代理对象
//controller @autowired取到代理对象
@MapperScan("com.tedu.project_jt.mapper")
public class DbDemoApplication {
    
    

	public static void main(String[] args) {
    
    
		SpringApplication.run(DbDemoApplication.class, args);
	}
}

在controller包中 new一个Usercontroller

在这里插入图片描述

package com.tedu.project_jt.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.tedu.project_jt.mapper.UserMapper;
import com.tedu.project_jt.pojo.User;

@RestController
public class Usercontroller {
    
    
   //从ioc容器中取UserMapper接口的代理类的对象
	@Autowired
	UserMapper userMapper;
	
	@RequestMapping("/selectAll")
	public List<User> selectAll(){
    
    
		return userMapper.selectByExample(null);
	}
}

Run AS执行:
http://localhost:8080/selectAll
在这里插入图片描述



有的朋友,可能显示出来的效果不是我这样的,就需要下载插件

在这里插入图片描述
在这里插入图片描述
1、打开chrome,右上角–>更多工具–>扩展程序

2、右上角,选中“开发模式”;

3、点击"加载已解压的扩展程序…" ->
下载插件链接:https://pan.baidu.com/s/18rIXWN3wWjyLOMBQtder9w
提取码:ccqu
然后选择插件目录文件。

4、安装完成,重新加载

小结

mybatis项目

1.用https://start.spring.io/ 网站生成
2.项目没有配置url,就启动报错
Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.

3.拷贝生成的mapper和pojo包
4.拷贝application.properties,改名为application.yml,配置代码 上面内容中有


mybatis的使用

​ 1,拷贝cdbDemo到工作区中,把文件夹改名成mybatis02,修改pom.xml中的artifaceId和name, import导入 ,然后run as启动,发现报错。

​ 2,拷贝生成的代码,拷贝com

​ 3, com.tedu.project_jt.mapper
​ .pojo
​ .controller
​ DBDemoApplication

​4,拷贝application.properties改名成application.yml,拷贝配置,修改数据库信息,修改mapplocation和log的包名

5,入口类上@mapperScan(“com.tedu.project_jt.mapper”)

​ 6,创建controller

​ 7,装jsonView

如果在入口类中不配置mapperScan

Field userMapper in com.tedu.project_jt.controller.UserController required a bean of type 'com.tedu.project_jt.mapper.UserMapper' that could not be found.
The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true)
Action:
Consider defining a bean of type 'com.tedu.project_jt.mapper.UserMapper' in your configuration.



总结

1.spring ioc容器
UserController需要UserServiceImpl的对象,自己new
UserController被UserServiceImpl控制。
@autowired 容器给我一个对象
UserService userServiceImpl1

@service
class UserServiceImpl1
class UserServiceimpl2

先遍历hashmap,取出所有对象,看对象的类型是否是UserService,
根据类型找对象可能会失败,一个是hashMap中没有对象,另一个是有多个对象。
hashMap.get(userServiceImpl1),根据对象名称去找一个对象
mybatis解决什么问题?(jdbc封装)

使用步骤:
​ 1,创建一个springboot项目,添加mysql,mybatis,web依赖
​ 2,用代码生成UserMapper.xml,UserMapper.java,User
​ 3, 在application.yml配置数据库信息,mapperLocation,log
​ 4,在入口类*Applicaiton添加@mapperScan(""),mybatis框架会为mapper包上的接口创建代理类Proxy51,为Proxy51类创建对象,放在spring ioc容器中
​ 5,在controller 中@autowired取到userMapper对象,调用方法
软件是对数据的处理,把处理的结果显示在屏幕上。
中小型项目用vue+ssm
大型项目用 vue +ssm+redis+微服务+docker

猜你喜欢

转载自blog.csdn.net/QQ1043051018/article/details/112778260