2023.10.29
本章学习MyBatis的基本crud操作。
insert
java程序如下:
①使用map集合传参
@Test
public void testInsertCar(){
SqlSession sqlSession = SqlSessionUtil.openSession();
//先将数据放到Map集合中,在sql语句中使用 #{map集合的key} 来完成传值,#{} 等同于JDBC中的 ? ,#{}就是占位符
Map<String,Object> map = new HashMap<>();
map.put("carNum", "1029");
map.put("brand", "马自达");
map.put("guidePrice", 50.3);
map.put("produceTime", "2023-10-29");
map.put("carType", "燃油车");
// 执行SQL语句(使用map集合给sql语句传递数据)
int count = sqlSession.insert("insertCar", map);
System.out.println("插入了几条记录:" + count);
sqlSession.commit();
sqlSession.close();
}
②使用pojo传参
@Test
public void testInsertCarByPOJO(){
SqlSession sqlSession = SqlSessionUtil.openSession();
Car car = new Car(null,"1029","马自达",50.3,"2023-10-29","燃油车");
int count = sqlSession.insert("insertCar",car);
System.out.println(count);
sqlSession.commit();
sqlSession.close();
}
SQL语句如下:
<insert id="insertCar">
insert into t_car(id,car_num,brand,guide_price,produce_time,car_type) values (null,#{carNum},#{brand},#{guidePrice},#{produceTime},#{carType});
</insert>
运行结果:
ps:如果采用map集合传参,#{} 里写的是map集合的key,如果key不存在不会报错,数据库表中会插入NULL。
ps:如果采用POJO传参,#{} 里写的是POJO类中get方法的方法名去掉get之后将剩下的单词首字母变小写(例如:getAge对应的是#{age},getUserName对应的是#{userName}),如果这样的get方法不存在会报错。
delete
需求:根据car_num进行删除。
java程序如下:
@Test
public void testDeleteById(){
SqlSession sqlSession = SqlSessionUtil.openSession();
int count = sqlSession.delete("deleteById",2);
sqlSession.commit();
sqlSession.close();
}
sql语句如下:
<delete id="deleteById">
delete from t_car where id = #{id}
</delete>
运行结果:
ps:当占位符只有一个的时候,${} 里面的内容可以随便写。
update
java代码如下:
@Test
public void testUpdateById(){
SqlSession sqlSession = SqlSessionUtil.openSession();
Car car = new Car(21L,"1029","宝马7系",66.6,"1999-11-23","燃油车");
int count = sqlSession.update("updateById",car);
System.out.println(count);
sqlSession.commit();
sqlSession.close();
}
sql语句如下:
<update id="updateById">
update t_car set
car_num = #{carNum}, brand = #{brand},
guide_price = #{guidePrice}, produce_time = #{produceTime},
car_type = #{carType}
where id = #{id}
</update>
运行结果:
select
查询一条数据:
需求:查询id为21的Car信息
java代码如下:
@Test
public void testSelectCarById(){
// 获取SqlSession对象
SqlSession sqlSession = SqlSessionUtil.openSession();
// 执行SQL语句
Object car = sqlSession.selectOne("selectCarById", 21);
System.out.println(car);
}
sql语句如下:
<select id="selectCarById" resultType="pojo.Car">
select
id, car_num as carNum, brand, guide_price as guidePrice, produce_time as produceTime, car_type as carType
from
t_car
where
id = #{id}
</select>
运行结果:
ps:当查询结果的字段名和java类的属性名对应不上的话,可以采用as关键字起别名 。
查询多条数据:
java代码如下:
@Test
public void testSelectCarAll(){
// 获取SqlSession对象
SqlSession sqlSession = SqlSessionUtil.openSession();
// 执行SQL语句
List<Object> cars = sqlSession.selectList("selectCarAll");
// 输出结果
cars.forEach(car -> System.out.println(car));
}
sql语句如下:
<!--虽然结果是List集合,但是resultType属性需要指定的是List集合中元素的类型。-->
<select id="selectCarAll" resultType="pojo.Car">
<!--记得使用as起别名,让查询结果的字段名和java类的属性名对应上。-->
select
id, car_num as carNum, brand, guide_price as guidePrice, produce_time as produceTime, car_type as carType
from
t_car
</select>
由于我数据库只有一条记录,先手动添加几条记录:
运行查询语句,结果为:
ps:在SQL Mapper配置文件中<mapper>标签的namespace属性可以翻译为命名空间,这个命名空间主要是为了防止sqlId冲突的。