配置文件完成增删改查
1. 查询
1.1查询所有数据:
- 编写接口方法:Mapper接口
- 编写SQL语句:sql映射文件
- 执行方法,测试
注意:如果数据库表的字段名称和实体类的属性名称不一样,则不能自动封装数据
注意查询的时候要在Mapper(接口文件)里面修改类型,并且记得在pojo的文件夹里面添加表格的属性,获取get 和set方法,否则不能查询结果,返回的是null
在写SQL映射文件的时候要与接口(Mapper)目录中的要一一对应
并且接口的方法要与对应映射文件的唯一标识一致
为了方便解决此类问题,安装MybatisX插件
setting 里面搜索安装
红色小鸟表示的是映射文件,蓝色小鸟表示的是对应的接口(点击可以互相切换)
注意在Mapper文件里面返回对象集合的时候,名字要对应
解决方法:
如果数据库表的名称和实体类属性的名字不一样,则不能自动封装数据
- 可以用别名在xml映射文件中改名字,缺点:不方便
- 直接用sql片段改名字,在查询的时候调用该sql字段, 缺点:不灵活
//最后在SQL映射文件中导入要相应的sql字段即可
<select id="selectBYID" resultType="com.rogue.pojo.Adoption">
select
<include refid="adoption_column"/> //导入相应的sql字段
from adoption;
</select>
- 为了解决以上的问题,可以用resultMapper字段解决
步骤:1.定义resulrMap的属性
2.select键值对里面的resultType改成resultMap(再映射resultMap键值对的内容)
1.2查询详情
步骤:
- 编写Mapper接口(参数id,返回结果是一个集合)
- 编写SQL语句
- 执行方法,测试
查询对应的某个对象,返回的是一个?
以下是SQL的映射文件
<select id="selectById" resultType="com.rogue.pojo.Adoption">
select an_id as id, an_name as name , adopter, ado_contact as contact , ado_date as date
from adoption
where an_id=#{
id};
</select>
Mapper接口内容:
List<Adoption> selectById(int an_id);
执行方法:首先在前面定义id的内容
int id=6006;
PayMapper payMapper= (PayMapper) sqlSession.getMapper(PayMapper.class);
//调用接口的selectAll的方法
List<Adoption> pays = payMapper.selectById(id);
System.out.println(pays);
参数占位符:
-
#{}:会将其转换为?为了防止SQL注入
-
${}:拼SQL,一定会有SQL注入的问题,但是在表名或者列名不确定的时候可以使用
两者的区别是把传参的内容显示
如果用${},显示的结果是:
-
特殊字符处理:
方法一:转义字符,例如‘<’的转义字符是<
方法二:CDATA方法
1.3条件查询
-
编写接口的方法
- 参数:所有查询条件(注意mybatis中如果接收多个参数)
如果出现的是多个参数的值的话,用‘@’Param与sql语句中的占位符相对应
一下存在三种方法:
- 结果:返回List<>
-
编写Sql语句:SQL映射文件
-
执行方法,测试
条件查询案例
- 方法一(散装参数):搜索doctor表中是女生并且大于20岁的医生
- 创建DoctorMapper接口(用第一种方法映射到每一个属性中)
public interface DoctorMapper {
List<Doctor> selectByany (@Param("sex")String sex,@Param("age")int age,@Param("name")String name);
}
- 编写sql 语句:SQL映射文件]
用resultMapper字段解决命名问题
<mapper namespace="com.rogue.Mapper.DoctorMapper">
<resultMap id="DoctorMap" type="com.rogue.pojo.Doctor">
<result column="doctor_sex" property="sex"/>
<result column="doctor_age" property="age"/>
<result column="doctor_name" property="name"/>
<result column="doctor_id" property="id"/>
</resultMap>
<select id="selectByany" resultMap="DoctorMap">
select * from doctor where doctor.doctor_age
<![CDATA[
>
]]> #{
age}
and doctor_sex=#{
sex}
and doctor_name like #{
name};//模糊查找
</select>
</mapper>
- 执行方法、测试
在获取mapper对象方法返回集合的时候,需要和DoctorMapper()中selectByany方法的中的形参一致
public class selectDoctor {
public static void main(String[] args) throws Exception {
int age=20;
String sex="女";
String name="杨";
name="%"+name+"%";
// 1.加载mybatis核心文件获取SqlSessionFactory对象
String resource = "mybatis-config.xml";//配置文件的路径
InputStream inputStream = Resources.getResourceAsStream