https://github.com/zq2599/blog_demosjava
内容:全部原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;mysql
《MyBatis初级实战》系列旨在经过一系列编码实战,和读者一块儿掌握MyBatis的基本用法,帮助初学者快速运用MyBatis参与实际开发;git
《MyBatis初级实战》面向的是对MyBatis有兴趣的读者,向读者们提供可用的方案和代码,这里不是比较Hibernate、sqltoy-orm的地方,做者也十分承认这些ORM框架,但《MyBatis初级实战》不参与比较;程序员
引自官方:MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎全部的 JDBC 代码以及设置参数和获取结果集的工做。MyBatis 能够经过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。github
《MyBatis初级实战》系列的环境信息以下:web
Spring Boot集成MyBatis的常规步骤以下:spring
USE mybatis; DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(32) NOT NULL AUTO_INCREMENT, `name` varchar(32) NOT NULL, `age` int(32) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; DROP TABLE IF EXISTS `log`; CREATE TABLE `log` ( `id` int(32) NOT NULL AUTO_INCREMENT, `user_id` int(32), `action` varchar(255) NOT NULL, `create_time` datetime not null, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; INSERT INTO mybatis.user (id, name, age) VALUES (3, 'tom', 11); INSERT INTO mybatis.log (id, user_id, action, create_time) VALUES (3, 3, 'read book', '2020-08-07 08:18:16');
名称 | 连接 | 备注 |
---|---|---|
项目主页 | https://github.com/zq2599/blog_demos | 该项目在GitHub上的主页 |
git仓库地址(https) | https://github.com/zq2599/blog_demos.git | 该项目源码的仓库地址,https协议 |
git仓库地址(ssh) | git@github.com:zq2599/blog_demos.git | 该项目源码的仓库地址,ssh协议 |
为了整个系列的代码好管理,我这边用maven建立的是父子工程,若是您只要子工程,不须要父子结构,要对子工程的pom.xml作如下调整:sql
<parent> <groupId>com.bolingcavalry</groupId> <artifactId>mybatis</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent>
请替换成如下内容(也就是直接用>spring-boot-starter-parent做为父工程):docker
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
建立名为mybatis的maven工程,pom.xml内容以下:shell
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.2.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.bolingcavalry</groupId> <artifactId>mybatis</artifactId> <version>1.0-SNAPSHOT</version> <packaging>pom</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <modules> <module>simple</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.3</version> </dependency> </dependencies> </dependencyManagement> </project>
<?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>com.bolingcavalry</groupId> <artifactId>mybatis</artifactId> <version>1.0-SNAPSHOT</version> <relativePath>../pom.xml</relativePath> </parent> <groupId>com.bolingcavalry</groupId> <artifactId>simple</artifactId> <version>0.0.1-SNAPSHOT</version> <name>simple</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <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.3</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-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
server: port: 8080 spring: # 数据源 datasource: username: root password: 123456 url: jdbc:mysql://192.168.50.43:3306/mybatis?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC driver-class-name: com.mysql.cj.jdbc.Driver # mybatis配置 mybatis: # 配置文件所在位置 config-location: classpath:mybatis-config.xml # 映射文件所在位置 mapper-locations: classpath:mappers/*Mapper.xml # 日志配置 logging: level: root: INFO com: bolingcavalry: simple: mapper: debug
package com.bolingcavalry.simple.entity; /** * @Description: 实体类 * @author: willzhao E-mail: zq2599@gmail.com * @date: 2020/8/4 8:24 */ public class User { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } }
package com.bolingcavalry.simple.entity; import java.sql.Date; /** * @Description: 实体类 * @author: willzhao E-mail: zq2599@gmail.com * @date: 2020/8/4 8:24 */ public class Log { private Integer id; private Integer userId; private String action; private Date createTime; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getAction() { return action; } public void setAction(String action) { this.action = action; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } @Override public String toString() { return "Log{" + "id=" + id + ", userId=" + userId + ", action='" + action + '\'' + ", createTime=" + createTime + '}'; } }
6. application.yml所在目录下,新增名为mybatis-config.xml的文件,这是mybatis的配置文件,本例很简单只有一个配置,内容以下:
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <!-- 映射文件中的类不用写全路径了--> <package name="com.bolingcavalry.simple.entity"/> </typeAliases> </configuration>
<?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.bolingcavalry.simple.mapper.UserMapper"> <select id="sel" parameterType="int" resultType="User"> select * from user where id = #{id} </select> </mapper>
<?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.bolingcavalry.simple.mapper.LogMapper"> <resultMap id="logResultMap" type="Log"> <id property="id" column="id" /> <result column="user_id" jdbcType="INTEGER" property="userId" /> <result column="action" jdbcType="VARCHAR" property="action" /> <result column="create_time" jdbcType="TIMESTAMP" property="createTime" /> </resultMap> <select id="sel" parameterType="int" resultMap="logResultMap"> select * from log where id = #{id} </select> </mapper>
package com.bolingcavalry.simple.mapper; import com.bolingcavalry.simple.entity.User; import org.springframework.stereotype.Repository; @Repository public interface UserMapper { User sel(int id); }
package com.bolingcavalry.simple.mapper; import com.bolingcavalry.simple.entity.Log; import org.springframework.stereotype.Repository; @Repository public interface LogMapper { Log sel(int id); }
12. 映射配置完毕,接下来就能够在应用中使用了,先为user作一个service类UserService.java,里面经过Autowired注解注入UserMapper的实现:
package com.bolingcavalry.simple.service; import com.bolingcavalry.simple.entity.User; import com.bolingcavalry.simple.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired UserMapper userMapper; public User sel(int id){ return userMapper.sel(id); } }
package com.bolingcavalry.simple.service; import com.bolingcavalry.simple.entity.Log; import com.bolingcavalry.simple.mapper.LogMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class LogService { @Autowired LogMapper logMapper; public Log sel(int id){ return logMapper.sel(id); } }
package com.bolingcavalry.simple.controller; import com.bolingcavalry.simple.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping("user/{id}") public String GetUser(@PathVariable int id){ return userService.sel(id).toString(); } }
package com.bolingcavalry.simple.controller; import com.bolingcavalry.simple.service.LogService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class LogController { @Autowired private LogService logService; @RequestMapping("log/{id}") public String log(@PathVariable int id){ return logService.sel(id).toString(); } }
package com.bolingcavalry.simple; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @MapperScan("com.bolingcavalry.simple.mapper") public class SimpleApplication { public static void main(String[] args) { SpringApplication.run(SimpleApplication.class, args); } }
4. 访问http://localhost:8080/log/3,能够获得log表的查询结果:
5. 在控制台能够看到日志以下所示,这是咱们开发期间调试问题的重要线索:
至此,入门级SpringBoot集成MyBatis的实战就完成了,接下来的系列内容会有更多实战,我们一块儿来学习和掌握MyBatis的基本用法;
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...