相关文档:https://github.com/abel533/Mapper
目前在持久层框架上有 MyBatis 和 Spring Data JPA 两个选择, MyBatis 应用比较广泛,特别灵活,但是写映射文件比较繁琐。使用Generator后,一般的代码模板都是能够自动生成的,需要手写的部分比较少,加上通用mapper后就更加方便了。 Spring Data JPA 用起来比较简单,而且与 Spring Boot 整合起来非常好用。
以下代码github地址:https://github.com/LiWang1314/demo
tk.mybatis
mapper
4.0.3
mysql
mysql-connector-java
runtime
8.0.14
org.mybatis.generator
mybatis-generator-core
1.3.7
compile
true
org.mybatis.generator
mybatis-generator-maven-plugin
1.3.7
${basedir}/src/main/resources/generator/generatorConfig.xml
true
true
mysql
mysql-connector-java
8.0.14
tk.mybatis
mapper
4.1.5
注意:
1:mysql5用的驱动url是com.mysql.jdbc.Driver,mysql6以后用的是com.mysql.cj.jdbc.Driver。版本不匹配便会报驱动类已过时的错误。我的为mysql8
2:如果报下面的错:
The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
原因是没有指定时区jdbc:mysql://localhost:3306/**?serverTimezone=GMT%2B8
1:如果定义自己的基础接口,则generatorConfig.xml中的对应的配置
生成的mapper接口(dao层)则默认继承MyMapper接口
特别注意:如果你定义了一个自己的基础接口,该接口不能被扫描到,否则会出错
定义自己的基础接口:
package com.example.transfer.mappers;
import tk.mybatis.mapper.common.Mapper;
import tk.mybatis.mapper.common.MySqlMapper;
/*
Mapper接口:基本的增、删、改、查方法
MySqlMapper:针对MySQL的额外补充接口,支持批量插入
*/
public interface MyMapper extends Mapper,MySqlMapper {
}
2.反之:
注意: mappers的value值配置的对应的接口地址
,生成的 Mapper 接口都会自动继承上该接口
注意:如果需要生成model的时候生成lombok的注解,需要在generatorConfig.xml中添加
org.projectlombok
lombok
1.18.6
provided
idea lombok不生效问题请参考:https://blog.csdn.net/lwang_IT/article/details/83016597
mapper接口(dao层)
package com.example.transfer.dao;
import com.example.transfer.entity.FS;
import com.example.transfer.mappers.MyMapper;
public interface FSMapper extends MyMapper {
}
还有对应的实体类
package com.example.transfer.entity;
import java.util.Date;
import javax.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@Table(name = "fs")
public class FS {
@Id
private Integer id;
/**
* 店名
*/
private String name;
/**
* 省
*/
@Column(name = "state_id")
private Integer stateId;
}
.xml文件
注意:通用mapper还不能满足全部的数据库操作,一般还需要其他的自定义方法。在接口中添加其他方法的时候和只用 MyBatis 是完全一样的,但是需要注意,在对应的 XML 中,不能出现和继承接口中同名的方法!
比如我们要增加一个自己的的方法则:
.xml文件
INSERT INTO `fs`( `name`) VALUES (#{name});
mapper接口(dao层)
package com.example.transfer.dao;
import com.example.transfer.entity.FS;
import com.example.transfer.mappers.MyMapper;
public interface FSMapper extends MyMapper {
int insertA(FS fs);
}
#通用mapper的所在接包名接口名称
mapper.mappers=com.example.transfer.mappers.MyMapper
#如果没有自定义基础类
#mapper.mappers=tk.mybatis.mapper.common.Mapper
#数据库
mapper.identity=MYSQL
mybatis.typeAliasesPackage=com.example.transfer.entity
mybatis.mapperLocations=classpath:mybatis/mapper/*Mapper.xml
#打印sql
logging.level.com.example.transfer.dao=debug
在启动类上扫描mapper接口(dao层)
@tk.mybatis.spring.annotation.MapperScan(basePackages = "com.example.transfer.dao")
调用:
@RequestMapping(value="test.do")
@ResponseBody
public void Test(){
//通用
List list=fsMapper.selectAll();
log.info("size:"+list.size());
FS fs=new FS();
fs.setName("姓名");
//自己
int addCount=fsMapper.insertA(fs);
log.info("测试添加"+addCount);
}