关于Mybatis实体类和数据库表之间的映射关系:
1、使用原生方式,即不使用工具和插件的方法:
例如:最简单的springboot的demo;
1.1、实体类的类名及属性要和数据库表名和字段名遵循下划线转驼峰命名格式;
1.2、因为Mapper接口没有实现类,所以需要用代理方式动态生成其对应的实现类,实现的方式有两种:
(1)在Mapper接口上用@Mapper注解,生成该类的实现类,@Mapper的包是 org.apache.ibatis.annotations.Mapper;
(2)如果有很多Mapper接口,在接口上用注解太麻烦,就需要在springBoot的启动类上用@MapperScan注解,括号中是包名路径,表示生成该包下所有接口的实现类;
1 import org.mybatis.spring.annotation.MapperScan; 2 import org.springframework.boot.SpringApplication; 3 import org.springframework.boot.autoconfigure.SpringBootApplication; 4 //import tk.mybatis.spring.annotation.MapperScan; //一个是org,一个是tk 5 6 /** 7 * @author TT 8 */ 9 @SpringBootApplication 10 @MapperScan("com.thl.mapper") //扫描mapper包下所有的mapper接口,如果还有其他包也需要生成实现类,括号中可以用数组方式配置多个包路径 11 public class SpringBootTkMapperApplication { 12 13 public static void main(String[] args) { 14 SpringApplication.run(SpringBootTkMapperApplication.class, args); 15 } 16 17 }
1.3、如果还有对应的*mapper.xml文件(用tk.mapper,单表的CRUD可以不用*mapper.xml),需要配置扫描resources下的mapper的xml文件;我是在application.properties文件中配置的;
1.4、如果没有用resultMap标签配置映射关系,入参用的是实体类,即用的resultType标签,则还需要配置下划线转驼峰的规则,不然字段映射不上。
如果用了resultMap标签,返回类型也是的话,则不需要配置下划线转驼峰规则,字段可以映射,但是以防万一,建议配置上,反正不影响什么;
1 #端口 2 server.port=8081 3 #数据库配置 4 spring.datasource.driver-class-name= com.mysql.jdbc.Driver 5 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/rbac 6 spring.datasource.username=root 7 spring.datasource.password=123456 8 #可以直接使用包名 9 mybatis.type-aliases-package=com.thl.domain 10 #扫描resources下mapper包路径下所有的xml文件 11 mybatis.mapper-locations=classpath:/mapper/*.xml 12 #下划线转驼峰配置 13 mybatis.configuration.map-underscore-to-camel-case=true
2、用工具类,例如用tk.mapper
2.1、单表的增删改查已经封装好了,如果不需要额外写sql的话,连mapper.xml文件都不需要写,因为它自动做了映射。
2.2、其次的话就是前面提到的xml文件中的<resultMap>标签,这个标签非常强大,可以指定数据库表的字段和实体类的属性之间的映射关系,指定好后就能封装成我们想要的对象;
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 <mapper namespace="com.thl.mapper.RoleMapper"> 4 <resultMap id="BaseResultMap" type="com.thl.domain.Role"> 5 <!-- 6 WARNING - @mbg.generated 7 --> 8 <id column="id" jdbcType="INTEGER" property="id" /> //指定主键 9 <result column="name" jdbcType="VARCHAR" property="name" /> //指定name属性 10 <result column="is_disabled" jdbcType="INTEGER" property="isDisabled" />//指定isDisabled属性,这里就自己做了映射 11 </resultMap> 12 <select id="queryAll" resultMap="BaseResultMap" parameterType="com.thl.domain.Role"> //这里用封装好的BaseResultMap对象
13 select * from `role` where id = #{id}
14 </select> 15 </mapper>