首先说明,博主用的是springboot,如使用原生态的mybatis的一些配置文件请自行百度
贴上pom文件
<?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.1.2.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.hw</groupId>
<artifactId>springboot-mybatis-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-mybatis-test</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--web模块-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
<!--mysql-->
<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>
</dependency>
<!--逆向工程-->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<!--tkmybatis-->
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper-spring-boot-starter -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
</dependencies>
<build>
<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.5</version>
<dependencies>
<dependency>
<groupId> mysql</groupId>
<artifactId> mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.5</version>
</dependency>
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>3.5.2</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>Generate MyBatis Artifacts</id>
<phase>package</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<!--允许移动生成的文件 -->
<verbose>true</verbose>
<!-- 是否覆盖 -->
<overwrite>true</overwrite>
<!-- 自动生成的配置 -->
<configurationFile>
src/main/resources/mybatis-generator.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
然后贴上application.properties配置文件
#配置编码格式
spring.http.encoding.force=true
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
server.tomcat.uri-encoding=UTF-8
#配置数据库相关信息
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#开启驼峰命名
mybatis.configuration.mapUnderscoreToCamelCase=true
逆向工程配置文件
<?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>
<!--数据库驱动jar 由于pom文件中导入了驱动,所以这里可以不用 -->
<!--<classPathEntry-->
<!--location="C:\Users\Administrator\.m2\repository\mysql\mysql-connector-java\5.1.45" />-->
<context id="Tables" targetRuntime="MyBatis3">
<!--去除注释 -->
<!--<commentGenerator>
<property name="suppressAllComments" value="true" />
</commentGenerator>-->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers" value="tk.mybatis.mapper.common.Mapper"/>
<!-- caseSensitive默认false,当数据库表名区分大小写时,可以将该属性设置为true -->
<property name="caseSensitive" value="true"/>
</plugin>
<!--数据库连接 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://127.0.0.1:3306/mybatis" userId="root"
password="root">
</jdbcConnection>
<!--默认false Java type resolver will always use java.math.BigDecimal if
the database column is of type DECIMAL or NUMERIC. -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!--生成实体类 指定包名 以及生成的地址 (可以自定义地址,但是路径不存在不会自动创建 使用Maven生成在target目录下,会自动创建) -->
<javaModelGenerator targetPackage="com.hw.tk.mybatis.user"
targetProject="E:\Project\Maven\springboot-mybatis-test\src\main\java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!--生成SQLMAP文件 -->
<sqlMapGenerator targetPackage="com.hw.tk.mapper.user"
targetProject="E:\Project\Maven\springboot-mybatis-test\src\main\java">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!--生成Dao文件 可以配置 type="XMLMAPPER"生成xml的dao实现 context id="DB2Tables" 修改targetRuntime="MyBatis3" -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.hw.tk.mapper.user"
targetProject="E:\Project\Maven\springboot-mybatis-test\src\main\java">
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!--对应数据库表 mysql可以加入主键自增 字段命名 忽略某字段等 -->
<table tableName="student" domainObjectName="student" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
</context>
</generatorConfiguration>
然后我们使用maven插件生成实体类和mapper接口,双击下图位置即可
之后就能看见我们生成的文件了,贴上代码:
//实体类
package com.hw.tk.mybatis.user;
import javax.persistence.*;
public class student {
/**
* 编号
*/
@Id
private Integer sid;
/**
* 名字
*/
@Column(name = "s_name")
private String sName;
/**
* 教师id
*/
private Integer tid;
@Override
public String toString() {
return "student{" +
"sid=" + sid +
", sName='" + sName + '\'' +
", tid=" + tid +
'}';
}
public student(Integer sid, String sName, Integer tid) {
this.sid = sid;
this.sName = sName;
this.tid = tid;
}
public student(Integer sid) {
this.sid = sid;
}
public student(String sName) {
this.sName = sName;
}
public student(String sName, Integer tid) {
this.sName = sName;
this.tid = tid;
}
public student() {
super();
}
/**
* 获取编号
*
* @return sid - 编号
*/
public Integer getSid() {
return sid;
}
/**
* 设置编号
*
* @param sid 编号
*/
public void setSid(Integer sid) {
this.sid = sid;
}
/**
* 获取名字
*
* @return s_name - 名字
*/
public String getsName() {
return sName;
}
/**
* 设置名字
*
* @param sName 名字
*/
public void setsName(String sName) {
this.sName = sName == null ? null : sName.trim();
}
/**
* 获取教师id
*
* @return tid - 教师id
*/
public Integer getTid() {
return tid;
}
/**
* 设置教师id
*
* @param tid 教师id
*/
public void setTid(Integer tid) {
this.tid = tid;
}
}
package com.hw.tk.mapper.user;
import com.hw.tk.mybatis.user.student;
import tk.mybatis.mapper.common.Mapper;
//可以在这里定义你自己的业务逻辑方法,当然,实现的mapper这个接口它本身自带很多通用的方法
public interface studentMapper extends Mapper<student> {
}
xml文件
<?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.hw.tk.mapper.user.studentMapper">
<resultMap id="BaseResultMap" type="com.hw.tk.mybatis.user.student">
<!--
WARNING - @mbg.generated
-->
<id column="sid" jdbcType="INTEGER" property="sid" />
<result column="s_name" jdbcType="VARCHAR" property="sName" />
<result column="tid" jdbcType="INTEGER" property="tid" />
</resultMap>
<sql id="Base_Column_List">
<!--
WARNING - @mbg.generated
-->
sid, s_name, tid
</sql>
</mapper>
到此生成文件就结束了,这里可以看到生成的实体类属性都带着中文注释,而这个注释就是数据库中字段的注释
整个项目结构图:
完事之后来试试tkmapper给我们自带的一些通用方法,在测试之前我们需要在springboot的启动类中声明一个注解:
package com.hw;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan; //注意是tkmybatis的注解不是spring的
@MapperScan("com.hw.tk.mapper.*") //扫描该包下的注解
@SpringBootApplication
public class SpringbootMybatisTestApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisTestApplication.class, args);
}
}
用上我们的测试,其中常用的方法我也贴在代码中的注释用
package com.hw;
import com.hw.tk.mapper.user.studentMapper;
import com.hw.tk.mybatis.user.student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;
import tk.mybatis.mapper.entity.Example;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMybatisTestApplicationTests {
@Autowired //自动注入,由于是测试所以没有service层,直接使用mapper
studentMapper studentMapper;
/**
* 通用Mapper常用方法:
*
* 等号的CRUD:
* List<T> select(T record); 根据实体中的属性值进行查询,查询条件使用等号
* T selectByPrimaryKey(Object key); 根据主键字段进行查询,方法参数必须包含完整的主键属性,查询条件使用等号
* List<T> selectAll(); 查询全部结果,select(null)方法能达到同样的效果
* T selectOne(T record); 根据实体中的属性进行查询,只能有一个返回值,有多个结果是抛出异常,查询条件使用等号
* int selectCount(T record); 根据实体中的属性查询总数,查询条件使用等号
* int insert(T record); 保存一个实体,null的属性也会保存,不会使用数据库默认值
* int insertSelective(T record); 保存一个实体,null的属性不会保存,会使用数据库默认值
* int updateByPrimaryKey(T record); 根据主键更新实体全部字段,null值会被更新
* int updateByPrimaryKeySelective(T record); 根据主键更新属性不为null的值
* int delete(T record); 根据实体属性作为条件进行删除,查询条件使用等号
* int deleteByPrimaryKey(Object key); 根据主键字段进行删除,方法参数必须包含完整的主键属性
* 条件的CRUD:
* List<T> selectByCondition(Object condition); 根据Condition条件进行查询
* int selectCountByCondition(Object condition); 根据Condition条件进行查询总数
* int updateByCondition(@Param("record") T record, @Param("example") Object condition); 根据Condition条件更新实体record包含的全部属性,null值会被更新
* int updateByConditionSelective(@Param("record") T record, @Param("example") Object condition); 根据Condition条件更新实体record包含的不是null的属性值
* int deleteByCondition(Object condition); 根据Condition条件删除数据
*/
@Test
public void contextLoads() throws Exception {
//Example是用来过滤的一个类,关于这个类的更多用法:https://gitee.com/free/Mapper/wikis/5.extend?sort_id=208211
Example example = new Example(student.class);//实例化
Example.Criteria criteria = example.createCriteria();
//like查询
criteria.orLike("sName", "%s%");
criteria.orLike("sName", "%0%");
List<student> students = studentMapper.selectByExample(example);
students.forEach(x-> System.err.println(x));
}
}
结果:
更多过滤的方式:可以直接看源码或者官方文档
https://gitee.com/free/Mapper/wikis/5.extend?sort_id=208211
查看下图根据方法名就能知道该方法是做什么用的