定义一个Car类:
-
/**
-
* 封装汽车相关信息的 pojo类
-
*/
-
public
class
Car {
-
// 数据库表当中的字段应该和pojo类的属性一一对应
-
// 建议使用包装类, 这样可以防止null的问题
-
private Long id;
-
private String carNum;
-
private String brand;
-
private Double guidePrice;
-
private String produceTime;
-
private String carType;
-
public
Car
() {
-
}
-
public
Car
(Long id, String carNum, String brand, Double guidePrice, String produceTime, String carType) {
-
this.id = id;
-
this.carNum = carNum;
-
this.brand = brand;
-
this.guidePrice = guidePrice;
-
this.produceTime = produceTime;
-
this.carType = carType;
-
}
-
public Long
getId
() {
return id;}
-
public
void
setId
(Long id) {
this.id = id;}
-
@Override
-
public String
toString
() {
-
return
"Car{" +
-
"id=" + id +
-
", carNum='" + carNum +
'\'' +
-
", brand='" + brand +
'\'' +
-
", guidePrice=" + guidePrice +
-
", produceTime='" + produceTime +
'\'' +
-
", carType='" + carType +
'\'' +
-
'}';
-
}
-
public String
getCarNum
() {
return carNum;}
-
public
void
setCarNum
(String carNum) {
this.carNum = carNum;}
-
public String
getBrand
() {
return brand;}
-
public
void
setBrand
(String brand) {
this.brand = brand;}
-
public Double
getGuidePrice
() {
return guidePrice;}
-
public
void
setGuidePrice
(Double guidePrice) {
this.guidePrice = guidePrice;}
-
public String
getProduceTime
() {
return produceTime;}
-
public
void
setProduceTime
(String produceTime) {
this.produceTime = produceTime;}
-
public String
getCarType
() {
return carType;}
-
public
void
setCarType
(String carType) {
this.carType = carType;}
-
}
1. 查询之返回Car:
-
// CarMapper.xml
-
// 必须要指定返回结果的类型
-
<select id=
"selectById" resultType=
"Car">
-
<!-- select * from car
where
id
= #{id}-->
-
// 列名要和pojo类中的属性名要对的上, 否则查出来为null
-
select
-
id, car_num as carNum, brand, guide_price as guidePrice,
-
produce_time as produceTimme,
-
car_type as catType
-
from
-
car
-
where
-
id
= #{id}
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 根据id查询Car信息
-
Car
selectById
(Long id);
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
Car
car
= mapper.selectById(
16L);
-
System.out.println(car);
-
-
sqlSession.close();
-
}
2. 查询之返回多个Car:
-
// CarMapper.xml
-
// 必须要指定返回结果的类型
-
<select id=
"selectAll" resultType=
"Car">
-
<!-- select * from car
where
id
= #{id}-->
-
// 列名要和pojo类中的属性名要对的上, 否则查出来为null
-
select
-
id, car_num as carNum, brand, guide_price as guidePrice,
-
produce_time as produceTimme,
-
car_type as catType
-
from
-
car
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 查询所有Car信息
-
List<Car>
selectAll
();
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
List<Car> cars = mapper.selectAll();
-
cars.forEach(car -> System.out.println(car));
-
-
sqlSession.close();
-
}
3. 查询之返回Map:
map的key都是数据库的列名
-
// CarMapper.xml
-
// resultType="java.util.Map" 有别名: "map"
-
<select id=
"selectByIdRetMap" resultType=
"map">
-
// 返回的类型是个map, 不需要和Car类属性匹配了
-
select * from car
where
id
= #{id}
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 根据id获取汽车信息, 将信息放到Map集合中
-
Map<String, Object>
selectByIdRetMap
(Long id);
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
Map<String, Object> car = mapper.selectByIdRetMap(
16L);
-
System.out.println(car);
-
sqlSession.close();
-
}
4. 查询之返回多个Map:
-
// CarMapper.xml
-
// resultType="map", 不能写"list"
-
<select id=
"selectAllRetListMap" resultType=
"map">
-
// 返回的类型是个map, 不需要和Car类属性匹配了
-
select * from car
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 查询所有的car信息, 返回一个存放Map集合的List集合
-
List<Map<String, Object>>
selectAllRetListMap
();
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
List<Map<String, Object>> maps = mapper.selectAllRetListMap();
-
maps.forEach(map -> System.out.println(map));
-
sqlSession.close();
-
}
5. 查询之返回Map<String,Map>:
拿Car的id做key, 以后取出对应的Map集合时更加方便
需要使用到@MapKey注解
-
// CarMapper.xml
-
// resultType="map", 不能写"list"
-
<select id=
"selectAllRetMap" resultType=
"map">
-
// 返回的类型是个map, 不需要和Car类属性匹配了
-
select * from car
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 查询所有的Car, 返回一个Map集合
-
// Map集合的key是每条记录的主键值
-
// Map集合的value是每条记录
-
@MapKey("id")
// 将查询结果的id值作为一个大map集合的key
-
Map<Long,Map<String, Object>>
selectAllRetMap
();
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
Map<Long,Map<String, Object>> maps = mapper.selectAllRetMap();
-
System.out.println(maps);
-
sqlSession.close();
-
}
6. resultMap结果映射:
查询结果的列名和Java对象的属性名对应不上怎么办?
as给列起别名
-
// CarMapper.xml
-
// 必须要指定返回结果的类型
-
<select id=
"selectAll" resultType=
"Car">
-
select
-
id,
-
car_num as carNum,
-
brand,
-
guide_price as guidePrice,
-
produce_time as produceTimme,
-
car_type as catType
-
from
-
car
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 查询所有Car信息
-
List<Car>
selectAll
();
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
List<Car> cars = mapper.selectAll();
-
cars.forEach(car -> System.out.println(car));
-
-
sqlSession.close();
-
}
使用resultMap进行结果映射
-
// CarMapper.xml
-
-
<resultMap id=
"carResultMap" type=
"Car">
-
// 如果数据库表中有主键, 一般都是有主键的, 否则不符合数据库设计第一范式
-
// 如果有主键, 建议这里面配置一个id标签, 这样是为了提高效率
-
<
id
property
=
"id" column=
"id"/>
-
// property后面填写的是POJO类的属性名
-
// column后面填写的是数据库的字段名
-
<result property=
"carNum" column=
"car_num"/>
-
// 如果属性名和字段名相同, 可以不配置
-
<result property=
"brand" column=
"brand"/>
-
<result property=
"guidePrice" column=
"guide_price"/>
-
<result property=
"produceTime" column=
"produce_time"/>
-
<result property=
"carType" column=
"car_type"/>
-
</resultMap>
-
-
// resultMap属性用来指定使用哪个结果映射, resultMap后面的值是resultMap的id
-
<select id=
"selectAllByResultMap" resultMap=
"carResultMap">
-
select * from car
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 查询所有Car信息, 使用resultMap标签
-
List<Car>
selectAllByResultMap
();
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
List<Car> cars = mapper.selectAllByResultMap();
-
cars.forEach(car -> System.out.println(car));
-
-
sqlSession.close();
-
}
是否开启驼峰命名自动映射(配置settings)
使用这种方式的前提是: 属性遵循java命名规范, 数据库的列名遵循sql的命名规范
java命名规范: 首字母小写, 后面每个单词首字母大写, 遵循驼峰命名方式
sql命名规范: 全部小写, 单词之间采用下划线分割
-
如何启用该功能呢? 需要在mybatis-config.xml文件中配置
-
-
// 放在properties标签后面
-
<settings>
-
<setting name=
"mapUnderscoreToCameCase" value=
"true">
-
</settings>
-
-
// CarMapper.xml
-
<select id=
"selectAllBymapUnderscoreToCameCase" resultType=
"Car">
-
select * from car
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 查询所有Car信息, 启用驼峰命名自动映射机制
-
List<Car>
selectAllBymapUnderscoreToCameCase
();
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
List<Car> cars = mapper.selectAllBymapUnderscoreToCameCase();
-
cars.forEach(car -> System.out.println(car));
-
-
sqlSession.close();
-
}
7. 查询之返回总记录条数:
-
// CarMapper.xml
-
// resultType后面也可以写上java.lang.Long
-
<select id=
"selectTotal" resultType=
"long">
-
select
count
(*) from car
-
</select>
-
-
// 接口
-
public
interface
CarMapper{
-
// 获取Car的总记录条数
-
Long
selectTotal
();
-
}
-
-
// @test
-
public
static
void
main
(String[] args) {
-
SqlSession
sqlSession
= SqlSessionUtil.openSession();
-
CarMapper
mapper
= sqlSession.getMapper(CarMapper.class);
-
-
Long
nums
= mapper.selectTotal();
-
System.out.println(nums);
-
-
sqlSession.close();
-
}
转载:https://blog.csdn.net/qq_68993495/article/details/128847409
查看评论