1、了解通用mapper
通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。极其方便的使用MyBatis单表的增删改查。支持单表操作,不支持通用的多表联合查询。
2、通用mapper使用
1、 引入依赖
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
2、 spring集成
<bean class="tk.mybatis.spring.mapper.MapperScannerConfigurer">
<!--扫描所有dao接口的实现,加入到ioc容器中 -->
<property name="basePackage" value="cn.jiyun.dao"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
3、实体类
通用mapper中,每个实体类,就对应一个表,通过使用一些注解(全部是JPA中的注解),可以关联到每个字段,具体使用demo如下:
注解 | 含义 | 使用 |
---|---|---|
@Table | 指定关联的表,用在类上 | @Table(name=“表名”) 类名和表名默认对应规则为:驼峰转下划线 如果符合默认规则,此注解可以省略 |
@Column | 指定列名,用在字段上 | @Column(name = “字段名称”) 字段名和列名默认对应规则为:驼峰转下划线 如果符合默认规则,此注解可以省略 |
@Id | 标识字段为主键,用在字段上 | @Id,用在主键对应的字段上即可,必填,可以有多个此注解,代表联合主键 |
@Transient | 标识此字段不对应表中的列 | @Transient,用在实体类中自定义的额外字段 不对应具体表中字段,添加修改时会自动忽略 如果有自定义的额外字段,此注解必填 |
@GeneratedValue | 指定主键生成策略 | @GeneratedValue(generator = “JDBC”)数据库自增ID,可以取出由数据库内部生成的主键 @GeneratedValue(strategy = GenerationType.IDENTITY)数据库自增ID,不能取回ID值 @GeneratedValue(generator = “UUID”),随机数ID |
@Table(name="dept")//对应数据库表明dept2
public class Dept2{
@Id
private Integer id;
private String deptName;//对应数据库字段为:dept_name
private String deptcode;//默认对应数据库字段为:deptcode
}
4、dao层使用
继承tk.mybatis.mapper.common.Mapper<T>
,T对应泛型,就是实体类,代表要操作的表
public interface CountryMapper extend Mapper<Country2>{
//不用动也不用管,直接在service调用对应方法即可
}
5、 默认实现的方法
方法 | 说明 |
---|---|
T selectByPrimaryKey(Object key); |
根据主键字段进行查询 方法参数必须包含完整的主键属性 查询条件使用等号 实体类必须有@Id注解标识,否则所有字段都会作为查询条件 |
List<T> select(T record); |
根据实体中的属性值进行查询 查询条件使用等号 |
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); |
根据主键字段进行删除,方法参数必须包含完整的主键属性 |