2020学习教程
web mybatis
引入properties 文件
jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://14.29.251.271:8036/sensor
jdbc.username=root
jdbc.password=1234
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="jdbc.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!-- <property name="driver" value="com.mysql.cj.jdbc.Driver"/>-->
<!-- <property name="url" value="jdbc:mysql://14.29.251.27:8036/sensor"/>-->
<!-- <property name="username" value="root"/>-->
<!-- <property name="password" value="root"/>-->
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
mybatis 配置文件讲解
mybatis xml 文件引入properties文件
查询所有用户
@Test
public void testAllUser() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = build.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
for (User user : mapper.getAllUser()) {
System.out.println(user);
}
List<User> allUser = mapper.getAllUser();
allUser.forEach(user -> System.out.println(user));
}
查询result报错分析
mybatis的特性:避免了大部分jdbc的代码,以及参数的手工设置,还有结果集的处理,但是也仅仅是帮助我们处理的结果集,查出来的结果集所对应的实体类对象是谁
### The error occurred while handling results
### SQL: select * from t_user where id = 3
### Cause: org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.example.mybatis.pojo.mapper.UserMapper.getUserById'. It's likely that neither a Result Type nor a Result Map was specified.
解决
resulttype 结果类型 、resultmap 结果映射
<select id="getUserById" resultMap="">
select * from t_user where id = 3
</select>
userMap
/**
* 查询员工
* @return
*/
User getUserById();
xml
<!-- User getUserById();-->
<!-- 查询结果类型必须设置,resultType:设置默认的映射关系,resultMap设置自定义的映射关系(一对多)-->
<select id="getUserById" resultType="com.example.mybatis.pojo.User">
select * from t_user where id = 3
</select>
test
@Test
public void testCRUD() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = build.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 命名空间的方法名
// 通过命名空间、找到, 通过mapper的全类名,找到映射文件,通过方法名找到sql语句
User userById = mapper.getUserById();
System.out.println(userById);
}
基础
CREATE TABLE `t_user` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`username` varchar(128) NOT NULL COMMENT 'username',
`password` varchar(128) NOT NULL COMMENT 'password',
`age` tinyint(4) DEFAULT NULL COMMENT 'age',
`sex` varchar(128) NOT NULL COMMENT 'sex',
`email` varchar(128) NOT NULL COMMENT 'email',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表'
版本过低的问题
### Error updating database. Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
### The error may exist in mappers/UserMapper.xml
### The error may involve com.example.mybatis.pojo.mapper.UserMapper.insertUser
### The error occurred while executing an update
### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Client does not support authentication protocol requested by server; consider upgrading MySQL client
sql 查询版本
select version();
8.0.31
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
pom.xml
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo3-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo3-mybatis</name>
<description>demo3-mybatis</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</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>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
</project>
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="https://jakarta.apache.org/log4j/" >
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<param name="Encoding" value="UTF-8" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m(%F:%L) \n"/>
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="info" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://14.29.251.271:8036/sensor"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatis.pojo.mapper.UserMapper">
<insert id="insertUser">
insert into t_user values(null,'admin','123456',23,'男','12345@qq.com')
</insert>
<!-- void updateUser();-->
<update id="updateUser">
update t_user set username = '张三' where id = 4
</update>
<!-- void deleteUser();-->
<delete id="deleteUser">
delete from t_user where id = 6
</delete>
</mapper>
User.class
package com.example.mybatis.pojo;
public class User {
private Integer id;
private String username;
private String password;
private Integer age;
private String sex;
private String email;
public User() {
}
public User(Integer id, String username, String password, Integer age, String sex, String email) {
this.id = id;
this.username = username;
this.password = password;
this.age = age;
this.sex = sex;
this.email = email;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", email='" + email + '\'' +
'}';
}
}
UserMapper.class
package com.example.mybatis.pojo.mapper;
public interface UserMapper {
/**
* MyBatis面向接口编程的两个一致
* 1、namespace一致
*/
/**
* 添加用户信息
*/
int insertUser();
/**
* 修改
*/
void updateUser();
/**
* 删除
*/
void deleteUser();
}
testClass
package com.example.mybatis.test;
import com.example.mybatis.pojo.User;
import com.example.mybatis.pojo.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.tomcat.util.file.ConfigurationSource;
import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.io.InputStream;
public class MyBatisTest {
@Test
public void testMyBatis() throws IOException {
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
int result = mapper.insertUser();
// sqlSession.commit();
System.out.println("result" + result);
}
@Test
public void testUpdate() throws IOException {
// 加载核心配置文件,获取字节输入流,把异常声明出去
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
// 创建build,通过里面的字节输入流获取里面的工厂对象
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
// 自动提交
SqlSession sqlSession = build.openSession(true);
// 获取当前对象
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 调用方法
mapper.updateUser();
}
@Test
public void testDelete() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = build.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
mapper.deleteUser();
}
}
web 开发 20221016
jdbc
#spring.datasource.url=jdbc:mysql://14.29.251.27:8036/sensor
#spring.datasource.username=root
#spring.datasource.password=root
#spring.datasource.driver-class-name=com.mysql.jdbc.Driver
参数
http://127.0.0.1/car/1111/owner/tiantian?age=3
package com.example.demo.controller;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
public class HelloController {
@RequestMapping("/")
public String handle01() {
return "Hello World";
}
@GetMapping("/car/{id}/owner/{name}")
public Map<String, Object> getCar(
@PathVariable("id") Integer id,
@PathVariable("name") String name,
@RequestParam("age") Integer age
) {
Map<String, Object> map = new HashMap<>();
map.put("id", id);
map.put("name", name);
map.put("age", age);
System.out.println(map);
return map;
}
@PostMapping("/save")
public Map postMethod(@RequestBody String content) {
Map<String, Object> map = new HashMap<>();
map.put("content", content);
return map;
}
}
web 开发
@RestController
@RequestMapping("/logo.png")
public String hello() {
return "hello";
}
package com.example.boot.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/logo.png")
public String hello() {
return "hello";
}
}
http://127.0.0.1:8080/logo.png
application.properties
静态资源前缀
spring.mvc.static-path-pattern=/static/**
spring.mvc.resources.static-locations=[classpath:/hello/]
http://127.0.0.1:8080/static/logo.png
hello world
spring boot hello world
- 测试url
http://127.0.0.1/car/1111/owner/tiantian?age=3
fetch("/save",{
method:'POST',body:JSON.stringify({"a":111})
}).then(function(res){
console.log(res)
})
- 新建controller包
package com.example.demo.controller;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
@RestController
public class HelloController {
@RequestMapping("/")
public String handle01() {
return "Hello World";
}
@GetMapping("/car/{id}/owner/{name}")
public Map<String, Object> getCar(
@PathVariable("id") Integer id,
@PathVariable("name") String name,
@RequestParam("age") Integer age
) {
Map<String, Object> map = new HashMap<>();
map.put("id", id);
map.put("name", name);
map.put("age", age);
System.out.println(map);
return map;
}
@PostMapping("/save")
public Map postMethod(@RequestBody String content) {
Map<String, Object> map = new HashMap<>();
map.put("content", content);
return map;
}
}
- main下resource新建 application.properties
server.port=80
学习教程2018
https://www.bilibili.com/video/BV1gW411W76m?p=2&spm_id_from=pageDriver
spring boot 缺点入门容易精通难
是基于spring的再封装
环境
https://start.spring.io/
java 版本 http://jdk.java.net/
mac jdk 11 https://www.oracle.com/java/technologies/downloads/#java11-mac
https://www.oracle.com/java/technologies/downloads/#license-lightbox
starter 启动器
spring-boot-starter 场景启动器
https://developers.google.com/blockly
https://www.cnblogs.com/hellokuangshen/tag/SpringBoot系列/
springboot 会自动扫描包
SpringBootApplication
SpringBootApplication 主配置类
spring注解版 07
配置文件
application.properties
server.port=9999
JSR303
多配置文件
启动配置 --spring.profiles.active=dev
server:
port: 9996
spring:
profiles:
active: prod
person:
name: "haha"
age: 11
dog:
name: ahuang
age: 2
---
server:
port: 996
spring:
profiles: dev
---
server:
port: 997
spring:
profiles: prod