a.比较MyBatis和Hibernate
在管理系统时代,首先是实现业务逻辑,然后才是性能,所以Hibernate在当时是主流。
在移动互联网时代,MyBatis是首选,不屏蔽SQL,程序员可以自己制定SQL规则,能更加精确定义SQL,从而优化性能。更符合、高并发,大数据,高性能,高响应的要求。
b.开发接口写实体类
实体类好处就是,在IDE和编译器的支持下可以避免一切笔误,并且和语言无缝衔接。当然性能可能会有点损失,因为查询必然是查出所有字段。当然你也可以建个字段少的实体类,不过一般来说这点查询效率的损失不是事。
不用的好处就是,对于动态类型或者弱类型语言没办法编译期检查,有没有这东西都一样,而且返回的查询结果可以随意处理,删个字段,加个字段啥的都很方便,封装dao时候要做的处理也很少,不像各大框架要写那么细。
(个人认为:如果用的是java,而且可以用hibernate/mybatis或者类似的框架,那么 不 用实体类 一点好处都 没有 )
1、所有属性为private
2、提供默认构造方法
3、提供getter和setter
4、实现serializable接口
1.创建个webapp工程,先写pom.xml(注意:pom严格控制缩进,空格,可以拿去notepad++区分空格和tab,tab会成-->)
spring-boot-starter-parent:统一各种jar的版本号,避免了版本不一致而出现的问题。所以,引入其他的依赖就可以省略版本号spring-boot-starter-web:自动嵌入tomcat容器
<?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.ocean</groupId>
<artifactId>springboot-mybatis-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>springboot-mybatis-demo</name>
<description>Demo project for Spring Boot</description>
#加
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.10.RELEASE</version>
</parent>
#加
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
#加
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
spring-boot-starter-parent主要提供了如下默认配置:
1.java版本默认使用1.8
2.编码格式默认使用utf-8
3.提供Dependency Management进行项目依赖的版本管理
4.默认的资源过滤与插件管理
2.在src\main\resources下创建application.yml(严格控制缩进)
(没有resources的创建:main下创建文件夹resources,并且make directory as Resources Root
没有java的创建:main下创建文件夹java,并且make directory as Sources Root。然后再创建包package)
注意:需要填写信息时请在冒号后面空格,否则数据无效
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&useSSL=false
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath*:mapper/*Mapper.xml
type-aliases-package: com.yeexun.entity
3.准备mysql
CREATE TABLE `t_msg` (
`id` int(11) NOT NULL,
`message` varchar(255) DEFAULT NULL COMMENT '信息',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
insert into t_msg VALUES (1,"hello SpringBoot");
3.构建项目目录,我构建了一个经典的web项目目录结构,entity实体类(别名: model层 ,domain层
用途:实体层,用于存放我们的实体类,与数据库中的属性值基本保持一致,实现set和get的方法)、mapper映射(dao层,XML文件的抽象类)、service接口、impl接口实现、controller业务访问。resources/mapper包用于存放xml
4.构建数据库对应的实体类TMsg,这个类放在entity
package com.yeexun.entity;
import lombok.Data;
import java.io.Serializable;
@Data
public class TMsg implements Serializable {
private Integer id;
private String message;
}
5.Mapper接口和xml文件
package com.yeexun.mapper;
import com.yeexun.entity.TMsg;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface TMsgMapper {
public TMsg findById(Integer id);
}
#{}:相当于JDBC中的PreparedStatement
${}:是输出变量的值
简单说,#{}是经过预编译的,是安全的; ${}是未经过预编译的,仅仅是取变量的值,是非安全的,存在SQL注入。
<?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.yeexun.mapper.TMsgMapper">
<select id="findById" resultType="com.yeexun.entity.TMsg">
SELECT id,message from t_msg WHERE id = #{id}
</select>
</mapper>
Service的接口及实现
package com.yeexun.service;
import com.yeexun.entity.TMsg;
public interface TMsgService {
public TMsg findById(Integer id);
}
package com.yeexun.service.impl;
import com.yeexun.entity.TMsg;
import com.yeexun.mapper.TMsgMapper;
import com.yeexun.service.TMsgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class TMsgServiceImpl implements TMsgService {
@Autowired
private TMsgMapper tMsgMapper;
@Override
public TMsg findById(Integer id) {
return tMsgMapper.findById(id);
}
}
Controller层
package com.yeexun.controller;
import com.yeexun.entity.TMsg;
import com.yeexun.service.TMsgService;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/msg")
public class TMsgController {
@Autowired
private TMsgService tMsgService;
@GetMapping("/getMsg")
public String getMsg(@Param("id") Integer id){
TMsg tMsg = tMsgService.findById(id);
return tMsg.toString();
}
}
启动类
package com.yeexun;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootMybatisMysqlApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootMybatisMysqlApplication.class, args);
}
}
结构如图(application在第一层包内)
结果如图
其余删除 修改 插入见下面的文章
https://blog.youkuaiyun.com/baidu_36216018/article/details/79466935